Review · Crawling framework

Scrapy review

The mature asynchronous Python crawling framework — middlewares, pipelines, AutoThrottle and a proxy layer that scales to millions of pages.

Scrapy logo

Zyte / open source · BSD 3-Clause (open source)

9.1/10

2,812 words · 13 min read

Price from
Free
Category
Crawling framework
Best for
Large structured crawls on stable HTML
Platforms
Python 3.9+ · Linux · macOS · Windows

Scrapy review: the short version

Scrapy is a crawling framework from Zyte / open source, and in our 2026 assessment it scores 9.1/10 overall. It is at its best for large structured crawls on stable html, it starts at Free, and it expects rotating residential for public sites, datacenter for tolerant targets behind it. BSD-licensed. Costs are infrastructure plus whatever proxy network you point it at.

The rest of this review covers how it actually works, what it costs at realistic volumes, which proxy type to pair it with, how it behaves against anti-bot systems, where it breaks, and which alternatives make more sense for adjacent workloads. Every figure below reflects list pricing and hands-on testing rather than vendor marketing copy.

  • +Twisted async engine with per-domain concurrency
  • +AutoThrottle, retry and robots middleware
  • +Item pipelines to any store
  • +Huge middleware ecosystem

What Scrapy is and how it works

## Scrapy review: the short version

Scrapy is a crawling framework from Zyte / open source, and in our 2026 assessment it scores 9.1/10 overall. It is at its best for large structured crawls on stable html, it starts at Free, and it expects rotating residential for public sites, datacenter for tolerant targets behind it. BSD-licensed. Costs are infrastructure plus whatever proxy network you point it at.

The rest of this review covers how it actually works, what it costs at realistic volumes, which proxy type to pair it with, how it behaves against anti-bot systems, where it breaks, and which alternatives make more sense for adjacent workloads. Every figure below reflects list pricing and hands-on testing rather than vendor marketing copy.

- Twisted async engine with per-domain concurrency

- AutoThrottle, retry and robots middleware

- Item pipelines to any store

- Huge middleware ecosystem

## What Scrapy is and how it works

Scrapy is still the reference implementation of what a crawler should be. It is built on Twisted, so a single process keeps hundreds of requests in flight without threads, and its scheduler enforces per-domain politeness while the AutoThrottle extension adapts delay to the target's observed latency. That combination is why a modest 2 vCPU worker can sustain thousands of pages per minute against a stable HTML target while staying under the rate limits that get IPs banned.

The architecture matters more than the syntax. Requests pass through downloader middlewares (where proxies, retries, headers and cookies live), responses hit spider callbacks, and extracted items flow through pipelines to your database, S3 bucket or warehouse. Because every stage is swappable, a Scrapy project can start on datacenter proxies, move to rotating residential when the target hardens, and later route only the failing 3% of URLs through an unlocker API — with no change to the parsing code.

Its weakness is equally clear: Scrapy speaks HTTP, not browsers. Any target that renders content in JavaScript, or fingerprints the TLS handshake, needs scrapy-playwright, a rendering service, or Zyte API in front of it. Teams that accept that split — rules for the cheap 95%, browsers for the expensive tail — run the most cost-efficient scraping proxy networks in production today.

## Scrapy scorecard and measured performance

Scores below are relative to the other tools in this directory, not to software in general — a 6 for scale still means a tool that handles more traffic than most projects will ever generate. The performance figures come from crawling a mixed basket of static HTML, JavaScript-rendered commerce and lightly protected listing pages from three regions.

Read them alongside your own target list. The tool almost never determines success rate on its own; the combination of exit IP quality, request fingerprint and request pacing does, which is why two teams running the same framework routinely report success rates thirty points apart.

## Throughput, rendering and resource profile

Throughput numbers only mean something with the cost attached. Scrapy delivers 600 – 3,000 pages/min per worker, and renders nothing, so any JavaScript-dependent content needs a browser or a rendering API alongside it.

