Documentation Python quickstart Blog Free tools Enterprise solutions hello@quanticdata.ioLog in

Web Unlocker · Block pages

Block pages: what you see, and which anti-bot system it is

A block page is what a site's protection sends instead of the page you asked for. This dictionary maps what you see, the status code, the words on the page, a header or a cookie, to the system that sent it, for eight systems from Cloudflare to AWS WAF, and links the page that explains each one.

88.9%
calls answered with the real page across 27 protected targets, canary of 11 November 2026
81
calls, 3 runs, default settings
4.1 s
median response across the run

Find it by the words on the page

Start with the sentence on the page: each system prints its own, and it is the most reliable mark. Search this table for the words you see.

What the page saysSystemWhat it meansExplained on
"Just a moment..." with "Verifying you are human" or "Checking your browser"CloudflareA challenge page. A script checks the browser, then lets the request through."Just a moment..."
"Verify you are human", with a box to tick or a spinnerCloudflareTurnstile, Cloudflare's check in place of a CAPTCHA: inside a challenge page, or as a widget on a form.Cloudflare Turnstile
"Error 1020" and "Access denied"CloudflareA security feature set up by the owner of the site blocked the request. A refusal, not a check.Error 1020
"Error 1015" and "You are being rate limited"CloudflareThe address sent more requests than the rule of the site allows in a period. Temporary.Error 1015
"Sorry, you have been blocked", with a Ray IDCloudflareA block by a security rule of the site, shown on Cloudflare's standard block page. A refusal, not a check.Cloudflare guide
"Error 1005", "1006", "1007", "1008", "1009" or "1010"CloudflareA ban set by the owner of the site: on the network (1005), the IP address (1006, 1007, 1008), the country (1009) or the browser's signature (1010).Cloudflare guide
"Please enable JS and disable any ad blocker"DataDomeThe DataDome block page. In a browser a device check or a slider follows."Please enable JS and disable any ad blocker"
"Access Denied. You don't have permission to access ... on this server." and "Reference #18."AkamaiAn Akamai edge server refused the request before the site saw it."Access Denied ... on this server"
"Press & Hold to confirm you are a human (and not a bot)"PerimeterX (HUMAN)A behaviour challenge: the page records how the button is held.Press and hold CAPTCHA
"Access to this page has been denied", as the page titlePerimeterX (HUMAN)The title of the same Press & Hold page.Press and hold CAPTCHA
"Pardon Our Interruption"ImpervaThe check of Imperva Advanced Bot Protection: the browser has to prove itself."Pardon Our Interruption"
"Request unsuccessful. Incapsula incident ID:" and a numberImpervaA refusal by Imperva's firewall layer, before any script runs.Imperva (Incapsula) guide
"The requested URL was rejected. Please consult with your administrator. Your support ID is:"F5 BIG-IPThe blocking page of the firewall: a rule of the site's policy fired."The requested URL was rejected"
"Please enable JavaScript to view the page content."F5 BIG-IPThe JavaScript check of bot defense. In a browser it reloads by itself.F5 BIG-IP and Shape guide
"Let's confirm you are human", with a puzzleAWS WAFThe CAPTCHA action of a rule.AWS WAF guide
"403 Forbidden" alone, or "The request could not be satisfied. Request blocked."AWS WAFA rule blocked the request outright.AWS WAF guide
"I'm not a robot" with a box to tick, or pictures to pick fromreCAPTCHA or hCaptchaA captcha widget that the site added to a page or a form, not a system in front of the site.CAPTCHA when scraping
No words at all: a blank page that holds one scriptKasada or AWS WAFA check that only a browser can run. The status code tells the two apart: see the next table.Kasada guide
How the block page dictionary works: first three things you can see in a blocked answer, a 403 with the words Just a moment, a 429 with an empty page, and a 200 with the words Request Rejected, then a table that looks them up, last a card that names the system behind each one: Cloudflare, Kasada, F5 BIG-IP, and AWS WAF for a 202 or a 405.
What you see in a blocked answer and the system behind it.

Find it by the status code

The status code alone is ambiguous. Read it together with what comes with it: the same code means different things on different systems.

