Web Unlocker · Kasada
How to bypass Kasada and its empty 429 page
Kasada answers a scraper with a 429 and a page that holds nothing but a script. A browser runs the script and the page reloads; an HTTP client stays on the 429. The Web Unlocker opens a real browser on a residential or mobile IP, waits for the reload and returns the page in one JSON answer.
- 6 of 6
- calls to Kasada-protected pages answered with the real page, canary of 11 November 2026
- 88.9%
- across all 27 protected targets of the same run
- 4.1 s
- median response across the run
What a Kasada block looks like
Kasada shows no message and no captcha. The block is a status code that seems to mean something else, and a page with nothing on it.
| Where to look | What a Kasada block shows |
|---|---|
| Status code | 429 on the first request of a new visitor, even at one request a day. It is not a rate limit. |
| Body | An almost empty HTML page: a script tag and nothing to read. No message, no captcha. |
| Script path | A file named ips.js under two long random folder names, on the site's own domain. |
| Request headers | After the script ran, the browser adds x-kpsdk-ct and x-kpsdk-cd to its API calls. Without them those calls get 429. |
| Cookies | A pair of session cookies: KP_UIDz and KP_UIDz-ssn, or a name chosen by the site and the same name ending in -ssn. |
| What a person sees | A blank page for a moment, then the site. Nothing to click. |
Why Kasada blocks a scraper
Kasada does not ask a visitor to prove anything by hand. It makes every new visitor prove it is a real browser before the site answers at all.
- The first answer is always the script. It runs inside the browser, checks that the environment is a genuine one and does a small piece of computing work.
- The result goes back as a token. Only then does the page reload with the real content.
- Every API call after that has to carry fresh
x-kpsdkheaders produced by the same script. - The script changes often, so an answer written by hand stops working without notice.
- For a scraper this means the first request to a Kasada site needs a real browser. There is no cheaper path.
Get the page behind Kasada with one call
Send the URL to the REST endpoint. On a Kasada site the engine opens a real browser on a residential IP, lets the script run, waits for the page to reload and returns the page that arrived after the reload, with the status of that page.
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"}'
Leave mode on auto. With mode: "tls" no browser is opened, and on a Kasada site the first call then comes back blocked. For many pages of one site, keep calling from the same account so that the session is reused.
What the answer tells you
| Field | What it says |
|---|---|
blocked | false when the real page came back. true only when every attempt met the block; the block page is then in body. |
vendor | The system the engine recognised on a blocked attempt. For this guide: kasada. |
blockClass | Usually fingerprint for the 429 that a client without JavaScript receives. |
tier_served | tls for a browser-grade request, browser when a real browser had to open the page. |
attempts, latency_ms | How many tries the call took and how long it lasted. |
cost | The bytes this call moved and what it was charged. |
Measured, with a date
In the canary of 11 November 2026, all 6 calls to Kasada-protected pages came back with the real page. Across the whole run, 72 of 81 calls on 27 protected targets did, with a median response of 4.1 s.
The first request to a protected site waits for the site's own check. The next ones from the same account reuse the session: in our test of 11 November 2026, four requests in a row to the same Kasada-protected page took 11.9 s, 1.9 s, 1.9 s and 1.8 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.
Your own scraper or the Web Unlocker
Getting past Kasada once is an afternoon. Staying past it every week is the work. This is what has to stay right, and who keeps it right.
| What has to be right | With your own scraper | With the Web Unlocker |
|---|---|---|
| The IP address | You rent residential or mobile IPs and rotate them yourself. | Residential (Premium) or mobile exits, chosen by country, state and city. |
| The browser identity | Handshake, HTTP/2 settings and headers must describe one browser, and be updated with every browser release. | A browser-grade request on the first attempt, kept current for you. |
| The JavaScript check | You run real browsers for the pages that need one, and keep them from looking automated. | A real browser opens the page only when the site asks for one. |
| After a pass | You keep the session cookies and produce fresh x-kpsdk headers for every API call. | The session is reused for your next calls to that site. |
| When a call still fails | You recognise the Kasada block page yourself and decide what to retry. | Retries on a fresh exit. The answer says blocked, blockClass and vendor. |
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: trueandblockClass: "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.
Kasada and scraping: questions people ask
Why does Kasada return 429 on my very first request?
Because the 429 is not a rate limit there. Kasada answers every new visitor with a 429 and a script; a browser runs it, proves itself and is sent back to the page. A client that cannot run JavaScript keeps receiving the same 429, however slowly it asks.
Can I bypass Kasada with requests, cURL or a headless browser?
Not with an HTTP client: the script has to run. A headless browser runs it, but the script looks for the marks that automation leaves in a browser and withholds the token when it finds them. The Web Unlocker opens a real browser on a residential or mobile IP for the first call and returns the page it gets.
What are the x-kpsdk-ct and x-kpsdk-cd headers?
They are the tokens that Kasada's script adds to the browser's API calls after it has run: one identifies the validated session, the other answers a small computing challenge for each request. The API of a protected site refuses calls without them. They are produced in the browser and do not survive being copied to another session.
Is the Kasada check paid on every call?
No. The first call waits for the script to run and the page to reload. After that, your calls to the same site reuse the session until the site asks again. In our test of 11 November 2026, four calls in a row to the same Kasada-protected page took 11.9, 1.9, 1.9 and 1.8 seconds.
Is it legal to scrape a site protected by Kasada?
The protection system does not decide that. What matters is the page and the data: whether the page is public, what the terms of the site say, and which law covers the data, personal data above all. The Web Unlocker fetches pages anyone can open without signing in; it does not log in and it does not create accounts.
Send the URL that Kasada blocks
Create the free account, open Web Unlocker in the dashboard and paste the URL into the test box. The answer shows the status, the tier that served the page, the attempts and the cost of the call.