
Research agents already handle real knowledge work today. Teams delegate competitive mapping, due diligence, and literature review to them. However, most benchmarks test a single answer, not large evidence-backed collections. Perplexity targets that gap with a new open benchmark.
Perplexity released WANDR (Wide ANd Deep Research). It is an open benchmark and evaluation harness. It is built around 500 realistic, challenging data-collection tasks for knowledge work. WANDR is the wide sibling of Perplexity’s DRACO benchmark for deep research. DRACO asks whether an agent produces an accurate, complete, objective long-form report. WANDR instead asks whether it can build a large collection with evidence.
What is WANDR
At its core, WANDR tests two demands together. Wide means discovering a large, often open-ended set of qualifying entities. Deep means investigating every entity enough to support each claim with evidence. Combining both changes the problem for agents. A few compelling examples are not enough here. A polished narrative built on incomplete research also falls short.
To capture this, WANDR uses a composable qualification key hierarchy. One task might request company(n) -> employee(m) -> url(k). This means n qualifying companies, m employees each, and k supporting pages each. Every complete path through the tree gets validated independently. The same structure can represent a flat list, nested search, or matrix.
A Concrete Task Example
To ground that hierarchy, consider the released ceo_cfo_appointments task. It asks for at least 70 US-based companies. Each must have a CEO or CFO appointment first announced between March 1 and April 30, 2026. For each, the agent supplies one authoritative appointment page. A subtask adds a listing-authority page per company. Together, the task requires 140 source-backed records.
Concretely, the two hierarchies and one submitted record look like this:
# Task hierarchies
company(70) -> company_appointee(1) -> url(1) # 70 appointment records
company(70) -> url(1) # 70 listing records
# One record the grader re-fetches and re-checks (values are illustrative)
{
"item": "Example Corp - new CFO",
"url": "https://issuer.example.com/press/cfo-appointment",
"excerpts": ["Example Corp today named Jane Doe as Chief Financial Officer, effective April 2026."],
"answer": "Jane Doe appointed CFO; announced April 2026"
}Realistic Tasks, Generated At Scale
Beyond single examples, WANDR builds its tasks from real usage. It starts from de-identified patterns seen in production, not synthetic prompts. A semi-automated pipeline then turns those patterns into tasks. The pipeline runs four stages: seeding, authoring, admission, and curation. It uses an interleaved author-critic loop with mechanical linting.
As a result, the median task asks for 50 members and 245 records overall. Across all 500 tasks, WANDR calls for 170,495 source-backed records. Tasks split into 167 lower, 166 middle, and 167 higher difficulty. Difficulty depends on per-record work, not scale alone.
How WANDR Grades Agents
Unlike fixed answer keys, WANDR grades each claim against cited evidence. Every record contains an item, URL, selected excerpts, and answer. The grader re-fetches the page during evaluation. It checks whether the page is usable and in scope. It then verifies the excerpts truly appear and support every requirement.
These binary record verdicts then roll up through the hierarchy. Precision measures the quality of what a system submitted. Recall measures quality-adjusted completion, filling any shortfall with zeros. Soft scores give partial credit to incomplete members. Hard scores count only members whose full subtree is correct.
The Benchmark Results
Using that method, Perplexity ran six production systems on all 500 tasks. Its own Search as Code (SaC) system leads. Still, no system comes close to solving the benchmark.
| System | Soft F1 | Hard F1 | Notes |
|---|---|---|---|
| Perplexity (Search as Code) | 0.363 | 0.133 | $5.20/task, 14.9-min median, 3.82M tokens/task |
| Anthropic | 0.249 | 0.072 | Closest on quality, but more time, money, tokens |
| Others (best) | 0.121 | 0.035 | OpenAI, Exa faster and cheaper, but lower scores |
With more effort, Perplexity reaches 0.447 soft F1 at the xhigh setting. Cost across settings spans more than four orders of magnitude. It ranges from $0.03 per task up to $324.83 per task.
Beyond the leaderboard, four findings stand out. First, partial progress is common, but complete coverage is not. Every system shows soft recall below soft precision. Second, scale compounds the problem sharply. Deeper hierarchies hurt most, since each branch adds a failure point. Third, discovery is the first structural bottleneck. Top-level discovery completion ranges from 0.611 to 0.951 across systems. Under-delivery, not duplicate merging, explains most missing volume. Fourth, finding a usable page is usually easy. Turning it into complete evidence is the hard part. For Perplexity, 41.4% of pages miss a substantive requirement. Also, 57.5% of excerpts fail to support the full claim. Its soft F1 falls from 0.531 under a retrieval-only check to 0.363 under the full verdict.
Notably, Search as Code fits this task shape well. An agent can express retrieval, filtering, fan-out, joins, deduplication, and stopping logic as a program. Deterministic compute then handles repeated operations outside the model context.
function el(t,a){var e=document.createElementNS(NS,t);for(var k in a)e.setAttribute(k,a[k]);return e;}
function build(){
svg.innerHTML=”;
var cfg=CFG[effort];
var rootX=260, rootY=26;
// root
var edges=el(‘g’,{}); svg.appendChild(edges);
var g=el(‘g’,{}); svg.appendChild(g);
var root=el(‘g’,{class:’node’});
root.appendChild(el(‘rect’,{x:rootX-58,y:rootY-14,width:116,height:28,rx:7,fill:’#1e1e1e’,stroke:’#ff6a00′,’stroke-width’:1.4}));
var rt=el(‘text’,{x:rootX,y:rootY+4,fill:’#ff8a33′,’font-size’:11,’text-anchor’:’middle’,’font-weight’:700}); rt.textContent=”TASK · company(6)”; root.appendChild(rt);
g.appendChild(root);
nodes={root:root, comp:[], leaf:[]};
var n=cfg.target, spread=470, startX=rootX-spread/2, dx=spread/(n-1), y1=140, y2=250;
for(var i=0;i
var e1=el(‘line’,{class:’edge’,x1:rootX,y1:rootY+14,x2:cx,y2:y1-16}); edges.appendChild(e1);
var cg=el(‘g’,{class:’node’});
var col= missing?’#3a3a3a’:’#ff6a00′;
cg.appendChild(el(‘circle’,{cx:cx,cy:y1,r:13,fill:’#181818′,stroke:col,’stroke-width’:1.6}));
var ct=el(‘text’,{x:cx,y:y1+3,fill:missing?’#666′:’#fff’,’font-size’:9,’text-anchor’:’middle’}); ct.textContent=”C”+(i+1); cg.appendChild(ct);
g.appendChild(cg);
// enrichment leaf (appointee -> url)
var e2=el(‘line’,{class:’edge’,x1:cx,y1:y1+13,x2:cx,y2:y2-11}); edges.appendChild(e2);
var lg=el(‘g’,{class:’node’});
lg.appendChild(el(‘rect’,{x:cx-9,y:y2-9,width:18,height:18,rx:4,fill:’#181818′,stroke:’#3a3a3a’,’stroke-width’:1.4}));
g.appendChild(lg);
nodes.comp.push({g:cg,e:e1,missing:missing,x:cx,y:y1});
nodes.leaf.push({g:lg,e:e2,missing:missing,x:cx,y:y2,box:lg.firstChild});
}
// stage labels
svg.appendChild(txt(14,y1+4,’WIDE’));
svg.appendChild(txt(14,y2+4,’DEEP’));
state={found:cfg.found,deepOk:cfg.deepOk,ev:cfg.evVerify,target:cfg.target};
}
function txt(x,y,s){var t=el(‘text’,{x:x,y:y,class:’lbl’,’font-weight’:700});t.textContent=s;return t;}
function reset(){
b1.disabled=false;b2.disabled=true;b3.disabled=true;
build();
phase.textContent=”Ready”;
note.innerHTML=’Task: find companies → a CEO/CFO appointee → one evidence URL each. Press Discover to begin.’;
setBars(0,0,0,0);
resize();
}
function show(node,d){ setTimeout(function(){ node.classList.add(‘show’); resize(); }, d); }
function discover(){
b1.disabled=true;
phase.textContent=”Wide · Discovery”;
note.innerHTML=’The agent discovers qualifying companies. It found ‘+state.found+’ of ‘+state.target+’ targets. Under-delivery here caps recall later.’;
show(nodes.root,0);
nodes.comp.forEach(function(c,i){
if(!c.missing){ show(c.e,120+i*120); show(c.g,120+i*120); }
});
setTimeout(function(){ b2.disabled=false; },120+state.found*120+150);
}
function enrich(){
b2.disabled=true;
phase.textContent=”Deep · Enrichment”;
note.innerHTML=’For each company, the agent attaches an appointee and an evidence URL. Deep paths built: ‘+state.deepOk+’.’;
var shown=0;
nodes.leaf.forEach(function(l,i){
if(!l.missing && i
+’Soft gives partial credit; Hard needs the full subtree correct — note the drop.’;
setBars(precision,recall,softF1,hardF1);
}, built*260+120);
}
function setBars(p,r,s,h){
put(‘pv’,’pb’,p); put(‘rv’,’rb’,r); put(‘sv’,’sb’,s); put(‘hv’,’hb’,h); resize();
}
function put(vid,bid,val){
document.getElementById(vid).textContent=val.toFixed(2);
document.getElementById(bid).style.width=Math.min(100,val*100)+’%’;
}
// effort segmented control
document.getElementById(‘seg’).addEventListener(‘click’,function(e){
if(e.target.tagName!==’BUTTON’)return;
[].forEach.call(this.children,function(b){b.classList.remove(‘on’)});
e.target.classList.add(‘on’); effort=e.target.getAttribute(‘data-e’); reset();
});
b1.onclick=discover; b2.onclick=enrich; b3.onclick=grade; br.onclick=reset;
// auto-resize for WordPress iframe embedding (component’s own offsetHeight)
function resize(){
var h=document.getElementById(‘mtp-wandr’).offsetHeight+40;
try{ parent.postMessage({mtpWandrHeight:h},’*’); }catch(e){}
}
window.addEventListener(‘load’,function(){ reset(); setTimeout(resize,120); });
window.addEventListener(‘resize’,resize);
})();







