Unpacked: 3 Web Search APIs for Your AI Agents
Today on Unpacked: One theme, three tools, under 5 minutes. Tavily, Firecrawl, and Exa each solve a different web-search problem for AI agents.
Eversynced AI Weekly, Wednesday edition. One theme, three tools, under 5 minutes.
Your agent needs to search the web. Maybe it’s pulling docs for RAG, scraping a competitor’s pricing page, or finding recent news to answer a question. You could wire up a headless browser and parse HTML yourself. Or you could call an API that hands back clean text instead of raw HTML. Three services own this category right now: Tavily, Firecrawl, and Exa. All three have free tiers, Python/JS SDKs, and MCP server support. They overlap in places, but each one solves a different problem.
Tavily: Search + Research
Tavily is the closest thing to “Google for agents.” You send a query, it returns ranked results with clean text snippets. No HTML parsing required. Five endpoints cover most needs: Search, Extract (pull content from a URL), Crawl, Map (list all URLs on a site), and Deep Research (async multi-step research that produces a cited report).
pip install tavily-python
from tavily import TavilyClient
client = TavilyClient(api_key="tvly-...")
results = client.search("MCP server frameworks 2026", max_results=5)
for r in results["results"]:
print(r["title"], r["url"])
Deep Research is the reason to pick Tavily over rolling your own. You fire off a research task, Tavily searches multiple angles, reads sources, and returns a full report with citations. Takes 30-120 seconds. But it saves you from building the orchestration loop that coordinates search, fetch, summarize, and cite.
Free tier: 1,000 credits/month, no card required. You can even try it keyless (rate-limited, zero signup).
Links: Docs | Pricing | Python SDK | MCP server
Firecrawl: Scrape + Interact
Firecrawl started as a scraper and now covers six things: Search, Scrape, Crawl, Map, Interact (browser automation), and Monitor (change detection). Where Tavily returns search snippets, Firecrawl gives you full page content as clean markdown.
pip install firecrawl-py
from firecrawl import FirecrawlApp
app = FirecrawlApp(api_key="fc-...")
result = app.scrape_url("https://docs.anthropic.com/en/docs/agents")
print(result["markdown"][:500])
The Interact endpoint opens a browser session where you can click buttons, fill forms, and navigate multi-step flows using natural language prompts. If your agent needs to log into a dashboard, paginate through results, or submit a form, neither Tavily nor Exa can do that.
Free tier: 1,000 credits/month (1 credit per page scraped, 2 credits per 10 search results). Paid plans start at $16/mo for 5K credits. Also open source and self-hostable if you want unlimited.
Links: Docs | Pricing | Python SDK | MCP server
Exa: Semantic Search
Exa finds content by meaning, not keywords. Ask for “tools that help developers write better documentation” and it returns pages that match the concept even if none of your search terms appear on the page. Products include Search, Contents (full page text), Deep Search (multi-step reasoning), Agent (autonomous research), and Monitors (track new content on a topic).
pip install exa-py
from exa_py import Exa
exa = Exa(api_key="...")
results = exa.search(
"open source alternatives to Notion for engineering teams",
num_results=5,
text=True
)
for r in results.results:
print(r.title, r.url)
Exa also has specialized verticals for company search, people search, and news. So if you’re building a lead research agent or a competitive intel tool, those structured endpoints save you from writing the post-processing yourself.
Free tier: 20,000 requests/month. That’s 20x Tavily’s free allocation. Paid search starts at $7/1K requests. Deep Search runs $12-15/1K.
Links: Docs | Pricing | Python SDK | MCP server
Quick Comparison
| Tavily | Firecrawl | Exa | |
|---|---|---|---|
| Best for | Agent web search, research reports | Full-page scraping, browser automation | Semantic discovery, structured data |
| Search type | Keyword (optimized for LLMs) | Keyword + scrape | Semantic (embeddings) |
| Unique feature | Deep Research (cited reports) | Interact (browser control) | Meaning-based search, verticals |
| Free tier | 1,000 credits/mo | 1,000 credits/mo | 20,000 requests/mo |
| MCP server | Yes | Yes | Yes |
| Self-host | No | Yes (open source) | No |
Which One to Pick
Tavily is the default for agent web search. Good snippets, fast, and the Deep Research endpoint handles multi-source synthesis so you don’t have to build that orchestration yourself.
Firecrawl is for when you need full page content, JS-rendered pages, or anything behind a login. It’s the only one with browser automation.
Exa is for when keyword search fails. If you’re looking for a concept (“tools like X but for Y”) or you need structured company/people data, Exa’s embedding-based search finds things the other two miss.
All three have MCP servers, so you can plug them into Claude Code, Cursor, or any MCP-compatible agent. Starting with Tavily for general search and adding Firecrawl for scraping is a solid default. Add Exa when keywords aren’t cutting it.
Glossary
RAG (Retrieval-Augmented Generation): A pattern where an LLM pulls in external documents before generating a response, so it can answer with current or domain-specific information instead of relying on training data alone.
MCP (Model Context Protocol): An open standard that lets AI agents call external tools (search APIs, databases, code runners) through one interface. All three tools in this post ship MCP servers, so any compatible agent can use them without custom integration code.
Embeddings: Numerical representations of text that capture meaning. Exa uses these for search instead of keyword matching.
LLM-ready content: Web content with HTML tags stripped, boilerplate removed, and text converted to markdown or plain text. All three APIs return content in this format.
Semantic search: Finding results by meaning rather than exact keyword matches. A search for “best tools for writing docs” can match a page titled “Top documentation generators” even though the words don’t overlap.