Skip to content
OpenRouterOpenRouter
© 2026 OpenRouter, Inc

Product

  • Chat
  • Rankings
  • Apps
  • Models
  • Providers
  • Pricing
  • Enterprise
  • Labs

Company

  • About
  • Blog
  • Careers
    Hiring
  • Privacy
  • Terms of Service
  • Support
  • Works With OR
  • Data

Developer

  • Documentation
  • API Reference
  • SDK
  • Status

Connect

  • Discord
  • GitHub
  • LinkedIn
  • X
  • YouTube

OpenRouter Benchmarks

DeepSearchQA

DeepSearchQA asks questions whose answers are lists: every member of a category, every event matching a set of constraints. Its 900 questions each carry a reference list of answer parts, and a response only counts when it finds all of them without padding the list with extras. We run it with the model held fixed and vary the search lane (engine, request surface, and agent turn budget) through OpenRouter's web-search tooling, so a score reflects the search configuration rather than the model. Where BrowseComp rewards locating one hidden fact, DeepSearchQA rewards exhaustive retrieval.

Last benchmark run Jul 21, 2026, 7:08 AM UTC

Dataset
The ladderCost efficiencyEngines comparedLeaderboardWhy we run itWhat scores tell youHow tasks are scoredMethodology

The ladder

Score by engine and turn budget. Complete-list answers usually need several searches, so accuracy climbs with budget — an engine that surfaces broad, deduplicated results early needs fewer turns to close the list.

DeepSearchQA

openai/gpt-5.6-terra
Enginedefault
native75.0%

DeepSearchQA

z-ai/glm-5.2
Engine1-turn5-turn25-turn
exa29.0%58.5%56.0%
perplexity27.0%53.5%55.5%
parallel15.0%33.0%37.0%

DeepSearchQA

anthropic/claude-opus-4.8
Enginedefault
native45.5%

Cost efficiency

Search depth costs money. Each point is one lane, and the frontier shows which configurations nobody beats on both price and accuracy.

Score vs. cost per task
Color is the engine; shape is the search depth (square = plugin, triangle = 1-turn, diamond = mid-ladder, circle = full depth). The dashed line traces the efficient frontier. No lane above it is both cheaper and better.

Engines compared

Scores by suite and engine
Each engine's best-depth lane per suite, with Wilson 95% confidence intervals. Overlapping intervals read as ties.

Leaderboard

One row per verified lane; sort by score, cost, or speed.

#EngineBudget95% CI
1nativedefault75.0%68.6%–80.5%$0.330s200
2exa5-turn58.5%51.6%–65.1%$0.100s200
3exa25-turn56.0%49.1%–62.7%$0.160s200
4perplexity25-turn55.5%48.6%–62.2%$0.130s200
5perplexity5-turn53.5%46.6%–60.3%$0.0890s200
6nativedefault45.5%38.7%–52.4%$0.680s200
7parallel25-turn37.0%30.6%–43.9%$0.130s200
8parallel5-turn33.0%26.9%–39.8%$0.0330s200
9exa1-turn29.0%23.2%–35.6%$0.0270s200
10perplexity1-turn27.0%21.3%–33.5%$0.0220s200
11parallel1-turn15.0%10.7%–20.6%$0.0120s200

Why we run this benchmark

Finding one fact and finding every fact are different search problems. A single lucky query can land a BrowseComp answer; a DeepSearchQA answer has to be assembled across searches, with the agent tracking what it has found and what is still missing. That coverage pressure exercises a different part of the search stack: result breadth and deduplication matter as much as ranking.

We run it with the model held fixed because that isolates the variables OpenRouter users actually control. Those are which engine handles the searches, whether search runs as a server tool or a plugin, and how many agent turns the loop is allowed. Those knobs are exactly what you can set on a request today.

What the scores can and can't tell you

These scores compare search configurations, not agent products. The model reads search result excerpts only, with no full-page fetching and no code tools, so absolute numbers sit below published agent leaderboards, which allow both. Read the deltas between lanes, not the raw levels.

The all-or-nothing grade makes this suite strict: missing one list member scores the same as missing them all, so scores run low and small engine gaps are noisy. Engine gaps smaller than the confidence intervals read as ties, and a lane's cost is as real as its score — the pareto chart is the honest summary.

The questions are public, which means memorization can inflate absolute scores over time; search-lane deltas remain meaningful because every lane shares the same model.

How a task is scored

Each task is one question with a reference list of expected answer parts. A judge model checks the response against every expected part and also flags excessive answers — parts the response asserts that are not in the reference. A task is correct only when the judge finds every expected part and finds no excessive answers. The grade is binary with no partial credit, and failed or refused tasks score zero.

reward = all_expected_parts_found ∧ no_excessive_answers   // ∈ {0, 1}
judge  = gemini-2.5-flash, strict json_schema completeness verdict
empty or refused answers skip the judge and score 0

A lane is one (engine, surface, turn budget) configuration. Lane scores aggregate task-weighted across verified runs, so a 100-task run counts twice as much as a 50-task run. Runs below the sample floor (smoke tests) are excluded entirely.

Methodology

Runs execute on OpenRouter's native bench harness against production endpoints. Each rung of the ladder sets the request-level tool-call budget (max_tool_calls) on the web search server tool, or uses the pluginfor one pre-inference search of the user's question verbatim. Engines run with their default settings, the same configurations production traffic hits.

Every run persists its full configuration, so each lane on this page is filterable down to the exact request parameters that produced it. You can reproduce any lane with the same knobs on your own requests. See the web search docs for the parameters, or browse all models to try one.