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

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 lookWhat a Kasada block shows
Status code429 on the first request of a new visitor, even at one request a day. It is not a rate limit.
BodyAn almost empty HTML page: a script tag and nothing to read. No message, no captcha.
Script pathA file named ips.js under two long random folder names, on the site's own domain.
Request headersAfter the script ran, the browser adds x-kpsdk-ct and x-kpsdk-cd to its API calls. Without them those calls get 429.
CookiesA 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 seesA blank page for a moment, then the site. Nothing to click.
A Kasada block and the page behind it: first the 429 answer with an empty page that holds one script named ips.js, then that page replaced by the real page answering 200 after one Web Unlocker call, last the JSON answer with status 200, blocked false, the tier that served it, attempts and cost.
What Kasada answers to a script, and what one Web Unlocker call returns instead.

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-kpsdk headers 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

FieldWhat it says
blockedfalse when the real page came back. true only when every attempt met the block; the block page is then in body.
vendorThe system the engine recognised on a blocked attempt. For this guide: kasada.
blockClassUsually fingerprint for the 429 that a client without JavaScript receives.
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.
costThe 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 rightWith your own scraperWith the Web Unlocker
The IP addressYou rent residential or mobile IPs and rotate them yourself.Residential (Premium) or mobile exits, chosen by country, state and city.
The browser identityHandshake, 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 checkYou 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 passYou 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 failsYou 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: 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.

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.