What triggers Cloudflare 1020
Error 1020 fires when a request matches a firewall rule — a WAF Custom Rule, a Managed Ruleset, or a "block" action in Bot Management. The usual triggers:
- Poor IP reputation. Datacenter, VPN, and recycled proxy IPs carry low trust scores; many sites block them on the first request.
- Bot-like fingerprint. Missing browser headers, a
python-requestsorcurlUser-Agent, or a TLS/JA3 handshake that doesn't match the claimed browser. - Geo / ASN rules. The site blocks whole countries, hosting providers (AWS, GCP, OVH ranges), or specific ASNs.
- Tripped a custom rule — hitting a path, header, or query pattern the owner explicitly blacklisted.
Because it's a rule match, waiting does not clear a 1020 the way it clears a 1015. You have to stop matching the rule.
How to fix Cloudflare 1020 when scraping
The block is on who you look like, so fix the signals in this order:
- Use clean residential or mobile IPs. Datacenter IPs are the number-one 1020 trigger. Rotating residential proxies with good reputation usually clear it.
- Send a complete, consistent browser profile — full headers and a matching TLS fingerprint. Spoofing the
User-Agentalone fails because the JA3/JA4 handshake still says "script." See TLS fingerprinting. - Render like a real browser when the rule checks for JavaScript execution — a full headless browser or a managed API that runs one.
Why a single fix rarely works
1020 rules usually combine signals (IP and fingerprint and behavior). Fixing one leaves the others matching. A managed scraping API that aligns IP reputation, headers, and TLS together handles this more consistently than fixing one signal at a time.
1020 vs 1015 vs a 403
Error 1015
- Temporary rate limit
- "You are being rate limited"
- Clears on its own after a cooldown
- Fix: slow down, rotate IPs
Error 1020
- Firewall / WAF rule match
- "Access denied"
- Does not clear by waiting
- Fix: change IP reputation + fingerprint
Plain 403
- From the origin server, not Cloudflare
- Permissions, auth, or origin WAF
- No Cloudflare ray-ID branding
- Fix: headers, cookies, auth
Confirm it's really 1020 by looking for the Cloudflare-branded page and a Ray ID. If there's no Cloudflare branding, treat it as an ordinary 403 Forbidden instead.