Compare

Spider costs less per page than UpRock. When is a backup still worth it?

Keep Spider as your primary, because by its own published averages a page costs a fraction of a cent, well under UpRock's $0.50 per 1,000. Add UpRock only for the pages Spider comes back without, meaning a status outside 2xx, no content or a timeout, so they get a second try from a different network, on an opted-in device in the country you pick.

Updated · Read as markdown

What Spider does well

Spider is a fast, inexpensive crawling API built on an open-source Rust crawler (spider-rs/spider, MIT). It crawls whole sites, streams each page back as it finishes, returns markdown or other formats, and also does search, screenshots, link discovery and HTML-to-markdown transforms. It has SDKs for Python, JavaScript, Rust and Go, integrations with LangChain, LlamaIndex, CrewAI and others, proxies in 199 countries, and a hosted MCP server with 21 tools. Its pay-as-you-go rate limit is 10,000 requests a minute.

And it's cheap. Spider bills two things per request: bandwidth ($1 per GB of content before conversion) and compute. JavaScript rendering isn't a multiplier; it just takes more compute. Spider's own pricing page puts 100 average pages at $0.002 to $0.01 over plain HTTP and $0.0035 to $0.0155 in a browser, which is $0.02 to $0.16 per 1,000 pages. That's less than UpRock.

So this page isn't about price. Keep Spider as your primary crawler.

How Spider reports a page it couldn't get

Spider returns a JSON array for every request, even a single-page /scrape, with one object per page: url, content, status, error and costs. The HTTP status of the API call says whether Spider took your request, not whether the site gave you the page.

We called Spider's API on 21 Oct 2026 with a few test pages and noted what came back:

Test pageWhat Spider returnedWhat to make of it
example.comHTTP 200; status 200, content presentFine
A URL that always answers 403 (no body)HTTP 200; status 403, empty content, error: nullFailed, though error says nothing. Send to UpRock
A URL that always answers 403 (short JSON body)Three times: HTTP 200, status 403, the body as content. Twice: accepted as a normal page, with the body in a code blockA status check alone missed it twice in five tries
A Wikipedia article in plain http modeHTTP 200; status 526 after 40 seconds, no content, error "address unreachable" (the same article came back fine in browser mode)Failed. Send to UpRock
A page that loadedHTTP 200; status 200 with content, and a non-null error ("address unreachable")Fine, despite the error text

Two lessons from this. Decide on status and content, never on error. And if you know what a good page looks like (a title, a price, a minimum length), check for it, because a refused page can occasionally look like a success.

The API call itself can fail too: 401 for a bad key, 402 when you're out of credits, 429 when you're rate limited (Spider asks you to honor Retry-After), and 500 or 503 on Spider's side, which its docs say don't use credits.

Spider and UpRock side by side

Spider's numbers come from its pricing page and docs, checked 21 Oct 2026.

SpiderUpRock
Price per 1,000 pages$0.02 to $0.16 by Spider's averages (bandwidth $1 per GB plus compute); more with residential proxies or zero data retention$0.50 by card or USDC, $0.40 with UPT
Minimum top-up$5, credits don't expirePrepaid credits
Failed pages"$0" per the pricing page; a page-level 403 "consumes credits" per the error-codes pageNot documented yet
Whole-site crawl, search, screenshots, streamingYesNo. One page per call
Where requests come fromResidential and ISP proxy pools, or your own server if self-hostedDevices whose owners opted in
Countries19963, or a region
Open sourcespider-rs/spider, MITNo. The device runtime (Fuel Engine) is
CacheOn by default, two-day freshnessA repeat request soon after can reuse the recent result
MCP serverHosted, 21 toolsYes, remote (streamable HTTP)
VideoNo (only recordings of its own browser sessions)Search public video by moment, $1 per 1,000 searches
Rate limits10,000 requests a minute pay-as-you-goNot published yet

Where Spider is better: price, speed, whole-site crawling, more countries and an open-source core. Where UpRock fits: a second, independent network for the pages Spider returns without content, and video.

The fallback, in TypeScript and Python

Every version call Spider's /scrape endpoint for markdown in its default smart mode, accept the page only when status is 2xx and there's content, treat 404 and 410 as the site's answer, and send everything else to UpRock. They call Spider's HTTP API directly rather than its SDKs, which wrap /scrape in a crawl call. UpRock gets one POST /v1/crawl request with your key in an Authorization: Bearer header; the MCP and CLI tabs do the same through UpRock's MCP server (TypeScript) or CLI (Python).

