Most token-efficient web search API for research agents
What the benchmark found. SERP (RapidAPI) (serp) used the fewest tokens per task search-only, a median of 10,890 tokens at 0.4% F1. The F1 leader, Parallel basic (parallel-basic), used 303,467 tokens at 46.5%.
What this page compares. Every search result the agent reads is model context. This page sorts the board by median task tokens, the total the agent consumed to finish a question, with F1 beside it.
How to read it. Fewer tokens is better only at equal task quality. A provider that returns short snippets and forces more searches can use more tokens end to end than one with longer, more useful results. Sorted by median task tokens, ascending.
Method in one paragraph. The same agent, prompt, turn budget and tool schema run against every web search API on 45 questions that each define a company set by three or four constraints. Every returned company is resolved to a canonical identity and compared with a human-reviewed gold set; precision, recall, F1 and exact-set are averaged over three runs per question. The model-only baseline is 0.
Most accurate · Fastest · Cheapest · Find companies by criteria · Search + fetch · Full benchmark
Ranked by median task tokens, fewest first
| Provider | Endpoint & configuration | Precision / 1k tokens | Precision | Median task tokens |
|---|---|---|---|---|
| SERP (RapidAPI) | GET google-search74.p.rapidapi.comserp | 0.07 | 0.7 ± 1.3 | 10,890 |
| Brave Search | GET /res/v1/web/searchbrave | 1.37 | 66.9 ± 8.5 | 49,005 |
| Firecrawl | POST /v2/searchfirecrawl | 1.53 | 77.3 ± 4.4 | 50,596 |
| TinyFish | GET api.search.tinyfish.aitinyfish | 1.27 | 64.7 ± 1.5 | 51,091 |
| Perplexity | POST /searchsearch_context_size=low | 1.18 | 79.3 ± 5.7 | 66,928 |
| Parallel | POST /v1/search mode=turboparallel-turbo | 0.72 | 80.0 ± 5.2 | 110,844 |
| You | POST /v1/searchyou | 0.65 | 75.7 ± 3.1 | 116,109 |
| Parallel | POST /v1/search mode=fastparallel-fast | 0.67 | 79.9 ± 4.6 | 119,953 |
| Exa | POST /search type=instantexa-instant | 0.54 | 82.6 ± 3.8 | 152,622 |
| Exa | POST /search type=deepexa-deep | 0.54 | 83.2 ± 3.0 | 153,061 |
| Parallel | POST /v1/search mode=advancedparallel-advanced | 0.55 | 87.6 ± 3.4 | 159,733 |
| Tavily | POST /search search_depth=advancedtavily-advanced | 0.35 | 83.7 ± 4.2 | 237,706 |
| Linkup | POST /v1/search depth=standardlinkup-standard | 0.34 | 84.0 ± 7.9 | 249,382 |
| Linkup | POST /v1/search depth=fastlinkup-fast | 0.32 | 82.8 ± 1.0 | 259,642 |
| Parallel | POST /v1/search mode=basicparallel-basic | 0.29 | 88.7 ± 0.9 | 303,467 |
| Seltz | POST /v1/search scope=companiesseltz-companies | 0.08 | 40.0 ± 3.1 | 500,633 |
Acc / 1k tokens = precision percentage ÷ median task tokens × 1,000; higher is better. Accuracy on this table uses precision: the share of returned answers that match the reference set. Median task tokens sum LLM input and output across every turn, then take the median across all repeats. Missing measurements are shown as —. Precision is mean ± sample SD in percentage points.
Same sort, with a page-reading tool enabled
| Provider | Endpoint & configuration | Precision / 1k tokens | Precision | Median task tokens |
|---|---|---|---|---|
| SERP (RapidAPI) | GET google-search74.p.rapidapi.comserp | 0.00 | 0.0 ± 0.0 | 11,051 |
| TinyFish | GET api.search.tinyfish.aitinyfish | 1.32 | 70.9 ± 11.3 | 53,654 |
| Brave Search | GET /res/v1/web/searchbrave | 1.35 | 73.5 ± 5.8 | 54,482 |
| Firecrawl | POST /v2/searchfirecrawl | 1.51 | 83.3 ± 0.8 | 55,069 |
| Parallel | POST /v1/search mode=turboparallel-turbo | 0.77 | 83.6 ± 4.0 | 108,358 |
| You | POST /v1/searchyou | 0.67 | 78.8 ± 0.6 | 117,286 |
| Parallel | POST /v1/search mode=fastparallel-fast | 0.69 | 82.3 ± 6.6 | 119,278 |
| Perplexity | POST /searchsearch_context_size=high | 0.72 | 87.7 ± 5.9 | 121,239 |
| Exa | POST /search type=deepexa-deep | 0.61 | 89.4 ± 1.2 | 147,079 |
| Parallel | POST /v1/search mode=advancedparallel-advanced | 0.58 | 87.6 ± 0.3 | 152,116 |
| Exa | POST /search type=instantexa-instant | 0.55 | 85.9 ± 2.5 | 156,796 |
| Tavily | POST /search search_depth=advancedtavily-advanced | 0.43 | 89.4 ± 6.0 | 208,974 |
| Linkup | POST /v1/search depth=fastlinkup-fast | 0.35 | 85.3 ± 3.6 | 246,395 |
| Linkup | POST /v1/search depth=standardlinkup-standard | 0.36 | 90.7 ± 2.0 | 254,078 |
| Parallel | POST /v1/search mode=basicparallel-basic | 0.27 | 81.3 ± 2.8 | 304,826 |
| Seltz | POST /v1/search scope=companiesseltz-companies | 0.10 | 49.5 ± 2.4 | 502,391 |
Acc / 1k tokens = precision percentage ÷ median task tokens × 1,000; higher is better. Accuracy on this table uses precision: the share of returned answers that match the reference set. Median task tokens sum LLM input and output across every turn, then take the median across all repeats. Missing measurements are shown as —. Precision is mean ± sample SD in percentage points.
Common questions
Which web search API is most token-efficient for research agents?
SERP (RapidAPI) (serp) used the fewest tokens per task search-only, a median of 10,890 tokens at 0.4% F1. The F1 leader, Parallel basic (parallel-basic), used 303,467 tokens at 46.5%.
Why show F1 next to tokens?
A provider can be token-cheap by returning little; the agent then runs more searches or gives up early, and the company set is incomplete. Token efficiency only counts at comparable task quality, which is why the F1 column stays on this table.
Are these the search API's tokens or the model's?
The model's. Median task tokens is the total context the fixed agent consumed to finish a question: search results, page fetches where enabled, and its own reasoning. It is the part of the bill that scales with how much a search API returns.










