Cloudflare Error 1020 Access Denied: What Triggers It and How to Get Past It
Cloudflare error 1020 means a WAF custom rule on the site you requested evaluated your traffic and returned a block action. It is not a rate limit, not a challenge you failed, and not a Cloudflare-wide ban: it is one site's rule, written by that site's operator, matching something specific about your request. The practical question is never how to bypass 1020 in general — it is which field the rule matched.
- troubleshooting
- cloudflare
- waf
- 1020

Table of contents
Cloudflare's numbered errors are more useful than a bare 403 because each one names the subsystem that acted. 1020 specifically means a WAF custom rule with a block action matched the request. Somebody deliberately wrote the condition that caught you, which is good news: conditions are finite and testable.
Which Cloudflare code you actually have
| Code | Meaning | Who to talk to |
|---|---|---|
| 1020 | A WAF custom rule blocked the request | Site owner |
| 1015 | Cloudflare rate limiting | Slow down; nobody to talk to |
| 1005 | The whole ASN is banned by the site owner | Site owner |
| 1010 | Browser signature rejected | Fix the client, not the IP |
| 1006 / 1007 / 1008 | Your IP was banned by the owner | Site owner |
| 520–527 | Origin problem behind Cloudflare | Nothing you can do |
Getting this right saves hours. A 1015 will clear on its own if you pace properly, as covered in HTTP 429. A 1020 will not clear no matter how long you wait, because nothing about it is time-based.
What custom rules typically match
Cloudflare exposes a long list of request fields to rule authors. In practice a handful account for almost every 1020 people encounter.
| Field | Typical rule | What it means for you |
|---|---|---|
ip.geoip.country | Allow a shortlist of countries, block the rest | Exit country is wrong for this site |
ip.geoip.asnum | Block known hosting and VPN networks | Datacenter exit; residential avoids this entirely |
http.user_agent | Block empty or obviously automated agents | Your client is announcing itself |
http.request.uri.path | Lock /admin, /api, /wp-login to known addresses | You are on a path that is not public |
cf.threat_score | Block above a threshold | The address carries reputation history |
http.request.method | Block POST from unauthenticated sources | The verb, not the URL, is the trigger |
Rules are evaluated in order and the first match with a block action wins. That is why changing one thing can flip the outcome completely while changing three at once tells you nothing.
Diagnosing it as a visitor
If you are a legitimate user of the site, 1020 usually means something about your connection matched a rule aimed at somebody else.
- 1Turn off the VPN. Consumer VPN ranges are the single most commonly blocked ASNs.
- 2Try mobile data. A different network with a different ASN answers the question in ten seconds.
- 3Disable extensions that modify requests, then reload.
- 4Clear the site's cookies. A stale
cf_clearancecan produce odd behaviour after a rule change. - 5Note the Ray ID and email the site. The owner can look it up and see the exact rule that fired — you cannot.
Diagnosing it as an operator
For automated traffic, the goal is to identify the matched field by changing exactly one variable at a time and recording the result.
- Country — same request, exit in a different country. A clean success points straight at a geo rule.
- ASN — same country, residential exit instead of datacenter. This flips more 1020s than anything else.
- Client — the same URL in a real browser on the same connection. Success means the address is fine and the client is not.
- Path — a different, plainly public URL on the same host. Success means the rule is scoped to the path you wanted.
- Method — a GET where you were sending POST.
Record the Ray ID for every failure alongside the exit IP, country and timestamp. When the same rule fires across a hundred requests, the pattern in that table is the answer, and reconstructing it afterwards from logs that only stored 403 is impossible.
Test a residential exit against the same target
Residential IPs sit in consumer ASNs rather than hosting ranges, which is the field most 1020 rules match on. From €1.20/GB, data never expires.
What does not work
Three approaches come up constantly and are worth ruling out before you spend time on them.
- Waiting. A custom rule has no cooldown. It will block the same request next week.
- Retrying harder. The rule is deterministic; the hundredth attempt matches exactly as the first did.
- Solving a CAPTCHA. A block action never presents a challenge. If you are seeing a challenge, you have a managed challenge rule, not 1020.
If the site publishes an API, use it. Rules that block scraping on the HTML front end are frequently absent on the documented API, and the API is both faster and stable across redesigns.
If you own the site
From the other side, 1020 is your own rule doing its job on the wrong traffic. Open Security Events, filter to blocked requests, and read what actually matched — the field and value are shown per event.
- 1Sort blocked events by rule to find which one is over-firing.
- 2Check whether real customers are in the sample. Country rules catch travelling users constantly.
- 3Narrow the condition rather than deleting the rule.
- 4Move borderline rules from block to managed challenge, which lets humans through and still stops most automation.
- 5Add an allowlist for your own monitoring, uptime checks and payment webhooks before they page you at 3am.
Error 1020 is ultimately a communication problem: a rule expressing an intention, meeting a request that did not know the intention existed. Whichever side of it you are on, the fix comes from reading the actual match rather than guessing at the policy.
Sources
Frequently asked questions
What does Cloudflare error 1020 mean?
A WAF custom rule on that specific site matched your request and returned a block action. It is configured by the site owner, not by Cloudflare, so the same request can be perfectly acceptable to another Cloudflare-protected site.
How do I fix error 1020 as a normal visitor?
Disable any VPN, try a different network such as mobile data, turn off extensions that modify requests, and clear the site's cookies. If it persists, send the site owner the Ray ID from the error page — only they can see which rule fired.
Will changing my proxy fix error 1020?
It depends on which field the rule matched. If the rule targets hosting ASNs or a country, a residential exit in an accepted country resolves it. If it matches your user agent, request path or method, the exit IP is irrelevant.
What is the difference between error 1020 and error 1015?
1020 is a custom firewall rule with a block action and has no cooldown. 1015 is Cloudflare's rate limiter, is purely volume-based, and clears once you slow down.
Is error 1020 a permanent ban?
Not a ban in the account sense, but it will not expire either. The rule keeps matching until the site owner changes it or until your request stops matching the condition.
Does solving a CAPTCHA clear a 1020?
No. A block action never shows a challenge. If you are being offered a CAPTCHA, the rule action is a managed challenge rather than a block, which is a different situation with a different fix.
The seamless team runs residential, ISP and datacenter proxy infrastructure and writes these guides from day-to-day operational experience.
Ready to try seamless proxies?
Residential, ISP and datacenter proxies with no data expiry.
Browse PlansKeep reading
HTTP 403 Forbidden: What Causes It and How to Fix It
403 means the request arrived, was understood and was refused. Which layer refused it decides the fix — and rotating IPs is the right answer far less often than people assume.
GuidesHow to Avoid Getting Blocked When Web Scraping
The six layers a modern anti-bot system checks, in the order it checks them — and what to change at each one to stay unblocked.
TroubleshootingHTTP 429 Too Many Requests: How Rate Limits Work and How to Survive Them
429 is the one error that gets worse the harder you try. Read the headers, back off properly, and spread load across identities instead of hammering one.