// Node 18+   env: SPIDER_API_KEY, UPROCK_API_KEY​type SpiderPage = {  url: string;  content: string;  status: number;  error: string | null;};​async function viaSpider(url: string): Promise<SpiderPage> {  const key = process.env.SPIDER_API_KEY;  const res = await fetch("https://api.spider.cloud/scrape", {    method: "POST",    headers: {      "Content-Type": "application/json",      ...(key ? { Authorization: `Bearer ${key}` } : {}),    },    body: JSON.stringify({ url, return_format: "markdown", request: "smart" }),  });  // 401 bad key, 402 out of credits, 429 rate limited, 5xx Spider's side (not billed).  if (!res.ok)    throw new Error(`Spider ${res.status}: ${(await res.text()).slice(0, 200)}`);  const [page] = (await res.json()) as SpiderPage[]; // always an array, even from /scrape  return page;}​async function viaUpRock(url: string, country: string) {  // One call: UpRock loads the page on a real device in that country, tries a fresh device  // every 7 s (up to 3 tries) and returns markdown. Failed calls aren't billed.  const res = await fetch("https://edge.uprock.com/v1/crawl", {    method: "POST",    headers: {      Authorization: `Bearer ${process.env.UPROCK_API_KEY}`,      "Content-Type": "application/json",    },    body: JSON.stringify({ url, country }),    signal: AbortSignal.timeout(90_000),  });  const page = await res.json();  if (!res.ok) throw new Error(`UpRock ${res.status} ${page.code}: ${page.error}`);  return page.markdown ?? "";}​export async function read(url: string, country = "US") {  try {    const page = await viaSpider(url);    // Spider reports the site's answer per page. A 403 arrives inside an HTTP 200 with    // status 403, empty content and error: null, so judge by status and content, not error.    if (page.status >= 200 && page.status < 300 && page.content) {      return { via: "spider", markdown: page.content };    }    if (page.status === 404 || page.status === 410)      throw new Error(`The page is gone (${page.status})`);    console.warn(      `Spider got status ${page.status} with ${page.content.length} chars; trying UpRock`,    );  } catch (err) {    if ((err as Error).message.startsWith("The page is gone")) throw err;    console.warn(`${(err as Error).message}; trying UpRock`);  }  return { via: "uprock", markdown: await viaUpRock(url, country) };}​// node read.ts https://developer.mozilla.org/en-US/docs/Web/HTTP DEconst [url = "https://developer.mozilla.org/en-US/docs/Web/HTTP", country = "US"] =  process.argv.slice(2);const page = await read(url, country);console.log(page.via, page.markdown.slice(0, 200));

Tested 21 Oct 2026 on Spider's keyless tier (the code sends your key when SPIDER_API_KEY is set). Spider returned example.com itself, and the 403 test URL went to UpRock whenever Spider reported its real status, which it didn't twice, as the table above shows. On 6 Nov 2026 we ran the HTTP and MCP versions again with an UpRock API key in an Authorization header, with an invalid Spider key: the 403 test URL went to UpRock.

FAQ

Is UpRock cheaper than Spider?

No. Spider bills bandwidth ($1 per GB) plus compute, and its own averages put a page well under a cent; UpRock is $0.50 per 1,000 pages. Use Spider for the bulk of your pages and UpRock for the ones Spider can't return.

How do I know Spider failed on a page?

Look at each page's status and content, not the error field. In our tests a page the site refused came back inside an HTTP 200, with status 403 and error set to null, and a page Spider couldn't reach in plain HTTP mode came back as status 526 after 40 seconds. Also note that the same refused test page twice came back looking like a success, so a status check can't catch every case.

Does Spider charge for failed pages?

Its pricing page says failed requests cost $0, and server-side errors don't use credits. Its error-codes page says a page-level 403 does consume credits, and the responses we got for refused pages carried a non-zero cost field. Check your own balance if it matters.

Which covers more countries?

Spider, which lists proxies in 199 countries. UpRock covers 63, or a region such as EU or APAC.

Can I self-host Spider instead?

Yes. The crawler is open source under MIT (spider-rs/spider), written in Rust. Self-hosted, it fetches from your own server's IP address unless you add proxies, which is another case for a second network.

Other use cases to explore

References

  1. Spider, Pricing, checked 21 Oct 2026
  2. Spider, llms.txt (credits, billing notes), checked 21 Oct 2026
  3. Spider docs, API reference, checked 21 Oct 2026
  4. Spider docs, Rate limits, checked 21 Oct 2026
  5. Spider, Proxy locations, checked 21 Oct 2026
  6. Spider, MCP server, checked 21 Oct 2026
  7. spider-rs/spider on GitHub (MIT), checked 21 Oct 2026
  8. UpRock, everything in one file (API, CLI, MCP, pricing), checked 21 Oct 2026

Get started

Add UpRock in one paste.

Paste this into Claude Code, Codex, Cursor or any agent with a terminal. It reads our docs, sets up the MCP server or CLI, and tells you the cost before it spends anything.

Set up UpRock for me: read https://uprock.ai/agents.md, connect the UpRock MCP server, and run one test crawl. Tell me what it costs before you spend anything.

Spider costs less per page than UpRock. When is a backup still worth it? | UpRock AI