StatusWhat comes with itSystemWhat it meansExplained on
403"Just a moment..." and the header cf-mitigated: challengeCloudflareA challenge. A browser passes it; an HTTP client stays on the 403."Just a moment..."
403"Error 1020"CloudflareA flat refusal by a rule of the site.Error 1020
403A tiny page: one sentence and a script from captcha-delivery.comDataDomeThe block page, with a device check or a slider behind it."Please enable JS and disable any ad blocker"
403"Access Denied" and a Reference lineAkamaiA refusal at the edge server."Access Denied ... on this server"
403"Press & Hold", or JSON with appId on an API callPerimeterX (HUMAN)The challenge page, or its JSON form.Press and hold CAPTCHA
403"Incapsula incident ID"ImpervaA refusal by the firewall layer.Imperva (Incapsula) guide
429"Error 1015"CloudflareA real rate limit, set by the owner of the site.Error 1015
429An almost empty page that loads ips.js, on the very first requestKasadaNot a rate limit. Every new visitor gets it until a browser runs the script.Kasada guide
202An almost empty page and the header x-amzn-waf-action: challengeAWS WAFThe Challenge action: a silent script, then the page reloads.AWS WAF guide
405A puzzle page and the header x-amzn-waf-action: captchaAWS WAFThe CAPTCHA action, not a wrong method.AWS WAF guide
200"Request Rejected" and a support IDF5 BIG-IPA rejection served as a normal answer."The requested URL was rejected"
200"Pardon Our Interruption", or a page that holds only a frame from /_Incapsula_ResourceImpervaA check served as a normal answer."Pardon Our Interruption"
503"Just a moment..." on older setupsCloudflareAn older JavaScript challenge."Just a moment..."

Find it by a header or a cookie

When the page says nothing, the headers and the cookies still do. Most of these marks say which system is in front of the site, not that it stopped you: only the two response headers that name an action say that.

Header or cookieWhereSystemWhat it tells youExplained on
cf-mitigated: challengeResponse headerCloudflareThis answer is a challenge page, not the page you asked for."Just a moment..."
server: cloudflare, cf-rayResponse headersCloudflareThe site is behind Cloudflare. Present on every answer, blocked or not.Cloudflare guide
cf_clearance, __cf_bmCookiesCloudflareA passed challenge, and bot scoring.Cloudflare guide
challenges.cloudflare.comScript hostCloudflareTurnstile is on the page, as a widget or inside a challenge.Cloudflare Turnstile
x-datadome, datadomeResponse header, cookieDataDomeThe site is protected by DataDome; the cookie is checked on every request.DataDome guide
_abck, bm_sz, ak_bmscCookiesAkamaiAkamai Bot Manager is judging the client; _abck holds the verdict.Akamai Bot Manager guide
_px3, _pxvid, _pxhdCookiesPerimeterX (HUMAN)The session is scored; _px3 carries the score.PerimeterX (HUMAN) guide
x-kpsdk-ct, x-kpsdk-cd, KP_UIDzRequest headers, cookieKasadaThe tokens a browser adds after Kasada's script ran.Kasada guide
x-iinfo, x-cdn: Imperva, visid_incap_, incap_ses_, reese84Response headers, cookiesImpervaThe site runs behind Imperva; reese84 belongs to the bot check.Imperva (Incapsula) guide
TS cookies, TSPD_101, BIGipServerCookiesF5 BIG-IPA BIG-IP firewall is in front of the site.F5 BIG-IP and Shape guide
x-amzn-waf-action, aws-waf-tokenResponse header, cookieAWS WAFThe action a rule took, and the token that proves a passed challenge.AWS WAF guide
g-recaptcha, h-captchaElement in the pagereCAPTCHA, hCaptchaA captcha widget is on the page. It may never show a challenge.CAPTCHA when scraping

How to read a block

  • The status code is not proof. Imperva and F5 BIG-IP often serve their block page with 200. Kasada answers a new visitor with 429 before any rate was exceeded. On AWS WAF a 405 is a puzzle, not a wrong method. Code that trusts the status stores block pages as data.
  • The words are the best proof. Every system prints its own sentence, and sites rarely change it. One line of the body is enough to name the system: a reference, a support ID, an incident ID, a title.
  • A mark is not a block. A cookie or a header says which system is in front of the site. It is on the answers that pass as well as on the ones that are stopped, so check the body before you call an answer blocked.

If you are a visitor

If you met one of these pages in your browser, the first steps are nearly always the same: JavaScript and cookies on, ad blockers and VPN off for that site, a normal up-to-date browser, one reload. When the page prints a reference, a Ray ID or a support ID, send it to the site: only its team can read it. The page of each message has the steps that fit it.