Use these figures to size infrastructure before committing to a plan or a proxy contract. Work backwards from records per day, apply a realistic success rate, add a retry factor of 1.2–1.6, and only then choose concurrency.

## Scrapy pricing and real cost per thousand pages

BSD-licensed. Costs are infrastructure plus whatever proxy network you point it at.

Framework economics are dominated by bandwidth, not compute. A typical HTML page transfers 40–120 KB compressed, so a million pages is roughly 40–120 GB — between $40 and nearly $1,000 depending on whether that traffic rides datacenter or residential exits. Enable gzip, request only the URLs you will parse, cache aggressively during development, and never render a page you can parse from JSON.

A useful discipline: express every option as cost per thousand usable records, not cost per month. A plan that looks cheap and delivers a 60% success rate is more expensive than a premium option at 95%, because the failures consume bandwidth, retries, engineering attention and calendar time.

## Best proxies for scraping with Scrapy

A crawling framework issues raw HTTP requests, so the proxy layer is doing all of the identity work. Start every project on datacenter IPs: they cost cents, deliver 30–80 ms of added latency, and if the target tolerates them you have saved 80% of your bandwidth budget. The moment your 4xx and soft-block rate climbs above a few percent, move that domain to a rotating residential gateway and keep the rest of the crawl where it is. Per-domain proxy tiers are the single most effective cost control in a scraping proxy network.

With Scrapy specifically, identity attaches through http, https and socks5 via downloader middleware; rotating gateways work out of the box. Get that wiring right before tuning anything else — a rotation bug that reuses one exit across a thousand requests will look exactly like a bad proxy provider.

## How Scrapy handles anti-bot systems

HTTP-level scraping is defeated by TLS and HTTP/2 fingerprinting long before IP reputation becomes the problem. Standard Python and Node clients present JA3 and header-order signatures that no real browser produces, so pair the framework with an impersonating client (curl_cffi, tls-client or an equivalent), send coherent header sets in real browser order, and keep cookies per session. Rotating IPs while broadcasting a scripted TLS fingerprint just burns addresses.

Practically, treat detection as a budget rather than a binary. Measure success rate per domain daily, escalate a domain one tier at a time — better headers, then better IPs, then a browser, then an unlocker — and stop at the first tier that clears your threshold. Escalating everything to the most expensive tier is the most common and most costly mistake in scraping operations.

## Scaling Scrapy in production

Scaling a framework is a queue problem. Move the request queue into Redis or a database so workers are stateless and restartable, shard by domain to keep politeness limits intact, and track success rate per proxy session so burned exits retire automatically. Most teams over-provision concurrency and under-provision observability; the crawl that recovers from a two-hour ban without human intervention is worth more than the one that runs 20% faster.

- Track success rate, cost per thousand records and bytes per page as your three primary metrics

- Retire proxy sessions automatically on repeated failures instead of retrying blindly

- Deduplicate URLs before dispatch — duplicates cost bandwidth, credits and rate-limit headroom

- Validate content, not just HTTP status: a 200 that returns a consent wall is a failed fetch

- Keep a second fetching path warm so a vendor incident degrades throughput instead of stopping it

## Scrapy pros and cons

No scraping tool is universally correct; each one trades cost, control and maintenance in a different ratio. Scrapy makes the following trade explicitly.

## Who should use Scrapy — and who should not

Choose Scrapy when your workload looks like large structured crawls on stable html and your team is comfortable with Python 3.9+ · Linux · macOS · Windows. It fits organisations that have already decided whether they are buying outcomes or building capability, because it sits clearly on one side of that line: you build, you operate, and you keep the margin.

Look elsewhere if you need managed challenge solving, because the anti-bot arms race will otherwise become a permanent engineering line item.

## Compliance and responsible collection

