Exa vs Tavily vs Firecrawl for AI Agents: Which Web API — and When to Chain Them (2026)

Exa finds pages by meaning, Tavily packs search and extract for agents, and Firecrawl scrapes known sites. Pick one, or chain them, on one SandBase key.

Exa vs Tavily vs Firecrawl for AI agents: which web API and when to chain them

Firecrawl vs Exa vs Tavily starts from the job. Exa discovers pages by meaning, then offers contents or a cited answer. On this catalog, Tavily is search, extract, and map. Firecrawl scrapes, crawls, maps, and batches, and it also searches. Chain them when the agent must find pages and then read a site the snippets do not cover. One SandBase key reaches all three. Dated numbers stay on the monthly test. SerpAPI and Google Custom Search stay on the five-tool comparison, updated 6 November 2026. This page reruns neither, and it names no universal best.

Key takeaway

  • Match the starting input. A question with no URL is discovery. A URL or a docs domain is ingestion. Search is not scrape.
  • One vendor is enough when that vendor’s next call already returns the page text you will hand the model.
  • Chain only when discovery and deep ingestion are two different jobs. A second logo is not a strategy.
  • On 2026-11-08, eligible data APIs shared 100 free calls per organization per UTC day. Several of these endpoints sit outside that allowance and bill from the first successful call.
  • No call was sent for this page. No latency, no rank, and no search volume.

They do not do the same job

“Web access” is not one SKU. Search returns candidates. Scrape and crawl return the page. A snippet that looks finished in a demo is how an agent cites a title and misses the paragraph underneath.

Starting inputPrimary jobDefault on this catalog
A question, no URL yetFind pagesExa Search, or Tavily Search
A cited answer you will still checkGrounded answer, separate from searchExa Answer
A known URL, ordinary page textExtract or scrape that URLTavily Extract, or Firecrawl Scrape
A known site, many pages, or a batch of URLsMap, crawl, or batch scrapeFirecrawl Map, Crawl, or Batch Scrape. Tavily Map discovers URLs and does not return full pages
The search engine’s own result pageClassic SERPNot these three. Use the five-tool guide

Crawlfolio checked vendor list prices on 31 October 2026 and skipped a quality rank: Tavily and Exa find pages, Firecrawl reads pages you name. That page’s credit math is not SandBase billing. Prices below are SandBase cards.

Exa: semantic discovery, plus contents and answer

Exa’s search reference, read on 2026-11-08, says search can also extract contents from the results. On SandBase that is three POSTs. The Exa catalog lists search, contents, and answer, and it tells you to verify Answer’s sources before you trust the generated response.

Exa catalog endpoints SandBase Exa catalog — Search, Contents, and Answer endpoints on one key for semantic discovery.

POST /v1/api/exa/search takes a natural-language query, with optional highlights, summaries, or full text. The Exa Search card sample body uses query, type, numResults, and contents.highlights, and it reads the result from outputs[0].data. This page did not send it. Filters on Search do not carry into Answer. POST /v1/api/exa/contents is the separate URL-list call. POST /v1/api/exa/answer is a cited answer. It does not excuse skipping the pages it cites.

Tavily’s comparison calls Exa capable for semantic or specialized discovery, then names Tavily the strongest overall choice in that set. That ranking is Tavily’s. It is not a result from this page.

Tavily: the research toolkit the catalog actually lists

That same post says Tavily’s own platform combines Search, Extract, Crawl, Map, and Research. The SandBase Tavily page on 2026-11-08 lists three endpoints. Crawl and Research are not on it. A SandBase key does not include a Tavily product the catalog does not show.

Tavily catalog endpoints SandBase Tavily catalog — Search, Extract, and Map as an agent research toolkit on the same balance.

POST /v1/api/tavily/search returns ranked results, with depth, topic, and domain controls, plus an optional generated answer. POST /v1/api/tavily/extract is text from URLs you already hold. The page says the calls stay separate: no automatic result picking, and no RAG pipeline. POST /v1/api/tavily/map discovers URLs and, on the card, does not extract full pages. A rendered site, a crawl, or a batch is a different tool.

Firecrawl: scrape and crawl, with search as one of five

Firecrawl’s introduction calls it a context API that searches, scrapes, and returns Markdown or structured data. The SandBase Firecrawl page lists scrape, crawl, map, batch scrape, and search. Search finds candidates. Crawl is a separate multi-page task. The known-URL Markdown walkthrough stays on the selection guide.

Firecrawl catalog endpoints SandBase Firecrawl catalog — Search, Scrape, Map, Crawl, and Batch Scrape for known-page and site ingestion.