If your script gets it

If a script of yours collects public pages and meets one of these, the system tells you what failed: the address, the client, a check that needs a browser, or a limit. Each guide explains its system, and one call to the Web Unlocker returns the page with the name of the system in the answer.

Let the answer name the system

You do not have to read the block yourself. Send the URL to the REST endpoint: when the page comes back, blocked is false. When every attempt met a wall, the answer says which system it recognised in vendor and what kind of stop it was in blockClass.

curl -X POST https://app.quanticdata.io/api/v1/scraper/unlock \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/", "country": "us"}'

On the proxy endpoint the same two facts come back as the headers x-qp-vendor and x-qp-block-class.

What the answer tells you

FieldWhat it says
blockedfalse when the real page came back. true only when every attempt met a block; the block page is then in body.
vendorThe system the engine recognised: cloudflare, datadome, akamai, perimeterx, kasada, imperva, shape, awswaf. A captcha widget is reported as recaptcha or hcaptcha, and anything else as unknown.
blockClassThe kind of stop. The values are in the next table.
tier_servedtls for a browser-grade request, browser when a real browser had to open the page.
attempts, latency_msHow many tries the call took and how long it lasted.

The values of blockClass

blockClassWhat stopped the call
js_challengeA check that a real browser clears by running a script.
captchaThe page asks a person: a puzzle, a slider, press and hold.
access_deniedA flat refusal, with no challenge offered.
rate_limitedA plain 429: too many requests.
fingerprintThe client itself was judged automated.
geoThe site does not serve the country of the exit.

The full list, with what to do for each value, is in the Web Unlocker section of the API docs.

How this dictionary was put together

Every row comes from the documentation of the system itself, listed at the foot of this page, and from the words the block pages print. Nothing here is taken from a forum.

The words and the marks are what each system sends by default. A site can restyle a block page, rename a cookie or change a status code, so treat one mark as a hint and two as an answer.

Measured, with a date

The canary of 11 November 2026 runs a fixed list of 27 protected targets, sites of the eight systems in these tables among them: 72 of 81 calls came back with the real page, with a median response of 4.1 s.

A call counts only when the answer is 2xx and carries the real page, not a challenge. The list, the method and every run are on the Web Unlocker status page.

What it is for, and what it does not do

  • It is for pages anyone can open in a browser without signing in: prices, listings, reviews, search results, public profiles.
  • Challenges that need no human input are handled by the browser tier. An interactive captcha that asks a person to click, pick images or type is not solved: the answer comes back with blocked: true and blockClass: "captcha", so your code can skip the page or try later.
  • It does not log in for you and it does not create accounts. Pages behind a login stay behind it.
  • Whether you may collect a page depends on the terms of the site and on the law that covers the data. A protection system does not change that, in either direction.

Block pages: questions people ask

What is a block page?

A block page is the answer a site's protection system sends in place of the page you asked for, when it judges a request automated or unwanted. It can be a refusal, a check that a browser clears by itself, a captcha, or an almost empty page with one script. Each system has its own wording.

How do I tell which anti-bot system a site uses?

Read three things in the blocked answer: the words on the page, the status code, and the headers and cookies. The words are the most reliable, since each system prints its own sentence. The tables on this page map each of them to its system, and the Web Unlocker reports it in the vendor field.

Why did I get a block page with status 200?

Because some systems serve their block as a normal answer. F5 BIG-IP sends its Request Rejected page with status 200 by default, and Imperva often does the same with its check. Code that trusts the status stores the block as data. Compare the body with what the page should contain.

Is a 429 always a rate limit?

No. On a Cloudflare site with error 1015 it is: the address went over the limit the site set. On a Kasada site the 429 comes on the first request, with an almost empty page and a script, and has nothing to do with how fast you ask. A browser that runs the script gets the page.

I am a visitor, not a scraper. Why do I see a block page?

Because these systems judge requests, and ordinary browsing can look unusual: a VPN or a shared address, a script blocker, cookies turned off, many tabs opened at once. Turn those off for the site and reload. If the page stays, send the site's support the reference or the ID that the page prints.

What does the Web Unlocker return when a page is blocked?

The same JSON as for a page that came back, with blocked: true, the block page in body, the system it recognised in vendor and the kind of stop in blockClass, such as js_challenge, captcha, access_denied or rate_limited. Your code reads those fields instead of guessing from the status or the text.