Collecting publicly accessible data is broadly lawful in most jurisdictions, but the surrounding obligations are real: respect robots.txt where it expresses the publisher's intent, avoid authentication walls you have not been granted access to, never collect personal data without a lawful basis under GDPR or equivalent, and keep request rates low enough that you never degrade the target's service.

Reputable proxy providers enforce KYC precisely because misuse of their networks is their liability as well as yours. Document what you collect, why, how long you retain it and who can access it. For AI training corpora, record licensing and provenance per source — that record is increasingly the first thing an auditor or enterprise customer asks to see.

Scrapy scorecard and measured performance

Scores below are relative to the other tools in this directory, not to software in general — a 6 for scale still means a tool that handles more traffic than most projects will ever generate. The performance figures come from crawling a mixed basket of static HTML, JavaScript-rendered commerce and lightly protected listing pages from three regions.

Read them alongside your own target list. The tool almost never determines success rate on its own; the combination of exit IP quality, request fingerprint and request pacing does, which is why two teams running the same framework routinely report success rates thirty points apart.

Scrapy scorecard (out of 10)
CriterionScoreAssessment
Ease of adoption7/10A day or two of ramp-up
Scale ceiling10/10Comfortable at millions of pages
Anti-bot resilience5/10Needs an unlocker on protected sites
Documentation9/10Excellent, with runnable examples
Value for money10/10Exceptional cost per page

Throughput, rendering and resource profile

Throughput numbers only mean something with the cost attached. Scrapy delivers 600 – 3,000 pages/min per worker, and renders nothing, so any JavaScript-dependent content needs a browser or a rendering API alongside it.

Use these figures to size infrastructure before committing to a plan or a proxy contract. Work backwards from records per day, apply a realistic success rate, add a retry factor of 1.2–1.6, and only then choose concurrency.

Scrapy measured behaviour, 2026 test conditions
MetricObservedNotes
Throughput600 – 3,000 pages/min per workerPer worker or per plan tier, on a stable target
JavaScript renderingNone (needs Playwright or a rendering API)Rendering multiplies cost 5–20× versus plain HTTP
Memory footprint~120 MB per workerSizing input for container limits
Success profileHigh on static HTML, low on hardened anti-bot targetsDepends far more on proxy quality than on the tool
Proxy supportHTTP, HTTPS and SOCKS5 via downloader middleware; rotating gateways work out of the boxHow identity is attached to a request

Scrapy pricing and real cost per thousand pages

BSD-licensed. Costs are infrastructure plus whatever proxy network you point it at.

Framework economics are dominated by bandwidth, not compute. A typical HTML page transfers 40–120 KB compressed, so a million pages is roughly 40–120 GB — between $40 and nearly $1,000 depending on whether that traffic rides datacenter or residential exits. Enable gzip, request only the URLs you will parse, cache aggressively during development, and never render a page you can parse from JSON.

A useful discipline: express every option as cost per thousand usable records, not cost per month. A plan that looks cheap and delivers a 60% success rate is more expensive than a premium option at 95%, because the failures consume bandwidth, retries, engineering attention and calendar time.

Scrapy pricing, 2026 list rates
PlanPriceWhat you get
Scrapy (self-hosted)$0Full framework, unlimited spiders, any proxy backend
Scrapyd / self-managed cluster$10 – $200 / mo VPSJob scheduling, distributed workers, your own monitoring
Zyte Scrapy Cloudfrom $9 / moHosted spiders, job dashboard, log retention, add-ons

Best proxies for scraping with Scrapy

A crawling framework issues raw HTTP requests, so the proxy layer is doing all of the identity work. Start every project on datacenter IPs: they cost cents, deliver 30–80 ms of added latency, and if the target tolerates them you have saved 80% of your bandwidth budget. The moment your 4xx and soft-block rate climbs above a few percent, move that domain to a rotating residential gateway and keep the rest of the crawl where it is. Per-domain proxy tiers are the single most effective cost control in a scraping proxy network.

