Most accurate web search API for research agents: precision, recall and F1
Ranked on the multi-hop search task of the web search benchmark. Each question combines three or four constraints.
Parallel basic (parallel-basic) leads F1 at 50.2% on this run.
Most accurate for multi-hop company discovery. Read F1, then precision versus recall: padding lowers precision, omissions lower recall.
Most accurate · Fastest · Cheapest · Find companies by criteria · Search + fetch · Full benchmark
Ranking, sorted by f1
| Provider | Endpoint & configuration | F1 | Precision | Recall | Exact set | Median time | Mean turns | Median task cost | API list price |
|---|---|---|---|---|---|---|---|---|---|
| Parallel basic | POST /v1/search mode=basicparallel-basic | 50.2 ± 2.3 | 90.0 ± 3.8 | 38.4 ± 2.5 | 7.5 ± 5.7 | 69.1 s | 7.5 | $1.180$0.070 search$1.110 token cost | $0.005 / search |
| Exa deep | POST /search type=deepexa-deep | 45.5 ± 2.4 | 82.9 ± 3.3 | 33.9 ± 1.8 | 1.5 ± 1.3 | 89.6 s | 7.4 | $0.717$0.156 search$0.554 token cost | $0.012 / search |
| Exa instant | POST /search type=instantexa-instant | 43.6 ± 0.6 | 81.9 ± 3.4 | 32.5 ± 0.9 | 3.1 ± 1.3 | 49.4 s | 7.3 | $0.627$0.091 search$0.532 token cost | $0.007 / search |
| Parallel advanced | POST /v1/search mode=advancedparallel-advanced | 43.4 ± 3.6 | 86.6 ± 3.4 | 31.2 ± 4.0 | 2.1 ± 1.8 | 85.8 s | 7.4 | $0.615$0.070 search$0.561 token cost | $0.005 / search |
| Tavily advanced | POST /search search_depth=advancedtavily-advanced | 42.0 ± 3.0 | 84.6 ± 5.4 | 30.6 ± 2.2 | 2.4 ± 0.0 | 92.1 s | 7.4 | $1.032$0.224 search$0.809 token cost | $0.016 / search |
| Linkup fast | POST /v1/search depth=fastlinkup-fast | 41.3 ± 2.2 | 82.7 ± 0.9 | 30.4 ± 2.0 | 0.8 ± 1.3 | 63.8 s | 7.4 | $0.923$0.070 search$0.858 token cost | $0.005 / search |
| Linkup standard | POST /v1/search depth=standardlinkup-standard | 40.8 ± 1.4 | 83.8 ± 6.8 | 30.0 ± 1.9 | 1.6 ± 2.7 | 72.4 s | 7.3 | $0.941$0.070 search$0.871 token cost | $0.005 / search |
| Parallel fast | POST /v1/search mode=fastparallel-fast | 39.0 ± 5.5 | 81.6 ± 5.4 | 27.9 ± 4.4 | 1.4 ± 1.8 | 54.8 s | 7.7 | $0.469$0.014 search$0.455 token cost | $0.001 / search |
| You | POST /v1/searchextraction_mode=highlights | 38.6 ± 0.8 | 79.3 ± 4.9 | 28.3 ± 0.9 | 4.4 ± 0.0 | 48.2 s | 7.5 | $0.971$0.070 search$0.901 token cost | $0.005 / search |
| You | POST /v1/searchextraction_mode=highlights · knowledge=core | 38.1 ± 0.6 | 80.9 ± 1.6 | 27.4 ± 0.9 | 3.0 ± 1.3 | 47.6 s | 7.5 | $0.895$0.070 search$0.827 token cost | $0.005 / search |
| Perplexity | POST /searchsearch_context_size=low | 37.8 ± 2.1 | 79.3 ± 5.7 | 26.8 ± 1.4 | 2.2 ± 2.2 | 48.9 s | 7.7 | $0.334$0.070 search$0.264 token cost | $0.005 / search |
| Tavily basic | POST /search search_depth=basictavily-basic | 36.5 ± 3.2 | 82.5 ± 1.9 | 25.7 ± 2.7 | 1.5 ± 1.3 | 63.0 s | 7.7 | $0.615$0.112 search$0.504 token cost | $0.008 / search |
| Parallel turbo | POST /v1/search mode=turboparallel-turbo | 32.8 ± 3.5 | 76.7 ± 7.2 | 22.9 ± 2.8 | 0.0 ± 0.0 | 47.0 s | 7.6 | $0.420$0.014 search$0.408 token cost | $0.001 / search |
| Firecrawl | POST /v2/searchfirecrawl | 30.8 ± 2.1 | 77.4 ± 5.1 | 21.1 ± 1.5 | 2.4 ± 0.0 | 75.0 s | 7.9 | $0.281$0.070 search$0.211 token cost | $0.005 / search |
| Nimble | POST /v2/searchsearch_depth=standard · full_content=false · focus=general | 30.7 ± 1.4 | 70.3 ± 3.3 | 21.3 ± 1.1 | 0.7 ± 1.3 | 53.0 s | 7.7 | $0.467$0.070 search$0.398 token cost | $0.005 / search |
| Brave Search | GET /res/v1/web/searchbrave | 26.9 ± 0.7 | 64.5 ± 9.1 | 18.4 ± 0.5 | 0.8 ± 1.4 | 43.4 s | 8.0 | $0.265$0.070 search$0.200 token cost | $0.005 / search |
| TinyFish | GET api.search.tinyfish.aitinyfish | 26.6 ± 1.3 | 64.7 ± 1.5 | 17.9 ± 0.8 | 1.5 ± 1.3 | 64.2 s | 7.9 | $0.212$0.000 search$0.212 token cost | $0 / search |
| Nimble | POST /v2/searchsearch_depth=lite · full_content=false · focus=general | 24.1 ± 1.4 | 65.2 ± 2.3 | 16.1 ± 1.3 | 0.7 ± 1.3 | 67.2 s | 7.9 | $0.222$0.015 search$0.207 token cost | $0.0011 / search |
| Seltz | POST /v1/search scope=companiesseltz-companies | 14.4 ± 1.0 | 40.6 ± 4.3 | 9.2 ± 0.7 | 0.0 ± 0.0 | 55.9 s | 7.4 | $1.751$0.070 search$1.681 token cost | $0.005 / search |
| SERP (RapidAPI) | GET google-search74.p.rapidapi.comserp | 0.4 ± 0.6 | 0.8 ± 1.3 | 0.3 ± 0.4 | 0.0 ± 0.0 | 31.4 s | 7.8 | $0.103$0.036 search$0.065 token cost | $0.003 / search |
F1, precision, recall, and exact-set accuracy are percentages reported as mean ± sample SD across three independent runs; each run aggregates all 45 questions. SD is measured in percentage points. Median time is the median end-to-end time across all runs for each vendor. Median task cost is the median of LLM $ plus search API $ per agent run. API list price is the PAYG unit rate of the search endpoint the harness calls.
Search plus fetch, same sort
| Provider | Endpoint & configuration | F1 | Precision | Recall | Exact set | Median time | Mean turns | Median task cost | API list price |
|---|---|---|---|---|---|---|---|---|---|
| Exa deep | POST /search type=deepexa-deep | 49.2 ± 2.1 | 89.8 ± 1.1 | 37.4 ± 2.2 | 3.2 ± 2.9 | 95.3 s | 7.5 | $0.685$0.156 search+fetch$0.526 token cost | $0.012 / search$0.001 / fetch |
| Perplexity | POST /searchsearch_context_size=high | 46.6 ± 2.0 | 87.7 ± 5.9 | 34.7 ± 1.1 | 2.2 ± 2.2 | 53.9 s | 7.5 | $0.504$0.070 search+fetch$0.441 token cost | $0.005 / search |
| Exa instant | POST /search type=instantexa-instant | 44.4 ± 1.3 | 85.7 ± 2.7 | 33.1 ± 1.3 | 5.3 ± 1.2 | 52.8 s | 7.5 | $0.654$0.091 search+fetch$0.564 token cost | $0.007 / search$0.001 / fetch |
| Parallel advanced | POST /v1/search mode=advancedparallel-advanced | 43.8 ± 2.6 | 88.6 ± 4.6 | 31.7 ± 3.2 | 2.4 ± 2.3 | 79.5 s | 7.4 | $0.571$0.061 search+fetch$0.513 token cost | $0.005 / search$0.001 / fetch |
| Tavily advanced | POST /search search_depth=advancedtavily-advanced | 42.4 ± 2.6 | 89.2 ± 7.2 | 30.7 ± 1.7 | 3.8 ± 0.0 | 91.2 s | 7.2 | $0.855$0.192 search+fetch$0.655 token cost | $0.016 / search$0.0032 / fetch |
| Linkup standard | POST /v1/search depth=standardlinkup-standard | 41.8 ± 2.0 | 90.3 ± 2.0 | 30.4 ± 2.2 | 3.1 ± 3.4 | 80.2 s | 7.5 | $0.910$0.070 search+fetch$0.843 token cost | $0.005 / search$0.001 / fetch |
| Parallel basic | POST /v1/search mode=basicparallel-basic | 41.2 ± 2.2 | 78.3 ± 5.0 | 30.1 ± 2.2 | 2.9 ± 2.4 | 67.0 s | 7.4 | $1.099$0.061 search+fetch$1.034 token cost | $0.005 / search$0.001 / fetch |
| Linkup fast | POST /v1/search depth=fastlinkup-fast | 39.4 ± 1.3 | 84.7 ± 3.9 | 28.3 ± 1.4 | 0.8 ± 1.3 | 69.0 s | 7.4 | $0.914$0.061 search+fetch$0.844 token cost | $0.005 / search$0.001 / fetch |
| You | POST /v1/searchextraction_mode=highlights | 38.5 ± 1.6 | 85.2 ± 2.7 | 26.9 ± 1.7 | 0.7 ± 1.3 | 45.6 s | 7.4 | $0.864$0.065 search+fetch$0.795 token cost | $0.005 / search$0.001 / fetch |
| You | POST /v1/searchextraction_mode=highlights · knowledge=core | 38.5 ± 2.4 | 78.2 ± 2.5 | 28.3 ± 3.0 | 3.7 ± 1.3 | 48.5 s | 7.4 | $0.894$0.065 search+fetch$0.830 token cost | $0.005 / search$0.001 / fetch |
| Tavily basic | POST /search search_depth=basictavily-basic | 38.1 ± 1.4 | 81.2 ± 5.9 | 27.8 ± 0.7 | 2.2 ± 0.0 | 62.0 s | 7.8 | $0.610$0.112 search+fetch$0.507 token cost | $0.008 / search$0.0032 / fetch |
| Parallel turbo | POST /v1/search mode=turboparallel-turbo | 37.8 ± 1.7 | 83.2 ± 3.4 | 26.1 ± 1.2 | 0.0 ± 0.0 | 47.2 s | 7.7 | $0.419$0.014 search+fetch$0.405 token cost | $0.001 / search$0.001 / fetch |
| Parallel fast | POST /v1/search mode=fastparallel-fast | 36.0 ± 7.4 | 78.1 ± 14.1 | 25.3 ± 5.3 | 1.5 ± 2.3 | 55.9 s | 7.6 | $0.453$0.014 search+fetch$0.439 token cost | $0.001 / search$0.001 / fetch |
| Firecrawl | POST /v2/searchfirecrawl | 33.5 ± 2.6 | 83.1 ± 0.4 | 22.9 ± 2.2 | 1.5 ± 1.3 | 81.9 s | 7.9 | $0.293$0.063 search+fetch$0.229 token cost | $0.005 / search$0.0025 / fetch |
| Nimble | POST /v2/searchsearch_depth=standard · full_content=false · focus=general · extract formats=[markdown] | 31.3 ± 1.8 | 73.2 ± 1.9 | 21.7 ± 1.6 | 1.5 ± 1.3 | 59.2 s | 7.9 | $0.424$0.424 token cost | $0.005 / search |
| TinyFish | GET api.search.tinyfish.aitinyfish | 30.2 ± 3.5 | 70.9 ± 11.3 | 20.9 ± 2.5 | 0.0 ± 0.0 | 63.4 s | 7.9 | $0.219$0.000 search+fetch$0.219 token cost | $0 / search$0 / fetch |
| Brave Search | GET /res/v1/web/searchbrave | 29.1 ± 2.1 | 72.9 ± 6.2 | 20.1 ± 1.6 | 1.5 ± 1.3 | 44.9 s | 8.0 | $0.285$0.060 search+fetch$0.221 token cost | $0.005 / search |
| Nimble | POST /v2/searchsearch_depth=lite · full_content=false · focus=general · extract formats=[markdown] | 25.9 ± 1.9 | 67.0 ± 9.1 | 17.9 ± 1.4 | 1.6 ± 1.4 | 71.2 s | 8.0 | $0.226$0.226 token cost | $0.0011 / search |
| Seltz | POST /v1/search scope=companiesseltz-companies | 16.5 ± 1.6 | 49.5 ± 3.9 | 10.3 ± 1.2 | 0.0 ± 0.0 | 59.6 s | 7.5 | $1.727$0.070 search+fetch$1.657 token cost | $0.005 / search |
| SERP (RapidAPI) | GET google-search74.p.rapidapi.comserp | 0.0 ± 0.0 | 0.0 ± 0.0 | 0.0 ± 0.0 | 0.0 ± 0.0 | 33.8 s | 7.8 | $0.102$0.039 search+fetch$0.066 token cost | $0.003 / search |
F1, precision, recall, and exact-set accuracy are percentages reported as mean ± sample SD across three independent runs; each run aggregates all 45 questions. SD is measured in percentage points. Median time is the median end-to-end time across all runs for each vendor. Median task cost is the median of LLM $ plus search/fetch API $ per agent run. API list price is the PAYG unit rate of the search (and fetch) endpoint the harness calls.
Common questions
What is the most accurate web search API for research agents?
Parallel basic (parallel-basic) leads F1 at 50.2% on 45 multi-constraint questions (search-only). Search+fetch is a separate ranking. This is multi-hop company discovery, not one-shot lookup; the lookup ranking is on the web search hub.
What do precision and recall mean in a web search API benchmark?
Every returned company is resolved to a canonical identity and compared with a human-reviewed gold set. Precision is the share of returned companies that satisfy every constraint; recall is the share of the gold set the agent recovered; F1 is their harmonic mean. An API can fail by padding (low precision) or by missing members (low recall), and the table shows both.










