20 Oct 2026, 1:45 to 2:01 PM PT Netflix posted Q3 results at about 1:01 PM. Then we asked nine sources.

netflix q3 2026 revenue

The answer, from the SEC filing: revenue grew 12% to $12.9B.

ExaAI native search

"Netflix reports results for third quarter of 2026", then the SEC filing, then CNBC from today

the number

LinkupAI native search

"Netflix Q3 Revenue Rises 12% to $12.87 Billion"

the number

ParallelAI native search

CNBC from today, then "Netflix Q3 2026 Earnings: Revenue of $12.87 Billion"

the number

TavilyAI native search

"Netflix Q3 2026 Earnings Preview": analysts expected $12.9B

the forecast

Claude WebSearchmodel + search tool

The SEC filing itself. Its summary: "Revenue grew 12%", no dollar figure

the filing, no number

SerperGoogle results via API

Netflix's investor page, then "Analysts expect ... revenue of $12.88 billion"

a "results coming" page

Firecrawl searchsearch + scrape

The same pages as Serper, in the same order

a "results coming" page

Googlescraped via Apify

Wikipedia "2026", the October Visa Bulletin, a Nobel press release

nothing on Netflix

Wikipediasite search

The Trade Desk, Big Tech, Roku

nothing yet

3 had the number1 the forecast1 the filing2 a "results coming" page2 nothing

research/battle/results_fresh/<source>.jsonl id fr05 · gold: sec.gov ex991_q326.htm (8-K exhibit 99.1)

One of four talks

Four talks, one question: how should agents search?

A

Search API Battle Royale

Same questions, different sources, measured 20 Oct 2026.

B

System 1 vs System 2 search

Quick search, deep research, and when to route between them.

C

Self improving RAG

A research loop that learns from its own mistakes.

D

Agent native search platforms

What search looks like when the user is an agent.

Claude Code Build Night Bright Data SF · 20 Oct 2026 · Ray Zahid, Immersive Commons

Search API Battle Royale

We tested nine search sources on 75 questions with known answers. All on 20 Oct 2026.

research/battle/summary_all60.json (60 trivia) · summary_fresh.json (15 news) · picked_contested.json (10, no answer key)

The question of this talk

What you know depends on what knowledge your agents can fetch.

How can you build a strategy for search?

1

Part 1 · Foundations

How a search engine works

1.1 Crawl, index, rank, snippet

Four steps between the web and your agent

The webpages change all day Crawla robot reads pages decides how new Netflix went live at 1:01 PM. No new visit yet: not found. Indexthe catalogue decides what can be found Semantic Scholar: papers only. 0 of 30 answers found. Rankwho goes first what is read first First place, of 60 trivia: Exa, Tavily 32. Google 22. Snippetthe lines under a link what can be quoted 133 to 1,534 characters per result, by source. Your agentoften reads only this the top 5 results, a wait and a bill

