mode=auto and get the page a real visitor sees, not the challenge screen. Reach for this recipe whenever a plain request returns a block page, a CAPTCHA or a REQS002 error.
Uses: Fetch with Adaptive Stealth Mode (mode=auto), js_render and premium_proxy
Ask your AI agent
With the Zenrows MCP server connected to Claude, Cursor or any MCP client, paste this prompt. Your agent picks the right Zenrows tools and settings on its own.Let Adaptive Stealth Mode pick the configuration
Setmode=auto. Zenrows starts with the cheapest configuration, adds JavaScript rendering and premium proxies only when the page needs them, and bills only the configuration that returns the page.
page.html. The CLI uses mode=auto by default and prints the billed credits after every request.
Example output
--json result carries the same numbers:
Read which configuration was billed
Every Fetch response carries the charge in its headers, so you can log it next to each URL:
With
mode=auto, the billed credits tell you which configuration succeeded: 1 for a basic request, 5 with JavaScript rendering, 10 with premium proxies, 25 with both. A domain that always bills 25 is a good candidate for the fixed configuration below. Requests that don’t succeed aren’t charged.
Fix the configuration with js_render and premium_proxy
When you already know a domain needs the full stack, setjs_render=true and premium_proxy=true yourself. Every request then goes straight to that configuration. Send these parameters instead of mode=auto, never together with it.
https://www.scrapingcourse.com/cloudflare-challenge and check for You bypassed the Cloudflare challenge.
Customize it
Troubleshooting
400with codeREQS002: the domain needs JavaScript rendering, premium proxies or both. Sendmode=auto, or addjs_render=trueandpremium_proxy=true. See REQS002.400with codeREQS004mentioningmode:js_renderorpremium_proxywas sent together withmode=auto. Keep one approach per request.422with codeRESP001: the page did not come back on that attempt. Retry with backoff and, on a fixed configuration, switch tomode=auto. See Retry failed requests.499or a client-side timeout: your HTTP client gave up first. Set its timeout to 180 seconds or more.- The page loads but a section is empty: the content arrives after the first render. Add
wait_forwith a selector of that section.
Related recipes
Scrape JavaScript-rendered pages
Render the page and wait for the exact element you need.
Retry failed requests
Back off, retry and escalate to mode=auto on 422.
Get content as seen from any country
Route the request through a residential IP in any country.
Track usage and control spend
Pick the cheapest configuration that works for each domain.