Scraping Sites Behind Cloudflare in 2026: Complete Guide
By Marcus Reiner · 2026-05-19 · 12 min read · Engineering
Cloudflare protects 25% of the web. Here's exactly how legitimate scrapers get through in 2026.
The honest answer up front
You cannot beat Cloudflare with a proxy alone. Cloudflare Bot Management scores the TLS handshake, HTTP/2 frame ordering, header order, JavaScript execution and behaviour - the IP is one input among many. A clean residential IP with a Python-requests fingerprint fails as reliably as a datacenter IP with a browser fingerprint.
What works is matching a real browser across every layer at once: browser-grade TLS, correct header order, real JS execution, and a high-trust residential or mobile exit IP. Either you assemble that yourself, or you pay a vendor to maintain it. Bright Data's unblocking layer is the most complete managed option we test, and Oxylabs is the strongest alternative for API-shaped workloads.
Two boundaries before we continue: only collect publicly accessible data, and never touch anything behind a login you are not authorised to use. hiQ v. LinkedIn supports scraping public data in the US, but terms of service and personal-data law still apply.
What Cloudflare actually checks
Understanding the signal stack tells you which fixes are worth effort. Cloudflare combines network reputation, transport fingerprints, protocol-level details and client-side challenges into a bot score, then applies the site owner's rules to that score.
The important consequence: improving one layer while leaving another obviously synthetic gains you nothing. Teams often buy premium residential IPs, see no improvement, and conclude proxies do not work - when the actual tell was a JA3 hash no browser has ever produced.
- IP reputation - ASN type, subnet history, hosting vs residential vs mobile
- JA3/JA4 TLS fingerprint - cipher suites, extensions and their order
- HTTP/2 fingerprint - SETTINGS frame values, pseudo-header order, priority
- Header order and completeness - real browsers send a specific sequence
- JavaScript challenge - the managed challenge computes and posts a token
- Behaviour - timing, mouse movement, navigation patterns, cookie continuity
Fingerprint first, IP second
Fix the fingerprint before you spend on IPs. A standard HTTP client presents cipher suites and extensions in an order that identifies the library instantly, and no amount of header spoofing changes the TLS ClientHello.
Practical options, in ascending order of effort: use an HTTP client built to mimic browser TLS profiles, use a patched headless browser that hides automation flags, or drive a real browser under a managed antidetect profile. Each step up costs more resources per request but clears harder targets.
Then add the IP. Residential is the default for Cloudflare-protected targets; mobile clears the hardest configurations because CGNAT gives those IPs the highest baseline trust. Datacenter is essentially a non-starter on anything with bot management enabled.
Cookie and session continuity
Cloudflare issues clearance cookies after a successful challenge. Reuse them. A scraper that solves a challenge and then throws away the cookie jar re-solves on every request, which is slow, expensive and itself an anomaly.
Keep one cookie jar per exit IP and pin that pair together with a sticky session. Presenting a clearance cookie from a different IP than the one that earned it is a clear mismatch and often scores worse than having no cookie at all.
Respect the TTL and re-challenge gracefully when it expires rather than retrying in a tight loop.
Managed unblockers vs building it yourself
The build-versus-buy line is about maintenance, not capability. Fingerprint parity is a moving target - Chrome ships every few weeks and Cloudflare updates its detection continuously - so a working homemade stack degrades unless someone owns it.
Managed unblocking endpoints take a URL and return HTML, handling TLS parity, challenge solving, retries and IP selection server-side. Pricing per 1,000 successful requests is typically $1-15 depending on target difficulty, which frequently beats the total cost of residential bandwidth plus browser compute plus engineering time.
Rough guidance: below a few thousand requests a day on a moderately protected target, self-built is fine. Above that, or on a target that changes often, managed wins on total cost of ownership.
- Self-built - full control, cheapest per request at low volume, ongoing maintenance burden
- Managed unblocker - highest success on hard targets, no fingerprint maintenance, priced per successful request
- Hybrid - self-built for easy pages, managed endpoint only for the pages that fail; usually the cheapest overall
- Headless browser plus residential proxy - middle ground when you need real rendering and control
Rate limiting and pacing
Even a perfect fingerprint gets throttled if you behave like software. Concurrency that spikes, perfectly regular intervals and identical navigation paths are all scored.
Ramp concurrency gradually, add jitter to every delay, and vary entry points rather than hitting the same URL pattern from the same session. Back off on 429 and 503 with exponential delay and jitter, and treat repeated 403s as a signal to change identity rather than to retry harder.
Errors you will see and what they mean
Cloudflare status codes are specific enough to guide the fix, so read them rather than treating every failure as a block.
- 403 with a challenge page - fingerprint or IP reputation; fix TLS parity first, then upgrade IP type
- 503 with a JS challenge - no JS execution; you need a real browser or a managed endpoint
- 429 - rate limited; reduce concurrency, add jitter, rotate identity
- 1020 access denied - a firewall rule matched, often country or ASN based; change exit geography
- 1015 rate limited by the site - per-IP threshold reached; widen your IP pool
- Empty or truncated HTML - content is rendered client-side; render it or call the underlying API
Check for an easier path first
Before engineering a bypass, look for a legitimate shortcut. Many sites expose a public API, a JSON endpoint the front end calls, a sitemap, or structured data in the HTML that gives you the same fields with none of the challenge.
Client-side rendered pages often fetch clean JSON from an endpoint that carries much lighter protection than the HTML route. Watch the network tab for a minute before writing a browser automation script - it frequently saves days and cuts bandwidth by an order of magnitude.
Cost model
Compare cost per successful record, not per request or per GB. A stack with a 60% success rate on $3/GB residential is more expensive than one with a 95% success rate on a $6 managed endpoint once retries, engineering time and delayed data are counted.
Full browser rendering is the biggest hidden cost: 1 GB of residential bandwidth covers roughly 5,000-10,000 lightweight HTML fetches but only 200-400 fully rendered browser sessions. Render only the pages that genuinely need it.
Cache aggressively, deduplicate URLs, and skip assets you never parse. Most teams cut spend materially with those three changes before renegotiating any contract.
Recommended setups by difficulty
Match the tool to the protection level rather than over-engineering everything.
- Cloudflare CDN only, no bot management - datacenter proxies plus a normal HTTP client
- Bot management on, static HTML - residential proxies plus a browser-TLS HTTP client and correct header order
- Managed challenge - headless browser through residential, or a managed unblocker
- Turnstile plus aggressive rules - managed unblocker, or mobile IPs with a full antidetect browser profile
- Login-protected content - do not scrape it unless you are authorised to
What to do next
Start by identifying which layer is failing: run the same request with a browser-TLS client on a datacenter IP, then on residential, then in a real browser. The step that flips you from 403 to 200 tells you exactly what to buy.
From there, read our JavaScript rendering guide if the content only appears after execution, and the proxy error codes reference for a status-by-status playbook. If your target changes weekly, skip the build and start with a managed endpoint - the maintenance cost is the real expense.
Frequently Asked Questions
Can a proxy alone bypass Cloudflare?
No. Cloudflare scores TLS and HTTP/2 fingerprints, header order, JavaScript execution and behaviour alongside IP reputation. A clean residential IP with a library fingerprint still fails.
What is the most important thing to fix first?
The TLS fingerprint. Standard HTTP clients present a JA3 hash no browser produces, so header spoofing on top of it changes nothing.
Which proxy type works best against Cloudflare?
Residential as the default, mobile for the hardest configurations because CGNAT gives those IPs the highest baseline trust. Datacenter rarely clears bot management.
Are managed unblockers worth the price?
Usually above a few thousand requests a day, or on targets that change often. They price per successful request, typically $1 to $15 per 1,000, and remove the fingerprint maintenance burden.
Why do I get 503 with a JavaScript challenge?
Your client is not executing JavaScript, so the clearance token is never computed. You need a real browser or a managed endpoint that solves the challenge server-side.
What does Cloudflare error 1020 mean?
A site firewall rule matched your request, often based on country or ASN. Changing exit geography usually resolves it; more rendering will not.
Is bypassing Cloudflare legal?
Collecting publicly available data is generally lawful in the US and EU, and hiQ v. LinkedIn supports that, but terms of service and personal-data law still apply. Never access content behind a login you are not authorised to use.