Proxies for Scrapy
One proxy URL in your downloader middleware, with rotating datacenter or residential exits behind it.
From $7.47 a month for 3 GB
That is $2.49/GB at 3 GB, and the rate falls as the volume rises.
For targets that refuse or challenge datacenter ranges
- Rotating Datacenter from $5.90 a month for 10 GB.Cheaper, and enough where the target accepts hosting ranges
- Any Scrapy spider takes the proxy URL, and a working middleware guide exists.
- Residential exits from an upstream partner network in 170+ countries.
- HTTP(S) / SOCKS5 included; Scrapy carries credentials in the proxy URL.
- 7-day refund on your first order
- Billed monthly. Cancel anytime, keep access to period end.
Point your spider at the real target through a free allocation of shared datacenter proxies first, no card required.
Start freePlans and pricing
Billed monthly. Card and PayPal renew automatically until you cancel; a Bitcoin plan does not renew on its own, so you renew it from your dashboard. Cancel anytime from your own settings. You keep access until the end of the period you have paid for.
Residential
High-quality residential IPs for accurate, location-specific data
| Bandwidth | Price per GB | Total | Discount | Select this plan |
|---|---|---|---|---|
| 3 GB | $2.49/GB | $7.47 /mo | - | |
| 5 GB | $2.29/GB | $11.45 /mo | Save 8% | |
| 10 GB | $1.99/GB | $19.90 /mo | Save 20% | |
| 25 GB | $1.69/GB | $42.25 /mo | Save 32% | |
| 50 GB | $1.39/GB | $69.50 /mo | Save 44% | |
| 100 GBPopular | $0.79/GB | $79.00 /mo | Save 68% | |
| 250 GB | $0.75/GB | $187.50 /mo | Save 70% | |
| 500 GB | $0.70/GB | $350.00 /mo | Save 72% | |
| 1 TB | $0.65/GB | $650.00 /mo | Save 74% | |
| 5 TB | $0.49/GB | $2,450.00 /mo | Save 80% |
- Bandwidth
- Per GB pricing
- Threads
- Unlimited
- Protocols
- HTTP(S) / SOCKS5
- Sessions
- Per tunnel or request, or sticky (best effort, up to 30 min)
Rotating Datacenter
Auto-rotating datacenter proxies across the US, Italy and Spain, billed by bandwidth usage. The gateway picks an exit per HTTPS tunnel, SOCKS5 connection or plain-HTTP request, or holds one with a session id
| Bandwidth | Price per GB | Total | Discount | Select this plan |
|---|---|---|---|---|
| 10 GB | $0.59/GB | $5.90 /mo | - | |
| 25 GBPopular | $0.52/GB | $13.00 /mo | Save 12% | |
| 50 GB | $0.47/GB | $23.50 /mo | Save 20% |
- Bandwidth
- Per GB pricing
- Threads
- Unlimited
- Protocols
- HTTP(S) / SOCKS5
- Sessions
- Per tunnel or request, or sticky up to 30 min
Is this the right product for you?
Scrapy does not decide which product you need; the target does. Run your existing spider through the free datacenter allocation against the real target. If pages come back, rotating datacenter is the cheaper buy and gives Scrapy one endpoint with rotation behind it. If they come back blocked or challenged, residential is where to start. Residential can be refused too, so buy the smallest plan and check your own target before scaling. The middleware wiring is the same either way.
What you get
- Residential in 170+ countries
- Country, state, city and ASN targeting, all set in the proxy username rather than by switching endpoints. These exits come from an upstream partner network and are resold, which is why residential is billed by the gigabyte.
- Both protocols, no upcharge
- HTTP(S) / SOCKS5 on every tier of this product, on one credential, at no extra charge.
Scrapy already knows how to use a proxy: HttpProxyMiddleware ships enabled, and a proxy URL on a request routes it through that address. What Scrapy does not decide for you is which address each request leaves from, what happens to that decision on a retry, and whether a paginated crawl keeps one address for the whole sequence. Those three answers are the difference between a crawl that finishes and one that collects the same blocked page a thousand times.
Set the proxy in a downloader middleware
Assign the proxy in a downloader middleware, before the retry middleware sees the request. Set the proxy in process_request and Scrapy uses it for that attempt; keeping the decision out of the spider means every request gets it, including the ones Scrapy generates itself. The ordering number matters: place the middleware so that a retried request is re-assigned rather than sent back through the exit that just failed.
The chain, the retry interaction and a working class are in the Scrapy middleware guide.
- Set the proxy in process_request, not in the spider, so generated requests are covered
- Order it so a retry is re-assigned rather than reusing the exit that just failed
- Leave the credential in the proxy URL and Scrapy passes it through for you
- Let one endpoint do the rotation instead of maintaining a list in Python
A fresh exit per tunnel or request, or one exit per session
The gateway picks an exit for each HTTPS tunnel your spider opens and for each plain-HTTP request. Scrapy's downloader keeps connections alive, so HTTPS requests that reuse an open tunnel reuse its exit, and a new tunnel gets a new address. For discovery work (search pages, listings, availability checks) that is the behavior you want. For anything with state, hold one exit on purpose: add a session segment to the username and every request carrying that id leaves from the same address, on rotating datacenter for up to 30 minutes from when the pin is first assigned. Residential sessions are best effort, with a 30-minute ceiling: the exit can drop sooner if its device goes offline, so switch to a new session ID after repeated failures. Drop the segment and you are back to rotation with nothing to clean up.
What breaks when the exit changes mid-crawl is covered in sticky versus rotating sessions.
Concurrency decides the bill
Scrapy's concurrency settings control how much traffic you generate, and auto-throttling adapts them to the latency it sees. Through a rotating endpoint that traffic is spread across many addresses, so per-domain settings that looked conservative against a single IP can become a much heavier load, and on a metered product it lands on the invoice. Start lower than you expect, let auto-throttling find the ceiling, run a bounded slice of the crawl, and size the plan from the gigabytes it moved rather than from an estimate.
To size a pool against a page count and a time window, use the proxy calculator.
What you are buying, by product
Residential exits are consumer connections in a partner network, billed by the gigabyte, and are the product to try when a target refuses datacenter ranges. Rotating datacenter selects an exit for each connection (each request, on plain HTTP) from blocks Node4 owns in the United States, Italy and Spain, also billed by the gigabyte, and is the cheaper answer when a target accepts hosting traffic but rate-limits each address. Dedicated datacenter is priced per address with unlimited bandwidth, which suits a heavy crawl of a tolerant target where the bytes would otherwise dominate the cost.
Where each billing unit wins, with the arithmetic, is in unmetered billing versus per GB.
Frequently asked questions
Which proxies should I use with Scrapy?
It depends on the target, so test first. Run your existing spider through the free datacenter allocation. If the pages come back, rotating datacenter is the cheaper product and the place to start. If they come back blocked or challenged, try residential; it can be refused too, so start on the smallest plan.
Do I need a rotating endpoint, or a list of proxies?
A rotating endpoint is one hostname that selects an exit for each connection (each request, on plain HTTP), so there is no list to hold in Python, no health checking, and no code change when the pool changes. A fixed list is the better shape when you want to control which address handles which task, for example one dedicated address per logged-in account. Scrapy works with either; the endpoint is less code.
How do I keep the same IP across a paginated crawl?
Add a session segment to the username and reuse it for every request in that sequence. Requests carrying the same session id exit from the same address; drop the segment to return to rotation. On rotating datacenter the pin is held for up to 30 minutes measured from when it is first assigned, so a longer crawl should mint a fresh session id partway through. Residential sessions are best effort, with a 30-minute ceiling: the exit can drop sooner if its device goes offline, so switch to a new session ID after repeated failures.
Will proxies stop my spider being blocked?
They address one cause: limits counted per IP address. Spreading requests over many exits keeps any single address under a per-IP rate limit or request cap, and a ban on one address affects only the requests that land on it. They do nothing about identity above the IP layer: cookies, headers, TLS fingerprints and request timing still travel with your client, and a target correlating on those will connect your requests whatever the exit is. Set a real user agent, keep auto-throttling on, and respect the site.
How much bandwidth does a Scrapy crawl use?
Multiply the pages you intend to fetch by the average response size, then add any assets your spider follows, which is where estimates usually go wrong. A crawl fetching HTML only is far cheaper than one pulling images and fonts. On a metered product that arithmetic is the bill, so measure a small run before committing to a large one.
From $7.47 a month for 3 GB
Billed monthly. Cancel anytime in your settings, and you keep access to the end of the period you have paid for.
Guides for Proxies for Scrapy
Setup, targeting and troubleshooting, written for people already running this in production.
- Wiring proxy rotation into Scrapy's middleware chain
- Choosing the right proxy type for a target
- Rotating a Selenium proxy, and the auth traps on the way
- Setting proxies in Python requests and sessions
- What breaks when the exit IP changes mid-crawl
- Sizing a proxy pool against a page count
- Proxies in Python requests, session by session
- Proxy providers ranked for Python developers
- SOCKS5 from aiohttp, without blocking the loop
- Practices that keep a crawl inside a site's tolerance
- Puppeteer rotating proxy, per browser or per context
- Picking the proxy type a Puppeteer or Playwright job needs
- A ten-minute risk screen before a scrape ships
- Proxies for web scraping, chosen by what is blocking you
- Scraping Amazon, and why the marketplace decides the exit
- Price monitoring when the price is geo-fenced
- Ad verification from inside the market you are checking
- Rank tracking, chosen on geolocation rather than speed
- Node4 vs Oxylabs: proxy plans, prices and limits
- Proxies for recruitment and staffing agencies, chosen by authorized task
- Scrapy proxy rotation with bounded retries and response checks