Web search APIs, measured
We sent 45 real questions that AI agents asked during real work and checked each result against an answer key verified on the primary source: 10 search APIs ranked; 14 settings measured, one of them a partial run. Exa's answer API was judged separately. Synthetic Search API found the most required facts (0.96 with full page text) and also ranked the answer page first most often.
The ranking
10 search APIs ranked; 14 settings measured. Each API is ranked once, at its best-scoring setting by fact@5; its other settings sit indented beneath it, unranked, as does one equal-budget check. Scores equal to two decimals share a rank. Whole-page APIs send 47k to 86k characters per query; excerpt APIs send 965 to 12k. Hover or tap a dotted value for its source. Cost is the list price per 1,000 calls.
| Rank | Search API | fact@5 | Context (chars/query) | Full answers | Answer page first | In top 3 pages | Cost / 1k | Latency |
|---|---|---|---|---|---|---|---|---|
| 1 | Synthetic Search API full page text | 0.96 Our search eval Share of required facts found in the top 5 results' returned text Nov 7, 2026 | 47k Whole pages: median characters returned per query Nov 7, 2026 | 41/45 | 32/45 | 36/45 | In plan Plan-included: in every Synthetic subscription (from $9/mo); 250 searches/hour quota | 0.66 s |
| ↳ | Synthetic Search API trimmed to 900 chars/result · equal-budget check, not ranked | 0.87 Our search eval, equal-budget check, not ranked Share of required facts found in the top 5 results' returned text Nov 7, 2026 | 4.8k Excerpts: median characters returned per query Nov 7, 2026 | 33/45 | 32/45 | 36/45 | In plan | 0.70 s |
| =2 | Jina Search s.jina.ai, whole pages 18.6 s per call; free 10M tokens ≈ 470 searches | 0.92 Our search eval Share of required facts found in the top 5 results' returned text. Tied: same score to two decimals (0.924). Nov 7, 2026 | 86k Whole pages: median characters returned per query Nov 7, 2026 | 36/45 | 18/45 | 29/45 | Token-billed Billed by tokens; 10M free tokens, about 470 searches at its median page size (eval/REPORT.md) | 18.6 s |
| =2 | Parallel Search basic mode | 0.92 Our search eval Share of required facts found in the top 5 results' returned text. Tied: same score to two decimals (0.917). Nov 7, 2026 | 5.0k Excerpts: median characters returned per query Nov 7, 2026 | 35/45 | 24/45 | 34/45 | $5 $5 per 1,000 calls; same $80 free credit | 2.7 s |
| ↳ | Parallel Search fast mode · other setting, not ranked 0.91, within 0.01 of basic at 1/5 the price and 0.74 s vs 2.7 s | 0.91 Our search eval, another setting (not ranked) Share of required facts found in the top 5 results' returned text Nov 7, 2026 | 7.5k Excerpts: median characters returned per query Nov 7, 2026 | 38/45 | 26/45 | 34/45 | $1 $1 per 1,000 calls; $80 free credit for 60 days | 0.74 s |
| 4 | Linkup standard primary page in its top 5 on only 7/45 (others 21–28); mostly secondary sources | 0.87 Our search eval Share of required facts found in the top 5 results' returned text Nov 7, 2026 | 12k Excerpts: median characters returned per query Nov 7, 2026 | 33/45 | 23/45 | 26/45 | $5–6 $5–6 per 1,000 calls; $20 free credit | 1.5 s |
| 5 | Tavily advanced | 0.84 Our search eval Share of required facts found in the top 5 results' returned text Nov 7, 2026 | 8.7k Excerpts: median characters returned per query Nov 7, 2026 | 29/45 | 21/45 | 32/45 | $10–16 | 2.8 s |
| ↳ | Tavily basic · other setting, not ranked 0.84, within 0.01 of advanced; 1 credit per search vs 2; 1.4 s vs 2.8 s | 0.84 Our search eval, another setting (not ranked) Share of required facts found in the top 5 results' returned text Nov 7, 2026 | 6.3k Excerpts: median characters returned per query Nov 7, 2026 | 29/45 | 23/45 | 28/45 | $5–8 | 1.4 s |
| 6 | Exa auto | 0.75 Our search eval Share of required facts found in the top 5 results' returned text Nov 7, 2026 | 2.7k Excerpts: median characters returned per query Nov 7, 2026 | 24/45 | 28/45 | 32/45 | $7 | 1.8 s |
| ↳ | Exa instant · other setting, not ranked · answered 41/45; failed calls score 0 0.61 vs 0.75; $4 vs $7 per 1k; 0.89 s vs 1.8 s | 0.61 Our search eval, another setting (not ranked) Share of required facts found in the top 5 results' returned text Nov 7, 2026 | 2.5k Excerpts: median characters returned per query Nov 7, 2026 | 17/45 | 23/45 | 30/45 | $4 | 0.89 s |
| 7 | Brave Search API web | 0.65 Our search eval Share of required facts found in the top 5 results' returned text Nov 7, 2026 | 1.5k Excerpts: median characters returned per query Nov 7, 2026 | 17/45 | 26/45 | 35/45 | $5 | 1.3 s |
| =8 | Serper Google results, snippets | 0.61 Our search eval Share of required facts found in the top 5 results' returned text. Tied: same score to two decimals (0.615). Nov 7, 2026 | 965 Excerpts: median characters returned per query Nov 7, 2026 | 13/45 | 18/45 | 29/45 | $0.30–1 $0.30–1 per 1,000 calls by volume; 2,500 free searches | 1.1 s |
| =8 | TinyFish search, snippets | 0.61 Our search eval Share of required facts found in the top 5 results' returned text. Tied: same score to two decimals (0.609). Nov 7, 2026 | 971 Excerpts: median characters returned per query Nov 7, 2026 | 13/45 | 20/45 | 27/45 | Free Free search, limited to 5 calls a minute | 1.6 s |
| 10 | DuckDuckGo HTML results | 0.54 Our search eval Share of required facts found in the top 5 results' returned text Nov 7, 2026 | 1.5k Excerpts: median characters returned per query Nov 7, 2026 | 9/45 | 19/45 | 30/45 | Free No official search API; results page read directly | 1.4 s |
Tried, not measured: You.com. The account's free credit read as depleted.
Synthetic Search API returns whole pages, about 47k characters per query, which helps its fact@5. Its equal-budget check trims the same results to 900 characters per result, about 4.8k per query. Trimmed, it scores 0.87: behind Jina (0.92, whole pages at ~86k chars) and Parallel basic mode (0.92 at ~5.0k chars), level with Linkup (0.87 at ~12k chars), and ahead of Tavily advanced (0.84 at ~8.7k chars) and Exa auto (0.75 at ~2.7k chars). Its ranking still leads: the answer page came first 32 times, against 28 for the next API whose result pages we read.
Parallel is the best excerpt API: 0.92 in basic mode, and 0.91 in fast mode at 1/5 the price ($1 against $5 per 1,000 calls) and 0.74 s against 2.7 s. For most agents fast mode is the better buy.
Full answers in the returned text
Questions where every required fact appeared in the top five results.
Context size per query
Median characters returned for the top five results, on a linear scale from zero. More text finds more facts but costs the agent more tokens.
Answer page ranked first, read in full
The way an agent searches, then fetches: the first result page, read in full, held every required fact.
Median latency
Shorter is faster. One call per question, median over the calls that returned.
By question class
fact@5 within each class. Shading runs from the lowest cell (0.33) to the highest (1.00); the outlined cell leads its column.
| Search API | Devn=7 | Docsn=8 | Newsn=8 | Policyn=8 | Pricen=7 | Specn=7 |
|---|---|---|---|---|---|---|
| Synthetic Search APIfull page text | 1.00 | 0.94 | 0.97 | 0.88 | 1.00 | 1.00 |
| Jina Searchs.jina.ai, whole pages | 1.00 | 0.94 | 0.93 | 0.96 | 0.90 | 0.81 |
| Parallel Searchbasic mode | 0.96 | 0.94 | 0.91 | 0.76 | 0.95 | 1.00 |
| Linkupstandard | 0.89 | 0.94 | 0.78 | 0.89 | 1.00 | 0.71 |
| Tavilyadvanced | 0.85 | 0.93 | 0.80 | 0.68 | 0.90 | 0.93 |
| Exaauto | 0.89 | 0.72 | 0.90 | 0.50 | 0.95 | 0.57 |
| Brave Search APIweb | 0.82 | 0.64 | 0.66 | 0.50 | 0.86 | 0.48 |
| SerperGoogle results, snippets | 0.68 | 0.57 | 0.64 | 0.41 | 0.86 | 0.57 |
| TinyFishsearch, snippets | 0.71 | 0.54 | 0.61 | 0.56 | 0.67 | 0.57 |
| DuckDuckGoHTML results | 0.75 | 0.57 | 0.47 | 0.45 | 0.71 | 0.33 |
- Synthetic Search API full page textDev1.00Docs0.94News0.97Policy0.88Price1.00Spec1.00
- Jina Search s.jina.ai, whole pagesDev1.00Docs0.94News0.93Policy0.96Price0.90Spec0.81
- Parallel Search basic modeDev0.96Docs0.94News0.91Policy0.76Price0.95Spec1.00
- Linkup standardDev0.89Docs0.94News0.78Policy0.89Price1.00Spec0.71
- Tavily advancedDev0.85Docs0.93News0.80Policy0.68Price0.90Spec0.93
- Exa autoDev0.89Docs0.72News0.90Policy0.50Price0.95Spec0.57
- Brave Search API webDev0.82Docs0.64News0.66Policy0.50Price0.86Spec0.48
- Serper Google results, snippetsDev0.68Docs0.57News0.64Policy0.41Price0.86Spec0.57
- TinyFish search, snippetsDev0.71Docs0.54News0.61Policy0.56Price0.67Spec0.57
- DuckDuckGo HTML resultsDev0.75Docs0.57News0.47Policy0.45Price0.71Spec0.33
Policy and spec questions were the hardest for most APIs. Classes hold 7 or 8 questions each, so a single question moves a cell by more than 0.1.
Partly measured
Shown, not ranked, until it answers every question.
Firecrawl /v2/search
8 calls hit the free tier's rate limit, all on policy questions, so its score covers the other 37 and isn't comparable with the ranked rows. Counted as zero, the failed calls would put it at 0.63. It joins the ranking once it answers every question.
Exa /answer, judged
An answer API returns one cited paragraph, so it was judged as an answer, not as search results.
List price $5 per 1,000 calls. Median 2.0 s per answer.
- 22 answers contained every required fact verbatim. We read the other 23 against the answer key by hand.
- The wrong answers read as fluent and confident: one gave a date a week off, one described a mechanism that doesn't exist. Open the cited page before acting on one.
What independent boards say
Not our measurement. Different questions, different metric, and APIs we haven't run yet.
F1 on 45 questions that need several searches
Mean of 3 runs. Not an accuracy percentage. With no search tool, the same model scores 20.1.
Coding tickets completed from search snippets alone
When the agent may also fetch pages, the order changes: Exa deep leads at 83.0% (see fetch).
- Brave is a clear example of task shape deciding the result: 94.0% on openbenchmarks' single-fact board, 16th of 20 on its multi-hop board, and first in two smaller LLM-judged studies (AIMultiple, GroundRoute).
- openbenchmarks flags its own single-fact board as biased toward vendors measured later, pending a re-run, so we don't chart it.
- Synthetic's search API isn't on any independent board we found. Perplexity isn't in our eval, and You.com isn't measured yet.
What the questions look like
6 of the 45, from the dev, docs and price classes. Each has a primary-source answer key.
- devWhat is the CPU time limit per request (invocation) for Cloudflare Workers on the Free plan?
- devIn pnpm 11, which setting replaces onlyBuiltDependencies for allowing dependency build scripts?
- docsCan a user log in to pypi.org with their email address instead of their username?
- docsHow do you apply D1 migrations in tests with Cloudflare's Vitest integration (which functions, where they run)?
- priceWhat does Exa charge per 1,000 requests for Deep Search, Auto Search and Answer?
- priceWhat is RunPod Serverless's flex price per second for an L4 (24 GB) GPU worker?
Class sizes: Dev 7 · Docs 8 · News 8 · Policy 8 · Price 7 · Spec 7.
Caveats
- One run per API. Results were fetched within minutes of the answer key being checked, so every API saw the same live web.
- Grading is string matching on required facts. It undercounts paraphrases ("10 milliseconds" against "10 ms") for every API alike; the answer API was also read by hand.
- Three of the 48 questions were dropped: one had no primary source, one had its only source in an image, one had its source page change.
- A failed call scores zero, because it fails the agent too. Exa instant failed on 4 questions (answered 41/45). Firecrawl, whose 8 failures were free-tier rate limits, is shown separately and scored on what it answered.
- Linkup's returned text scores well, but it leans on secondary pages (blogs, write-ups) more than the others do; open its sources before citing them.
- You.com was tried but not measured: the account's free credit read as depleted. Docs tools are compared on the dev and docs questions on the docs page.
- Prices are list prices on the measurement date. Synthetic's search is included in its subscriptions, with an hourly quota, rather than billed per call.