Skip to content

JS Rendering & Bypass

Most of the web is JavaScript. Runo handles that for you, escalating from a plain fetch to a stealth headless browser only when needed.

The Three Modes

Set via options.render_js on /extract, /batch, and /crawl:

ModeWhat happensWhen to use
"auto" (default)Plain HTTP fetch first; auto-escalate to headless on signs of trouble.The right default for almost everything.
"always"Skip the fetch entirely; render in a stealth headless browser.Known SPAs where the fetch will always fail. Slower.
"never"Plain fetch only. Fail fast on JS-gated pages.Strict cost ceiling, content known to be in the initial HTML.

The response body tells you which path served the request via render_mode:

render_modeMeaning
"fetch"Plain HTTP fetch was enough.
"headless"Escalated to a stealth headless browser.
"structured"All fields filled from page metadata.
"cache"Result served from cache (content-type-aware TTL).

What Triggers Escalation

Under "auto", Runo escalates from fetch → headless when any of these fire:

  • A known anti-bot block signature is detected.
  • The body is shorter than ~500 characters.
  • Visible text is sparse despite a large HTML payload (likely a JS shell).
  • JS-framework markers are present.
  • The HTTP response is 402, 403, 406, 429, or 503.
  • Your schema asks for numbers but the page has almost no digits (weather/dashboard widgets).

Escalations are transparent. The response shape is identical, only render_mode changes.

The Bypass Ladder

Some sites push back harder than a vanilla headless browser can handle. Runo has a tiered ladder:

TierMechanismDefeatsAvailable
T0Plain HTTP fetchStatic HTMLAll plans
T1TLS-impersonation clientCloudflare passive TLS, AkamaiAll plans
T2Hardened headless browser + fingerprint bundleCDP detection, PerimeterX, DatadomeAll plans
T3Per-host cookie persistenceProgressive-trust wallsAll plans
T4CAPTCHA solverInteractive challengesPro / Scale only
T5Residential proxy rotationIP reputation, geofencesPro / Scale only
T6Archive fallbackLast resortAll plans

Per-host memory means once Runo learns a site needs T2 or T3, future calls skip the lower tiers which saves ~8 s of latency.

TIER_REQUIRED

Free and Starter plans don't include T4 (CAPTCHA solver) or T5 (residential proxies). When a host is known to require those tiers, calls on those plans return:

json
{
  "status": "error",
  "error": {
    "code": "TIER_REQUIRED",
    "message": "This URL requires Pro or Scale tier (CAPTCHA / residential proxy bypass).",
    "retryable": false
  }
}

HTTP 402. Upgrade or pick a different source.

Cost vs. Latency

PathTypical Added Latency
Plain Fetch-
Headless~3–8 s
T4 (CAPTCHA Solver)~5–20 s
T5 (Residential Proxy)~1–3 s

You don't pay direct fees for T4/T5, they're included in Pro/Scale. Daily kill-switches protect against abuse spikes; if those fire, calls fall back to T6 and the response carries X-Runo-Paid-Tier-Throttled: true.

Released under the terms of Runo’s Terms of Use.