Web fetch for agents that only bills when the page is real.

One API that tries the cheapest route first and escalates: plain HTTP, then a headless browser. Every page is checked for blocks, CAPTCHAs, login walls and empty JavaScript shells. If a check fails we try the next route. Failed fetches cost nothing.

Get 500 free creditsRead the docs

One call

curl https://fetchrouter.dev/v1/fetch \
  -H "Authorization: Bearer $FR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://excalidraw.com/",
    "mode": "markdown",
    "expect": { "text": "Excalidraw" }
  }'
{
  "ok": true,
  "provider": "chromium",
  "billed": true,
  "costCredits": 5,
  "attempts": [
    { "provider": "direct",   "statusCode": 200,
      "verdict": { "passed": false, "reason": "empty_shell" } },
    { "provider": "chromium", "statusCode": 200,
      "verdict": { "passed": true } }
  ],
  "content": "# Excalidraw\n\n…"
}

A 200 status isn't proof the page loaded. The first attempt above returned 200 with an empty app shell. Most fetch tools would have billed it and handed your agent a blank page.

How it works

1 · Route

Cheapest route that works

Plain HTTP first. A headless browser when the page needs JavaScript. Premium unblocking providers only if you allow them.

2 · Verify

Check the page, not the status

Status, block pages (Cloudflare, DataDome, PerimeterX, Akamai, Imperva and more), real content length, and your own expect.text or CSS selector.

3 · Fall back

Next route, same call

Every attempt and its verdict come back in attempts, so your agent can see what happened.

4 · Bill on pass

You pay for pages

Credits are taken only when a page passes every check. Blocks, timeouts and empty shells are on us.

Pricing

Static
1 credit / page

Server-rendered HTML or markdown. $1 per 1,000 pages.

Browser
5 credits / page

Pages that need JavaScript. Used only when needed, or when you ask for mode: "rendered".

Unblock · soon
10+ credits / page

Premium providers for heavily protected sites, 10 or 25 credits. Off unless you set maxCost to 10 or more. Not live yet.

Failures
0 credits

If no route passes verification, you pay nothing. That includes blocks, CAPTCHAs, timeouts and empty pages.

1 credit = $0.001. Prepaid packs, no subscription, credits don't expire:

Paid packs open soon. Beta accounts get 500 free credits.

For agents: MCP

{
  "mcpServers": {
    "fetchrouter": {
      "command": "npx",
      "args": ["-y", "fetchrouter-mcp"],
      "env": { "FETCHROUTER_API_KEY": "fr_…" }
    }
  }
}

Works with Claude Code, Claude Desktop, Cursor and any MCP client. Two tools:

  • fetch_page: verified fetch, returns markdown or HTML plus the verdict.
  • domain_reliability: which route works for a site, from real outcomes.

Plain REST works too: see the docs. There's an llms.txt for agents reading this page.

Get a key

500 free credits, no card. That's up to 500 verified pages.

Your API key

Shown once. Store it as FR_KEY.