403 - blocked on every route
We tried every bypass route we have for this domain, and every one of them was blocked. Recovery:-
Switch
proxy_country. This is the highest-yield fix. Many sites apply country-specific bot rules. - Wait a few minutes and retry. Rate-based blocks expire on their own.
- Lower request volume. If you’re hitting the same domain hard, the block is probably your traffic pattern, not the IP.
-
Contact support. If the same URL
403s consistently, the domain may need a custom plugin. The help center is the right place.
503 - no capacity on our side
We had no API capacity for the request right now: all capacity was busy past the queue limit, or none was available (No server is available to handle this request), or the render path was unavailable (Render unavailable.). This is a problem on our side, not the target’s - and it is not billed.
Recovery: wait and retry. Exponential backoff is appropriate:
500 (internal error) and 502 with an HTML body (our gateway lost the connection to the scraping backend) are the same class - ours, free, retry with backoff.
523 - the target is unreachable
The target site answered nobody over any of our exits: it is down, or it refuses connections in bursts. This is not a bot block, and it is not billed. A site that accepts the connection but is slow to answer is not a523 - we keep waiting for it within the call’s time cap.
Recovery: retry after a pause (tens of seconds to minutes). Rotating proxy_country rarely helps - the site itself is not answering.
Dead URLs - X-Origin-Status
If the target says the page does not exist, you get the target’s own 404 or 410 with its page as the body (it can be empty) and an X-Origin-Status header carrying that status. If its origin returns its own 5xx error page - or the target answers its own 401, 451 or an empty 500 - you get a 200 with that body and the same header. Either way we reached the site; the URL is dead. It is billed like any delivered page, and retrying will not change it - check the header and drop or fix the URL. A 404 without X-Origin-Status is ours (a wrong API path), not the target’s. A URL whose domain does not exist returns 400 Hostname cannot be resolved (also billed). See Errors.
504 - timeout
The request reached its time cap:Request timed out. on /getPageSource (60 s, 90 s with steps), or the SERP / plugin time budget on /serpApi and the dedicated plugin endpoints. Usually the target is slow for this URL.
Recovery:
- Retry. Transient network issues account for most
504s. - Pick a different
proxy_country. Some country pools are slower or under heavier rotation. - On
/serpApi, lowerpages_to_check. Each additional page extends the time needed.
504 with an HTML body comes from our gateway - that one is on our side. If 504s hit many different domains at once, treat it like a 503.
422 - validation error
You sent a bad parameter. The response body pinpoints the field:422 is not retryable - retrying the same bad request will fail the same way.
Retry policy that works
For most production workloads, this policy handles these error classes correctly:- Retries
408/500/502/503/504/523with exponential backoff (failed calls are free). - Tries one country rotation on
403. - Fails fast on
401,422, and other terminal errors.

