Compare

How do I add a backup for Tavily Extract?

Keep Tavily for search and answers, and send UpRock the pages Extract doesn't cover. The URLs that land in Extract's failed results, and any page you need as it appears in one country, go to UpRock, which loads each one on a real device in the country you pick for $0.50 per 1,000 pages.

Updated · Read as markdown

What Tavily does well

Tavily is a search API built for LLM agents. One call returns ranked results with clean content instead of raw HTML, and it can add an LLM-written answer (include_answer) and each page's full text (include_raw_content). You can narrow a search by topic (general, news, finance), by date range, and by up to 300 domains to include or 150 to exclude. Beyond search it has Extract, Crawl, Map and a Research endpoint that writes cited reports.

It's also the default search tool in a lot of agent stacks. LangChain calls Tavily its recommended search tool, the docs list integrations with around 40 frameworks and platforms, and there's an official remote MCP server. If your agent already searches with Tavily, keep it.

Two gaps a second tool covers

Extract's failed results

Tavily Extract takes up to 20 URLs per call. It doesn't throw when a page can't be read: the response is HTTP 200, the readable pages are in results, and the rest are in failedResults (failed_results in Python) with an error string. Tavily's own docs note that a 200 can have an empty results array when every URL failed.

Those failed URLs are the ones to send to UpRock. They're also free on Tavily's side, so the fallback only costs the UpRock fetch.

A page as it looks in one country

Tavily's country parameter boosts search results from the country you name (for general-topic searches; the list has 166 countries). It doesn't change where Extract reads a page from, and Extract has no country option of its own. For a page whose prices, stock or content change by country, that matters: you get one version, and the docs don't say from where.

UpRock's crawl_fetch takes the country per page (63 countries, or a region such as EU or APAC) and loads the page on a device there. On 19 Oct 2026 we checked that by fetching an IP lookup page with the country set to DE, JP and BR; it reported Berlin, Nagoya and Teresina.

Tavily and UpRock side by side

Tavily numbers come from its pricing and docs pages, checked 24 Oct 2026. Tavily bills in credits: $0.008 each pay-as-you-go, or $0.0075 on the Project plan ($30 for 4,000 credits a month).

TavilyUpRock
Page extraction, per 1,000 pages$1.60 pay-as-you-go, $1.50 on Project (5 basic extractions per credit). Failed URLs are free$0.50 by card or USDC, $0.40 with UPT
Search, per 1,000$8.00 pay-as-you-go, $7.50 on Project (basic search, 1 credit); advanced search costs doubleNot compared here. Use Tavily for search
Countrycountry boosts search results from one country (general topic only). Extract has no country optionPer page: 63 countries, or a region
Where pages are fetched fromNot stated in Tavily's docsReal desktop and mobile devices whose owners opted in
Answers, topic and domain filtersYesNo. Your model writes the answer
Framework integrationsLangChain's recommended search tool, about 40 integrationsMCP, CLI, a Claude Code plugin, an n8n node
MCP serverOfficial, remote, with OAuthYes, remote (streamable HTTP)
Rate limits100 requests a minute on development keys, 1,000 on production keysNot published yet
VideoNoSearch public video by moment, $1 per 1,000 searches
To try it1,000 credits a month at no cost, and a keyless modePrepaid credits

Where Tavily is better: search itself (ranked results ready for a model, generated answers, filters), framework support and a way to try it before paying. Where UpRock fits: the pages Extract couldn't read, a page as it looks in one country, and video.

Retry Tavily's failed extracts with UpRock

Every version runs Tavily Extract first, then send only the failed URLs to UpRock, all at once. 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).

// npm i @tavily/core   (Node 18+)   env: TAVILY_API_KEY, UPROCK_API_KEYimport { tavily } from "@tavily/core";​const tvly = tavily({ apiKey: process.env.TAVILY_API_KEY });​type Page = { url: string; content: string; via: "tavily" | "uprock" };​async function viaUpRock(url: string, country: string): Promise<Page> {  // 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 { url, content: page.markdown ?? "", via: "uprock" };}​// Tavily Extract first; its failedResults (free on Tavily's side) go to UpRock in parallel.// Extract has no country option, so a read that must come from one country skips Tavily.export async function extract(urls: string[], country?: string) {  const pages: Page[] = [];  let failed = urls;  if (!country) {    try {      const res = await tvly.extract(urls, { extractDepth: "basic" });      pages.push(        ...res.results.map((r) => ({          url: r.url,          content: r.rawContent,          via: "tavily" as const,        })),      );      failed = res.failedResults.map((f) => f.url);    } catch (err) {      console.warn(        `Tavily Extract failed (${(err as Error).message}); sending every URL to UpRock`,      );    }  }  const retries = await Promise.allSettled(    failed.map((url) => viaUpRock(url, country ?? "US")),  );  const stillFailed: { url: string; error: string }[] = [];  retries.forEach((r, i) =>    r.status === "fulfilled"      ? pages.push(r.value)      : stillFailed.push({ url: failed[i], error: String(r.reason) }),  );  return { pages, stillFailed };}​// node extract.ts DE https://developer.mozilla.org/en-US/docs/Web/HTTP https://example.org   (country "-" = any)const [country, ...urls] = process.argv.slice(2);const { pages, stillFailed } = await extract(  urls,  country === "-" ? undefined : country,);for (const p of pages) console.log(p.via.padEnd(6), p.url, p.content.length, "chars");for (const f of stillFailed) console.log("failed", f.url, f.error);

Tested 19 Oct 2026 against the live UpRock API: the TypeScript version with Tavily's keyless mode (Tavily read 2 of 4 URLs, and UpRock fetched the failed ones that exist), the Python version with an invalid Tavily key. On 6 Nov 2026 we ran the HTTP and MCP versions again with an UpRock API key in an Authorization header: with an invalid Tavily key, each fell back to UpRock and got the page.

FAQ

Does Tavily charge for an extract that fails?

No. Tavily's credits page says you never get charged if a URL extraction fails. Basic extraction costs 1 credit per 5 successful URLs, so a fallback only adds the UpRock page.

What does Tavily's country parameter do?

It boosts search results from the country you name, for general-topic searches. It doesn't change where Extract reads a page from, and Extract has no country option of its own, so a page that differs by country needs a fetch from that country.

Can UpRock replace Tavily?

For most agents, no. Tavily ranks results for LLMs, can write an answer for you, filters by topic, date and domain, and plugs into LangChain and dozens of other frameworks. UpRock is the second tool for pages and places Tavily doesn't cover.

Why does the TypeScript example use MCP instead of plain HTTP?

UpRock's MCP tool crawl_fetch retries on a fresh device every 7 seconds until one succeeds and returns markdown. The plain HTTP crawl API takes three calls and returns the page as HTML, so MCP (or the CLI, as in the Python example) is the shorter path today.

What does UpRock cost next to Tavily?

An UpRock page fetch costs $0.50 per 1,000 by card or USDC, $0.40 with UPT. Tavily's basic extraction works out to $1.60 per 1,000 pages pay-as-you-go and $1.50 on its $30 Project plan.

Other use cases to explore

References

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.

How do I add a backup for Tavily Extract? | UpRock AI