Zenrows
Talk to sales Start building free

See why you're
blocked. Walk through.

A 403 tells you nothing. Send the request through every wall, find the one that stopped it, and flip the flags that turn it into a 200.

GET protected.example/data 403 · blocked
your request
TLS
fingerprint
JavaScript
challenge
IP
reputation
Headers &
behavior
the page

Stopped at TLS fingerprint — the handshake from a plain client matches no real browser.

What's guarding it
Flip the flags
curl "https://api.zenrows.com/v1/?url=protected.example/data"

Whatever's guarding it,
we've read it before.

The run knows each major wall and the flags that walk through it. Teal is the move.

Cloudflarejs_render + premium_proxy
DataDomejs_render + residential proxy
Akamaijs_render + session_id
PerimeterXjs_render + wait_for
Impervajs_render + premium_proxy
hCaptchajs_render + wait_for=.solved

Not a guess.
A read.

The run doesn't just retry until something works. It returns exactly which wall stopped you and the flags that clear it, so the fix is the next request, not the next week.

{
  "url": "protected.example/data",
  "blocked_by": "tls_fingerprint",
  "signals": {
    "tls":           "fail · not a real browser",
    "js_challenge":  "fail · never executed",
    "ip_reputation": "flag · datacenter range",
    "behavior":      "ok"
  },
  "suggested": ["js_render", "premium_proxy"],
  "status_after_fix": 200
}

If a browser loads it,
so can you.

No browser farm, no proxy contracts. The diagnosis points at the walls; the flags walk you through. Same URL, real Chrome, clean residential IP.

Stop guessing
at the 403.

Run the request, read the wall that stopped it, flip the flags. The same scraper that failed comes back with a 200.

Start building free

10,000 credits/month for free, always.

Already on Playwright? Migrate it