results_fresh/*.jsonl fr05 · summary.json s2 (results for 4 of 30, 0 answers) · summary_all60.json answer_in_top1, mean_snippet_chars

1.2 Scrape it, rent a scraper, or use a new index

Three ways to get search results

1 · Scrape a results page

Load the page

how
load the page and copy out the links
we used
Google, through an Apify scraper
catch
slow (5.62 s median), breaks when the page changes

2 · Search results API

Rent a scraper

how
a company scrapes the page and sends you the results as data
we used
Serper. Also SerpAPI and Bright Data
catch
short text: 144 characters per result on average

3 · AI native search API

Built for AI

how
its own copy of the web, long text, full pages on request
we used
Exa, Tavily, Linkup, Firecrawl search
catch
each one sees a different part of the web

Claude's WebSearch goes one step further: links plus a summary a model already wrote.

summary_all60.json median_latency_s (google, amortised over a batch), mean_snippet_chars (serper) · content/battle.md C5

1.3 Words we use tonight

Six terms we use tonight

SERP

The results page.

A ranked list for one search: a title, a link and a snippet for each.

Snippet

The lines under the link.

Text picked to match your search. A results page gives about 150 characters.

Coverage

Does the source have anything on this?

How many questions get results, and how many get the answer.

Freshness

How up to date it is.

The lag between the world changing and the index changing.

Ranking

Who goes first.

A score from matching words, links, newness and trained models.

Source bias

Which kinds of sites it favours.

Which websites, views and languages show up most.

1.4 Three meanings of fair

"Fair" means three different things

  1. A fair testWe kept the questions, grader, model and prompt the same for every test.
  2. Fair accessWho can use the source at all, and on what terms.free sources with no sign-up broke first
  3. Fair representationWhose pages the engine puts in front of your agent: papers, forums, review sites.10 questions people argue about

We keep the three apart. A source can win one and lose the other two.

2

Part 2 · The test

The test

The sources, the questions and the scoring.

2.1 The contestants · method

Nine sources answered every question

Tested on all 85 questions

  • Googlescraped via Apify
  • SerperGoogle results via API
  • Firecrawl searchsearch + scrape
  • TavilyAI native search
  • ExaAI native search
  • LinkupAI native search
  • ParallelAI native search
  • Claude WebSearchClaude Code's search tool
  • WikipediaWikipedia's own search

Stopped after 30: blocked or no results

  • DuckDuckGo Lite, Semantic Scholar, OpenAlex, our own research library

Ran, results held back

  • Bright Dataits MCP search tool, Google engine · our code mixed up its replies

Described, not tested

  • Jinasign-up did not complete
  • Google Custom Searchunavailable to new customers

These numbers hold for our questions, on 20 Oct 2026 only.

research/battle/ACCOUNTS.md (free tiers, no card) · TOS_PRICING.md (terms read 20 Oct 2026) · summary.json (first 30)

2.2 Three question sets, one grader

Question set and scoring rubric

60Trivia

30 real Google searches and 30 harder questions that need two facts. Each has a known answer.

15Last week's news

From 13 to 20 Oct 2026. Each has a dated page that quotes the answer.

10Contested

Questions people argue about: best VPN, rent control, coffee and the heart. No right answer, so we look at which sites come back.

One searchthe question as typed
Top 5titles and snippets only
Found scoreis the known answer in those five results?
Answer scoreClaude Sonnet answers using only those five. Same check.

picked.json + picked_rest.json (eval/set.jsonl, seed 20261020) · picked_fresh.json · picked_contested.json · eval/grade.py contains_gold, correct

3

Part 3 · Results

Results

Did it find the answer, how fast, how different, and did it help the model answer?

3.1 Round 1 · 60 trivia questions

Is the answer anywhere in the top 5?

Exa
4932 first
Tavily
4132 first
SerperGoogle results
3623 first
Firecrawl search
3627 first
Linkup
3423 first
Googlescraped via Apify
3322 first
Parallel
3224 first
Claude WebSearchlinks only; summary had it 42 times
145 first
Wikipedia
72 first

answer in first placeanswer anywhere in the top 5out of 60

research/battle/summary_all60.json answer_in_top5, answer_in_top1, claude.answer_in_tool_text · grader eval/grade.py contains_gold

3.2 The catch

Our test favours sources that send more text

average characters per result, drawn to scaleanswer in top 5
Google (Apify)
133
33 / 60
Serper
144
36 / 60
Wikipedia
154
7 / 60
Linkup
487
34 / 60
Parallel
487
32 / 60
Firecrawl search
863
36 / 60
Tavily
990
41 / 60
Exa
1,534
49 / 60
Exa sends about 11 times more text per result than a Google results page. More text holds more answers.
More text also costs more for the model to read: $0.98 for the 60 answers with Exa, $0.32 with Google.

summary_all60.json mean_snippet_chars, answer_in_top5 · answers_summary.json all60.exa.cost_usd, all60.google.cost_usd

3.3 Speed · typical seconds per search (median), 60 trivia

Most sources answer in about 2 seconds. Claude's search takes 16.

summary_all60.json median_latency_s · results/google.jsonl latency_note (one Apify run per batch) · real time: each dot takes its source's median

3.4 Overlap · how many top 5 links two sources share, 60 trivia

Nine sources, but many show the same pages

Google, Serper, FirecrawlShare most links: 0.59 to 0.71. They seem to use Google's results.
Tavily, partlyAbout 0.4 with the Google group. Similar pages, in its own order.
Exa, Parallel, Linkup, ClaudeEach returns mostly different pages: 0.22 or less with anyone.

1.0 = the same links. 0 = no links in common. Average over 60 questions. Our reading of the links, not a vendor's statement.

research/battle/summary_all60.json overlap.<a|b>.mean_jaccard (n = 60 per pair)

3.5 Round 2 · 15 news questions, 13 to 20 Oct 2026

On last week's news, most sources found the answer

Tavily
1413 first
Parallel
1411 first
Linkup
1410 first
Exa
1310 first
Firecrawl search
137 first
SerperGoogle results
135 first
Googlescraped via Apify
126 first
Claude WebSearchits written summary
10
Wikipedia
33 first

answer in first placeanywhere in the top 5out of 15 · all sources combined: 15 of 15

research/battle/summary_fresh.json answer_in_top5, answer_in_top1, union_web_answer_in_top5 · questions: picked_fresh.json

3.6 Round 3 · only the search results change

On news, search makes the difference

60 trivia questionsthings a model may already know

Memory only, no search 40

Google's top 5 40

Best search: Exa's top 5 45

15 news questions13 to 20 Oct 2026, after the model's training

Memory only, no search 4

Google's top 5 13

Best search: Tavily's top 5 15

Search is not for what the model knows. It is for what happened since.

research/battle/answers_summary.json all60 + fresh (none, google, exa, tavily) · model claude-sonnet-5-5, no tools · graded by eval/grade.py correct

3.7 Round 3 in full · Sonnet answers from each source's top 5

Search helps only when the model does not already know

What the model read60 trivia15 news
Nothing (memory only)404
Google (Apify) top 54013
Serper top 5not run14
Parallel top 53814
Tavily top 53815
Exa top 54513
Claude WebSearch summary3811
Wikipedia top 519 / 304
"What city is Apple's October 28 product event in?"No search: "Cupertino, California". With Google or Tavily snippets: "Los Angeles". Correct.
"What percent of Albertans voted to remain in Canada?"No search: "About 70% (best guess, unverified)". With Google's snippets: "about 76%". Correct.

answers_summary.json (all60, fresh; wikipedia all60 ran on the first 30 only) · answers/fresh/<source>.jsonl

3.8 What went wrong, and it matters

Free sources broke, and our own notes leaked the answers

Free sources with no sign-up broke

28 / 30DuckDuckGo Lite searches were blocked as bots. OpenAlex refused 8 of 8: daily free budget used up. Wikipedia refused 20 of 30 ("too many requests") until we added our contact details.

Our library read our own tests

30 / 30questions: our research library's top results were our own test runs from that morning. Without them: 1 of 30.

The answer key was out of date

2016Our key says Tim Hecker's latest album is "Love Streams". A 2016 page matched it and scored as correct. Another result named a newer album, "Shards" (2025).

summary.json ddg, openalex, brain.questions_with_session_transcript_hits · results/retried.jsonl (first failures) · results/google.jsonl hp04

3.9 Which sites come back · 10 questions people argue about, top 5 each

Each source favours different kinds of sites

Exa
30%
Parallel
28%8%
Tavily
16%10%10%
Google (Apify)
16%8%18%
Serper
16%8%20%
Firecrawl search
16%8%20%
Linkup
100% everything else: blogs, firms, small sites
Claude WebSearch
94% everything else
Wikipedia
100% encyclopedia

government, universities, international bodiesencyclopediaforum / video / socialreview / affiliateeverything else

research/battle/contested_summary.json per_source.shares (50 results each) · classes from a hand made domain list in contested.py

3.10 What the top 5 looked like

The best source depends on what your agent is for.

"Do rent control policies increase or reduce housing supply?"

Exa
ScienceDirect, doi.org, an economics journal site
Parallel
the Urban Institute, SSRN, Brookings
Serper
Reddit first, then Brookings and a pro-housing advocacy group
Linkup
a law firm, a landlord site and a real estate agent
Best VPN
every engine: review and affiliate sites. There is no primary source.

Our reading, not a verified finding

"Who invented the telephone?" Claude's WebSearch returned pages on unrelated companies' subdomains:

api-legacy.ingeniusprep.com
api.bybrand.io
mail.infosecinstitute.com

These look like spam pages made to rank in search. We did not check further.

research/battle/contested_summary.json examples (rent control, best vpn, telephone) · results_contested/<source>.jsonl

3.11 Price per 1,000 searches · public pricing pages, read 20 Oct 2026

The most expensive costs 30 times the cheapest. Long text costs more.

SerperGoogle results · 2,500 free searches, once
$1.00
down to $0.50 at 2.5M
Bright Data †5,000 records a month free
$1.50
ran; results held back for a fix on our side
Google via Apify scraper$5 credit a month
$1.80
list price; we paid $4.50 per 1,000
Parallel5,000 requests a month free
$1 to $5
per 1,000 requests, 10 results each
You.com Searchpriced, not tested
$5
Linkupstandard search
$5 to $6
Exa$10 credit a month
$7
Auto · $4 Lite, $12 Deep
Firecrawl searchHobby plan, 2 credits per 10 results
≈ $7.60
Tavily1,000 credits a month free
$8
basic · $16 advanced
Anthropic web search toolplus model costs
$10
SerpAPI$25 a month for 1,000
$25
Claude WebSearch, as we ran itSonnet in Claude Code, model costs included
≈ $30
measured: $1.79 for 60
Google Custom Searchends 1 Jan 2027
$5
not available to new customers

TOS_PRICING.md (quotes each pricing page) · † figure from a search summary; the page renders it in script · results/google_cost.json · summary_all60.json claude.cost_usd_total · bars on a log scale

4

Part 4 · Build it tonight

Ask more than one web

Ask several sources and compare their answers. When they disagree, read the pages.

4.1 The pattern · ask several, merge, compare

Three sources from different webs

search_with_agreement.pyasync def search_with_agreement(q, sources=(serper, exa, tavily)):    got = await gather(*(s.search(q, k=5) for s in sources))    ok = {s.name: r for s, r in zip(sources, got) if r}  # log who failed    hits = dedupe_by_url(r for rs in ok.values() for r in rs)    hits = [h for h in hits if not own_eval(h)]  # drop our own test notes    answers = [cheap_answer(q, rs) for rs in ok.values()]    best, votes = majority(answers)    if votes >= 2: return best, cite(hits, best), "agreed"    return deep_read(q, top_pages(hits, 3)), "checked"

content/battle.md section L · overlap: summary_all60.json · 72%: vote.json all60.voting (34 of 47 agreed)

4.2 What three sources gave us · Sonnet answered once from each of Google, Tavily and Exa

When sources agree, the answer is more often right

60 trivia · was the answer right?

Two or three agreed47 questions, 34 right

72%

All three disagreed13 questions, 6 right

46%

On news: 11 agreed, all 11 right. 4 disagreed, 3 right.

Right answers did not go up. The majority answer: 40 of 60. Same as Google alone, below Exa alone (45).
Merging found almost no new answers. Exa alone 49, all five together 51. News: 14, then 15.
Cost. Serper + Exa + Tavily at list price: about $16 per 1,000 questions, before model costs.

More sources do not give more right answers. They tell your agent when to double check.

research/battle/vote.json all60 + fresh: voting, union_answer_in_results · prices: TOS_PRICING.md ($1 + $7 + $8 per 1,000)

4.3 Tonight's tools · public docs

Use Bright Data's MCP for search, and to read full pages

Bright Data MCP

What it gives you

endpoint
mcp.brightdata.com/mcp?token=…
free tier
5,000 requests a month
default tools
search_engine, scrape_as_markdown, discover; 32 in all

In the pattern

Where it plugs in

one more source
search_engine
the reader
scrape_as_markdown reads the full page
add it
claude mcp add with the endpoint above

It ran on all 85 questions. Our code mixed up its replies, so its numbers wait for a fix. Check its overlap before you count it as a new web.

docs.brightdata.com/mcp-server/overview, /tools, /remote/quickstart · held back: research/battle/results/_unreliable/README.md

5.1 Honest limits

A snapshot of 20 Oct 2026, not a league table

  • Small sets. 60 trivia, 15 news, 10 contested. US, English, one afternoon.
  • One search per source, as typed. First 5 results only.
  • Exact text matching. "$12.87 billion" misses a key answer of "$12.9B". An out of date key answer still scores as correct.
  • Text length was not made equal. Each source sent its default amount, which favours long text.
  • We reached Google only through others: an Apify scraper and Serper. Scraper time is split across a batch.
  • Claude's summary may carry the model's own knowledge, not only the search.
  • One model, one prompt in the answer round. Serper answered on the news set only.
  • Overlap is our reading. It shows shared links, not whose index sits underneath.
  • We wrote the news questions on 20 Oct 2026 using web search. Sources that hold those pages start ahead.
  • We sorted sites into groups by hand. About 40% did not fit a group.
  • Bright Data is held back. Our own code mixed up answers; we caught it because a third of results matched no other source.

content/battle.md section M · research/battle/ (every file named in this deck) · vendors change ranking daily

Search API Battle Royale Ray Zahid · Immersive Commons

Ask more than one source. When they disagree, have your agent read the page.

short cut01 / 01
Overview · arrows + Enter or click · Esc to close