Scrape is one page, and the card describes JavaScript rendering. Map returns URLs. Crawl and batch scrape are asynchronous. Paths are in the table below. Tavily’s comparison says to pick Firecrawl when you ingest or monitor a specific site. Search is on the catalog. It is not the reason to open Firecrawl if you already have the URL.

Pick one vendor, or chain on purpose

A chain is two jobs. It is not three logos on a slide.

One provider is enough when

  • Exa, when there is no URL yet and highlights, inline text, or Contents is the text you will keep. Not a docs-site crawl.
  • Tavily, when Search plus Extract covers the URLs, or Map is only a URL list.
  • Firecrawl, when the URL or domain is already known. Search first is a detour.
  • Any one vendor, when you want a single schema. Measured versions of Exa search plus contents, Tavily search plus extract, and Firecrawl search plus scrape are on the research-agent benchmark. The accuracy table stays there.

Chain when the second job is real

  • Finding URLs and reading the site are different steps. Exa or Tavily shortlists. Firecrawl scrape or crawl takes the rendered page, the site, or the batch.
  • Highlights are not the document. Stop at search, and the model writes the missing section.
  • The question fits Exa, and the docs domain it finds fits Firecrawl. Exa Contents is enough for an ordinary page. It is not a site crawl.
  • Do not buy the same page twice. Search that already returned the text, plus a scrape of that URL, is one call too many.

Four recipes, with no invented latency

Orders of calls only. Nothing here was executed, and there is no timing.

  1. POST /v1/api/exa/search, keep the URLs you will read, then POST /v1/api/firecrawl/scrape. If the shortlist is a docs site, use POST /v1/api/firecrawl/crawl instead. Crawl is async, and the card prices it per page.
  2. POST /v1/api/tavily/search, then POST /v1/api/tavily/extract on the URLs you keep. Same vendor. The calls stay separate.
  3. POST /v1/api/exa/search with highlights, then POST /v1/api/exa/contents for full text. Contents is outside the daily free allowance.
  4. POST /v1/api/firecrawl/search, then POST /v1/api/firecrawl/scrape. Search is outside the free allowance. Scrape is inside it. One vendor can still bill from the first call.

An assistant that also calls X or YouTube is the personal-agent walkthrough. The loop and the brief belong there, and in a later research-brief tutorial. Not here.

What the SandBase catalog showed on 2026-11-08

The homepage says “One API Key. Build and run AI agents,” plus free agents and sandboxes, and 100 free calls daily on eligible data APIs. “2,000+ models and APIs across 100+ platforms” is the site’s wording, not a count this page made. No call was sent.

The API index files Exa and Tavily under search, and Firecrawl under web scraping. Vendor lists show paths. Endpoint cards show prices. The three lists loaded that day printed no dollar amount. The cards did.

Endpoint map

CallJob, from the card’s description
POST /v1/api/exa/searchNeural search. Optional highlights, summaries, or full text.
POST /v1/api/exa/contentsPage contents for a list of URLs.
POST /v1/api/exa/answerCited answer. Verify the sources.
POST /v1/api/tavily/searchAgent-oriented search. Optional generated answer.
POST /v1/api/tavily/extractText from URLs you pass in.
POST /v1/api/tavily/mapSite URL discovery, not full-page text.
POST /v1/api/firecrawl/searchQuery in. Titles, descriptions, and URLs out.
POST /v1/api/firecrawl/scrapeOne page. The card describes JavaScript rendering.
POST /v1/api/firecrawl/mapURLs across a site.
POST /v1/api/firecrawl/crawlAsync site crawl. Poll for markdown.
POST /v1/api/firecrawl/batch/scrapeAsync batch of URLs.

The Exa Search card reads the payload from outputs[0].data. Open the schema before assuming a field. No response is copied here.

Inspect the price before you loop

Pricing puts models, APIs, and runtimes on one balance: pay per call, no subscription, every charge in Activities. Every plan includes up to 35% off selected models (the card price is the price), 100 free calls a day shared by eligible data APIs and reset at 00:00 UTC, Discovery at $0, sandboxes at $0 for now, and failed calls at $0. Start is $0. Build is metered (“Pay per call. No subscription.”). Scale is custom. Fair-use caps apply to the sandbox line, and a price change is announced first.

Eligible cards showed “First 100 calls per day free (shared per organization),” shared across eligible SandBase APIs, then the card price. Cards without that badge bill from the first successful call. A failed call is not charged on either kind of card.

