Skip to main content

When the scrape comes back 403, send it here.

POST the URL to /unblocker. Spider climbs an escalation ladder of geo proxies, real browser fingerprints, and challenge solving until the page returns. The unblock fee is 10 to 40 credits over base, charged only when it succeeds.

One URL, two requests
GET https://protected-site.com/pricing
your current scraper
403
challenge page
POST /unblocker { "url": "..." }
same URL, one line changed
200
markdown content

What happens after you hit send.

Four rungs, tried in order. Each one runs only when the response to the one before it was still a block. Escalation is also why the fee is a range and not a number.

A clean exit through a geo-targeted proxy

The request leaves from a residential or ISP address in the country you set with country_code, with coherent headers and TLS.

Escalates when

Escalates on a 403, a 429, or a block page where the content should be.

A real browser with a fingerprint that holds up

A full browser session whose WebGL, fonts, screen dimensions, and hardware profile agree with each other, running the site's JS detection the way a real machine would.

Escalates when

Escalates when a challenge or interstitial is served instead of the page.

Challenge solving

Detects and solves CAPTCHAs, puzzles, and interstitials, Cloudflare Turnstile included.

Escalates when

Escalates if the content still refuses to render after the challenge clears.

A different identity entirely

Retries with a fresh fingerprint, a different proxy path, and different timing patterns.

Stops when

The page renders and the content is extracted, or the attempt is spent.

If the page comes back base + 10 to 40 credits

The further down the ladder the request had to go, the higher in that range it lands.

If it does not no unblock fee

The fee is charged per success, never per attempt. A page that never comes back does not bill the premium.

Every rung is infrastructure you would otherwise run yourself: proxy pools, a browser fleet with fingerprints that hold up, challenge solvers, retry orchestration. Here the whole ladder is one POST.

Most requests do not need this.

The default is /scrape. Smart mode already clears common Cloudflare and CDN protection at base cost. Match the failure you are actually seeing before paying for the ladder.

200 OK, but the body is an empty shell /scrape

The page needs JS rendering, not an unblock. Smart mode does that at base cost.

429s once you pass a few requests per minute /scrape

Rate limiting. Set proxy_enabled and spread the traffic across exits.

403 on every request, challenge HTML in the body /unblocker

The site is fingerprinting clients and rejecting yours. This is the ladder's job.

A CAPTCHA or Turnstile where the content should be /unblocker

Needs a real browser session and challenge solving.

The request body is the same on every endpoint. Moving from /scrape to /unblocker is a one-word change to the path, so trying the cheap route first costs you nothing to undo.

Your first unblock.

Same parameters as crawl and scrape, same response shape, costs itemized per page. Expect it to take longer than a plain scrape when the ladder has to climb.

from spider import Spider

client = Spider()

# The URL your scraper cannot reach
result = client.unblocker(
    "https://protected-site.com/pricing",
    params={
        "return_format": "markdown",
        "proxy_enabled": True,
        "country_code": "us",
        "session": True,
    },
)

print(result[0]["content"])
Response
[
  {
    "url": "https://protected-site.com/pricing",
    "status": 200,
    "content": "# Pricing\n\n| Plan | Monthly | ...",
    "error": null,
    "costs": {
      "total_cost": 0.0010292944
      // itemized compute, file, and transfer costs per page
    }
  }
]

The dials you keep

session

Keep the browser session across requests. Once a site is unblocked, follow-up requests reuse that state instead of climbing the ladder again. This is what makes repeat pulls fast.

fingerprint

Start with the full browser fingerprint on the first attempt instead of waiting for escalation.

proxy_enabled

Route through residential or ISP proxies. Pair with country_code so requests exit from the right country.

return_format

Markdown for LLM pipelines, or raw HTML when you want the page untouched.

evaluate_on_new_document

Run your own JavaScript on the unblocked page. Expand content or trigger actions before extraction.

More from the API.

Send it the page that is beating you.

Escalation, challenge solving, and retries in one POST. 10 to 40 credits over base, charged only when the content comes back.