With Scrapy specifically, identity attaches through http, https and socks5 via downloader middleware; rotating gateways work out of the box. Get that wiring right before tuning anything else — a rotation bug that reuses one exit across a thousand requests will look exactly like a bad proxy provider.

Which proxy type to pair with this tool, by target difficulty
Target profileProxy typeTypical priceWhy
Internal APIs, open data, docs sitesDatacenter$0.30 – $2.00 / IP / moNo consumer-IP requirement; cheapest possible bandwidth
Mid-tier commerce, listings, forumsRotating residential$1.00 – $8.00 / GBReal ISP-assigned IPs clear reputation checks
Logged-in accounts, dashboardsISP / static residential$1.50 – $6.00 / IP / moOne stable identity per account, held for months
App-only endpoints, hardest anti-botMobile (4G/5G)$4.00 – $20.00 / GBCarrier CGNAT makes per-IP blocking costly for the target
Everything already blockedUnlocker API$0.50 – $3.00 / 1k requestsChallenge solving handled provider-side, billed per success

Rotating proxy middleware (settings.py + spider)

# settings.py
DOWNLOADER_MIDDLEWARES = {
    "scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware": 750,
    "scrapy.downloadermiddlewares.retry.RetryMiddleware": 550,
}
CONCURRENT_REQUESTS = 64
CONCURRENT_REQUESTS_PER_DOMAIN = 8
AUTOTHROTTLE_ENABLED = True
RETRY_TIMES = 4

# spider.py — sticky session per request
import scrapy

GATEWAY = "http://user-country-us-session-{sid}:pass@gate.provider.net:7000"

class PriceSpider(scrapy.Spider):
    name = "prices"

    def start_requests(self):
        for i, url in enumerate(self.urls):
            yield scrapy.Request(
                url,
                meta={"proxy": GATEWAY.format(sid=i)},
                callback=self.parse,
            )

How Scrapy handles anti-bot systems

HTTP-level scraping is defeated by TLS and HTTP/2 fingerprinting long before IP reputation becomes the problem. Standard Python and Node clients present JA3 and header-order signatures that no real browser produces, so pair the framework with an impersonating client (curl_cffi, tls-client or an equivalent), send coherent header sets in real browser order, and keep cookies per session. Rotating IPs while broadcasting a scripted TLS fingerprint just burns addresses.

Practically, treat detection as a budget rather than a binary. Measure success rate per domain daily, escalate a domain one tier at a time — better headers, then better IPs, then a browser, then an unlocker — and stop at the first tier that clears your threshold. Escalating everything to the most expensive tier is the most common and most costly mistake in scraping operations.

Scaling Scrapy in production

Scaling a framework is a queue problem. Move the request queue into Redis or a database so workers are stateless and restartable, shard by domain to keep politeness limits intact, and track success rate per proxy session so burned exits retire automatically. Most teams over-provision concurrency and under-provision observability; the crawl that recovers from a two-hour ban without human intervention is worth more than the one that runs 20% faster.

  • +Track success rate, cost per thousand records and bytes per page as your three primary metrics
  • +Retire proxy sessions automatically on repeated failures instead of retrying blindly
  • +Deduplicate URLs before dispatch — duplicates cost bandwidth, credits and rate-limit headroom
  • +Validate content, not just HTTP status: a 200 that returns a consent wall is a failed fetch
  • +Keep a second fetching path warm so a vendor incident degrades throughput instead of stopping it

Scrapy pros and cons

No scraping tool is universally correct; each one trades cost, control and maintenance in a different ratio. Scrapy makes the following trade explicitly.

Scrapy — strengths against weaknesses
StrengthsWeaknesses
Best throughput-per-dollar of any scraping stackNo JavaScript rendering without an extra service
Battle-tested since 2008 and still actively releasedSteep first-week learning curve
Clean separation of crawling, parsing and storageWeak against TLS/browser-fingerprint defences
Works with any rotating residential or datacenter gatewayYou own all the monitoring and deploy tooling