Endpoint cardVisible price on 2026-11-08Inside the shared 100
Exa Search$0.0105 per callYes
Exa Contents$0.0045 per callNo
Exa Answer$0.0075 per callYes
Tavily Search$0.012 per callYes
Tavily Extract$0.012 per callYes
Tavily Map$0.012 per callNo
Firecrawl Search$0.015 per callNo
Firecrawl Scrape$0.0075 per callYes
Firecrawl Map$0.0075 per callYes
Firecrawl CrawlFrom $0.0075 per callNo
Firecrawl Batch ScrapeFrom $0.0075 per callNo

Crawl and batch are not a flat $0.0075. The visible label is “From $0.0075 per call.” The same day’s catalog payload set crawl’s price_formula to Math.max(1.0, Math.max((output.completed ?? 0) * 1.0, len(output.data ?? []) * 1.0)) * 0.0075, and batch scrape’s to Math.max(1.0, len(params.urls ?? []) * 1.0) * 0.0075. The crawl card says one sample bills at about $0.0075. More pages cost more. Read the card before a site loop.

exa/contents and firecrawl/search are still outside the daily free calls, as an earlier research-agent post said. So are Tavily Map, Firecrawl Crawl, and Firecrawl Batch Scrape. Two eligible calls in one chain draw two calls from the same 100, not a fresh 100 each. Model tokens are outside it. The meters share a balance on per-call pricing.

One key, next to models and a sandbox

The catalog does not crown a winner. One key, a schema and a price you can read first, and the same balance as model calls. The sandbox does not bill create, run, or stop for now. Fair-use caps may apply. Models and APIs bill. A model-only gateway does not choose this layer: see when a gateway is not enough. The account that holds the key, the data APIs, and the sandbox is the one-key stack.

Open-web scrape is not a social platform

Douyin, Xiaohongshu, Weibo, TikTok, and X are not a Firecrawl URL. Social data APIs is the split between platform APIs, scraping, and official OAuth. Exa, Tavily, and Firecrawl stay on the open web.

When a classic SERP tool is still the layer

SerpAPI and Google Custom Search still fit the engine’s own result page. They are a weak default for semantic discovery or a docs-site markdown crawl. That matrix, including the URL-to-Markdown section left alone here, is the five-tool comparison. Brave stays in the monthly test.

Which SandBase page to open

You needOpen
SerpAPI, Google Custom Search, and the known-URL Markdown walkthroughFive-tool comparison, 30 July 2026, updated 6 November 2026
Dated accuracy, latency, and costNovember 2026 monthly test. On 2026-11-08, best-ai-search-apis-agent-workflows-2026 returned 301 to that URL
Measured search-plus-fetch setupsResearch-agent benchmark
A worked assistant that also calls X and YouTubePersonal research assistant
Models, data APIs, and a sandbox on one keyOne-key agent stack
Where the shared 100 sits in a budgetPer-call pricing
A model gateway that still does not fetch the webBeyond OpenRouter
Platform social data, not an open-web scrapeSocial data APIs

This page is the job, the chain, and the catalog.

FAQ

For AI agents, should I use Exa, Tavily, or Firecrawl?

Match the job. Exa for a fuzzy question: semantic discovery, optional highlights or full text, a contents call, or a cited answer you still check. Tavily for search, extract, and map. Firecrawl when the URL or site is known and you need scrape, crawl, map, or batch. None of the three is a best web search API for AI agents without that qualifier.

When should an agent chain Exa or Tavily with Firecrawl?

When discovery and deep ingestion are two steps. Search with Exa or Tavily, then scrape or crawl with Firecrawl for a fuller page, rendered content, a site, or a batch the search payload skipped. Ordinary pages stay on one vendor: Exa search then contents, Tavily search then extract, or Firecrawl search then scrape. Add a second provider only for a real second job.

How does SandBase change the Exa vs Tavily vs Firecrawl decision?

It does not pick the winner. On 2026-11-08 one key and one balance reached all three catalogs. Read the schema and the price before you call. Eligible data APIs share 100 free calls per organization per UTC day. The table names who sits outside it, including Exa Contents and Firecrawl Search. Model calls bill separately. Re-open the cards later. Test numbers live on the monthly page and the research-agent benchmark. SerpAPI and Google Custom Search live on the five-tool guide.

What to do after you pick

Create a key from the SandBase login. Open the Exa, Tavily, and Firecrawl catalog pages, then the specific endpoint card. Read the price and whether the free-call badge is on that card. Run one search path and one scrape or extract path. In Activities, look for two lines, not one blended charge. If the second call did not change what the model could cite, delete it from the chain. The price table was read from those cards on 2026-11-08.