ReferenceSee 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.
your request
TLS
fingerprint
fingerprint
JavaScript
challenge
challenge
IP
reputation
reputation
Headers &
behavior
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.
Cloudflare
js_render + premium_proxyDataDome
js_render + residential proxyAkamai
js_render + session_idPerimeterX
js_render + wait_forImperva
js_render + premium_proxyhCaptcha
js_render + wait_for=.solvedNot 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.