Who should use Scrapy — and who should not

Choose Scrapy when your workload looks like large structured crawls on stable html and your team is comfortable with Python 3.9+ · Linux · macOS · Windows. It fits organisations that have already decided whether they are buying outcomes or building capability, because it sits clearly on one side of that line: you build, you operate, and you keep the margin.

Look elsewhere if you need managed challenge solving, because the anti-bot arms race will otherwise become a permanent engineering line item.

Compliance and responsible collection

Collecting publicly accessible data is broadly lawful in most jurisdictions, but the surrounding obligations are real: respect robots.txt where it expresses the publisher's intent, avoid authentication walls you have not been granted access to, never collect personal data without a lawful basis under GDPR or equivalent, and keep request rates low enough that you never degrade the target's service.

Reputable proxy providers enforce KYC precisely because misuse of their networks is their liability as well as yours. Document what you collect, why, how long you retain it and who can access it. For AI training corpora, record licensing and provenance per source — that record is increasingly the first thing an auditor or enterprise customer asks to see.

Scrapy FAQs

Does Scrapy support SOCKS5 proxies?+

Yes. Install scrapy-socks or route through a local SOCKS5-to-HTTP bridge, then set request.meta['proxy']. Most teams use the provider's HTTP gateway because it exposes country and session targeting in the username.

How many proxies do I need for a Scrapy crawl?+

Divide requests per hour by the target's per-IP rate limit. With a rotating residential gateway you buy concurrency and bandwidth, not IP counts — 50 concurrent threads is typical for a mid-size crawl.

Is Scrapy still maintained in 2026?+

Yes. Scrapy ships regular releases, supports modern Python, and has first-party Playwright integration for JavaScript-heavy pages.

Keywords covered

proxies for web scraping · scraping proxy network · proxy for web crawler · rotating proxies for scraping · scrapy proxy middleware

Scrapy alternatives

Crawlee logo

Crawlee

9.0/10

Crawling framework · Apify

Batteries-included crawler for Node and Python with automatic proxy rotation, session pooling and per-session ban tracking.

Price from
Free
Platforms
Node.js · Python
Best for
Production crawlers built fast, with ban handling included
Proxies
First-class ProxyConfiguration with rotation, tiers and automatic retirement of banned sessions
  • + SessionPool with automatic ban detection
  • + Tiered proxy configuration (cheap first, expensive on retry)
  • + Unified request queue across HTTP and browser crawlers
  • + Adaptive crawler picks HTTP vs browser per page
Playwright logo

Playwright

9.3/10

Headless browser · Microsoft

Headless Chromium, Firefox and WebKit with per-context proxies — the default engine for JavaScript-rendered scraping targets.

Price from
Free
Platforms
Node · Python · .NET · Java
Best for
Dynamic, JS-rendered and login-gated pages
Proxies
Per-browser and per-context HTTP/SOCKS5 proxies with username auth
  • + Per-context proxy rotation
  • + Network interception and request blocking
  • + Auto-wait removes flaky sleeps
  • + Codegen and trace viewer for debugging
Zyte API logo

Zyte API

8.6/10

Unlocker / scraping API · Zyte (creators of Scrapy)

Rendering, ban handling and automatic extraction as one API from the team that maintains Scrapy.

Price from
from ≈ $0.20 / 1k requests
Platforms
HTTP API · scrapy-zyte-api · Python/Node SDKs
Best for
Scrapy-native stacks that need ban handling without changing framework
Proxies
Managed proxy selection with automatic escalation from datacenter to residential
  • + Automatic ban detection and proxy escalation
  • + Browser rendering toggled per request
  • + AI extraction for products, articles and job posts
  • + Native scrapy-zyte-api integration

Scrapy head-to-head comparisons

Related articles

All articles →

Related free proxy tools

All tools →

Trusted partners