Skip to content
TRACE

LiveNew sample Fridays at 00:15 UTCLast completed

01Weekly web scraping benchmark

How reliably can web scrapers read a page?

Every Friday we send a new fresh sample of about 2,500 web pages to context.dev, Exa, Firecrawl, and Keenable. We publish how often each one gets through, how fast it answers, whether it returns the right page, what it costs, and why it fails.

Key findings · Nov 7, 2026 sample

  1. context.dev accessed the most pages, 94.4%. It led Firecrawl by 1.6 points across 2,527 shared pages, a statistically significant gap.
  2. context.dev leads in news. Keenable leads in jobs. The top two are statistically tied in 7 categories.
  3. Exa answers fastest at the median, 1.17 s. context.dev has the shortest slow tail: 95% of its requests finish within 10.8 s.
  4. 53 pages defeated every provider. Most came from jobs, Wikipedia links, and research pages.
pages, each sent to all four providers
2,527
categories, weighted equally
9
samples scored since Nov 4
4

02Leaderboard

Pages accessed

The score measures whether page data loaded, rather than only a block, error, or empty shell. Partial content and populated landing pages count. Ranks change only where a paired test on the same pages shows a real difference.

Showing all sources and categories.

Sample 2026-11-07 UTC · 2,527 pages

What counts as accessed

A page counts when real page data loads: an article, a listing, a filing, or a partial preview. A login wall, CAPTCHA, error page, or empty shell does not. An automated judge decides from the returned text and never sees which provider sent it.

How to read the ranges

The ± value is a 95% confidence interval. Two providers get separate places only when a paired test on the pages they disagree on passes at the 95% level; otherwise they share a place. 1 request rejected by our own account limits is excluded and listed in the table.

context.dev runs this benchmark and is one of the providers tested. See the methodology for scoring rules and limitations.

03Head-to-head

Same pages, paired

Every provider gets the identical sample, so we can count the pages one got and another missed. 5 of 6 pairs show a clear winner; the rest are within the noise.
Got the page ↓
Missed it →
context.devFirecrawlKeenableExa
context.dev—103117311
Firecrawl58—125297
Keenable57110—280
Exa558684—

Pair verdicts

  • context.dev vs Firecrawl103 to 58context.dev ahead
  • context.dev vs Keenable117 to 57context.dev ahead
  • context.dev vs Exa311 to 55context.dev ahead
  • Firecrawl vs Keenable125 to 110Tied
  • Firecrawl vs Exa297 to 86Firecrawl ahead
  • Keenable vs Exa280 to 84Keenable ahead

A pair is called only when an exact McNemar test on the pages the two disagree on passes at the 95% level. Requests rejected by our own account limits are left out of both sides.

04Categories

Results by category

context.dev leads in news. Keenable leads in jobs. The top two are statistically tied in 7 categories.
NewsCommerceJobsFinanceResearchLegalDocsCommunityOthercontext.dev, News: 93.0% (300 pages)context.dev, Commerce: 99.3% (300 pages)context.dev, Jobs: 90.7% (300 pages)context.dev, Finance: 100.0% (300 pages)context.dev, Research: 87.0% (300 pages)context.dev, Legal & government: 96.7% (300 pages)context.dev, Software & docs: 98.4% (127 pages)context.dev, Community: 94.7% (300 pages)context.dev, Other: 90.0% (300 pages)Exa, News: 84.7% (300 pages)Exa, Commerce: 79.0% (300 pages)Exa, Jobs: 80.0% (300 pages)Exa, Finance: 99.3% (300 pages)Exa, Research: 81.3% (300 pages)Exa, Legal & government: 70.0% (300 pages)Exa, Software & docs: 97.6% (127 pages)Exa, Community: 94.0% (300 pages)Exa, Other: 78.0% (300 pages)Firecrawl, News: 83.7% (300 pages)Firecrawl, Commerce: 98.3% (300 pages)Firecrawl, Jobs: 89.0% (300 pages)Firecrawl, Finance: 99.3% (300 pages)Firecrawl, Research: 89.3% (300 pages)Firecrawl, Legal & government: 95.7% (300 pages)Firecrawl, Software & docs: 100.0% (127 pages)Firecrawl, Community: 91.3% (300 pages)Firecrawl, Other: 89.0% (300 pages)Keenable, News: 83.3% (300 pages)Keenable, Commerce: 99.0% (299 pages)Keenable, Jobs: 95.7% (300 pages)Keenable, Finance: 99.3% (300 pages)Keenable, Research: 80.3% (300 pages)Keenable, Legal & government: 92.3% (300 pages)Keenable, Software & docs: 100.0% (127 pages)Keenable, Community: 94.7% (300 pages)Keenable, Other: 86.3% (300 pages)0%25%50%75%100%

In the table, black marks the highest rate in each row. “No provider” counts sample pages that all four failed. A verdict compares the top two providers in that category with a paired test on the same pages; “Tied” means the gap is within the noise. Categories hold up to 300 pages each.

05Latency

How long a page takes

Exa answers fastest at the median, 1.17 s. context.dev has the shortest slow tail: 95% of its requests finish within 10.8 s.
context.dev2.06 s5.96 s10.8 s26.1 s
Firecrawl1.75 s10.3 s11.4 s27.1 s
Keenable1.32 s12.0 s19.0 s30.0 s
Exa1.17 s7.62 s22.6 s27.1 s

Requests that hit the deadline

context.dev 0.0%Exa 0.0%Firecrawl 2.0%Keenable 2.3%context.dev, Exa, and Firecrawl are asked to give up at 27 seconds; Keenable offers no deadline setting, so our 30-second cutoff applies. Any failure at the deadline counts as a timeout, whatever error the provider returns.

How we measure

Time runs from sending the request to receiving the full response, measured from Vercel's US East region. Caching is turned off for every provider, and any response a provider marks as cached is excluded. Requests rejected by our own account limits are left out.

06Quality

From response to useful page

Getting through is only the first step. A page can still be the wrong document, or a title with no real content. Each line follows one provider from response to useful page.
100%95908580Returned contentPage accessedcontext.dev, Returned content: 95.4%context.dev, Page accessed: 94.1%94.1% context.devFirecrawl, Returned content: 93.8%Firecrawl, Page accessed: 92.4%92.4% FirecrawlKeenable, Returned content: 91.9%Keenable, Page accessed: 91.8%91.8% KeenableExa, Returned content: 84.4%Exa, Page accessed: 84.0%84.0% Exa
Returned content
The provider answered with text before the deadline.
Page accessed
The text is real page data, not a block or error screen.
Right page
It is the requested document, not a homepage or a different item.
Substantive
It holds the page's main content, not just a title or navigation.

Right-page and substantive-content grades are not available for this sample yet, so the chart stops at the stages that are graded.

Quality signals
ProviderRight pageSubstantiveEnded on another pageMedian lengthLength vs. other providers
context.dev——9.5%7,773 chars1.16×
Firecrawl——10.2%12,482 chars1.69×
Keenable——9.6%5,059 chars1.00×
Exa——0.0%4,872 chars1.00×

“Ended on another page” compares the final URL with the requested one, ignoring the scheme, “www.”, query strings, and trailing slashes. Length compares each provider with the median length across providers that returned the same page. context.dev and Firecrawl request main content only while Exa returns full text, so length is a signal, not a score.

07Cost

What a page costs

A cheap request is not cheap if it fails. We divide each published price by the access rate to get the cost of 1,000 pages that actually load.
context.devPro · $99 for 125,000 pages$0.7994.4%$0.79
FirecrawlStandard · $99 for 100,000 pages$0.9992.9%$1.07*
ExaContents · $1 per 1,000 pages$1.0084.9%$1.18*
KeenablePay as you go · $4 per 1,000 requests after 100,000 free each month$4.0092.3%$4.00

Each provider's published monthly price for roughly 100,000 pages, billed monthly. Volume discounts, annual billing, and free tiers change the result. Prices checked Nov 5, 2026. context.dev and Keenable say they do not bill failed requests, so their cost per accessed page equals their request price. * Exa and Firecrawl do not say, so we assume failed requests are billed. Keenable's first 100,000 requests each month are free.

08Failures

Why pages fail

context.dev fails least. Each bar shows the share of pages a provider missed, split by the first reason we recorded.
TimeoutHTTP errorNo content returnedBlock, login, or error screen
context.dev5.9%
Firecrawl7.6%
Keenable8.2%
Exa15.6%

Bars show the share of all scored pages each provider failed to access. Hover a segment for the count. Provider-reported failures and missed deadlines count as failures, even when the provider did not return an error code. Wrong documents and thin pages count as accessed and appear under Quality.

09History

Sample results over time

Sample results from Nov 4, 2026 onward. context.dev ranked first in 4 of 4 scored samples.

November 4, 2026 – November 7, 2026 4 sampled days

0%25%50%75%100%2026-11-04: context.dev 87.7%2026-11-05: context.dev 87.1%2026-11-06: context.dev 87.0%2026-11-04: Exa 77.2%2026-11-05: Exa 78.7%2026-11-06: Exa 79.1%2026-11-04: Firecrawl 83.9%2026-11-05: Firecrawl 79.4%2026-11-06: Firecrawl 82.3%2026-11-04: Keenable 84.6%2026-11-05: Keenable 84.4%2026-11-06: Keenable 84.2%2026-11-07: context.dev 94.4%2026-11-07: Exa 84.9%2026-11-07: Firecrawl 92.9%2026-11-07: Keenable 92.3%Nov 4Nov 5Nov 6Nov 7
Score availableSample without score×No sample

Showing the latest completed sample by default. Hover to preview a day; click, touch or use the arrow keys to keep it selected. Gaps are not estimated.

November 7, 2026 UTC

Page access · 2,527 pages

context.dev
94.4%
Exa
84.9%
Firecrawl
92.9%
Keenable
92.3%

Reading the sample history

Source and category filters apply to every sample result, including its page count and provider scores. Gaps mark missing scores or dates with no matching pages; they are not estimated. Source-filtered history requires complete retained page records, and category-only history uses saved run summaries. A dash means no score is available.

Same evidence, new rules

When a sample is regraded from its stored evidence under a newer scoring rule, both grades are kept so they can be compared on identical pages. The original grades are never overwritten.

10Sample & sources

Where the pages come from

Every Friday we collect new pages from 197 public feeds, registries, and sitemaps, plus links freshly added to English Wikipedia. No page is ever tested twice.
  1. Discover. During weekly collection we poll due publisher feeds, job boards, SEC and Federal Register listings, and sitemaps for new URLs. Wikipedia edits from the previous UTC day are checked before each sample for new external links.
  2. Sample. Every Friday at 00:15 UTC we draw up to 300 previously unseen pages per category, with at most 125 from one organization and 375 from one website.
  3. Freeze. The sample is locked and sent to all four providers with caching turned off for every one.
  4. Grade. A blind judge reads each response. Every URL, verdict, and timing is published in the page-level data.
Discovery sources by category
CategorySourcesExamples
News29BBC, NPR, Al Jazeera, CNBC
Commerce6Allbirds, Bombas, Gymshark, Vuori
Jobs23Stripe, Anthropic, Spotify, Cloudflare
Finance20SEC filings, Federal Reserve
Research17arXiv, PLOS, Nature, eLife
Legal & government37Federal Register, UK legislation, FTC
Software & docs31VS Code, Rust, Kubernetes, PostgreSQL
Community34Hacker News, Stack Overflow, Bluesky
Other1New external links on English Wikipedia
Browse all 198 sources ↗
Source examples by category

These feeds, APIs, and sitemaps supply the URLs for the weekly sample. We follow those links and test whether each provider can recover content from the destination page. We assign each page the category of the source that supplied it. Pages are new to the benchmark, but may have been published earlier.

News
Publisher articles · BBC feed ↗
Commerce
Product pages · Allbirds sitemap ↗
Jobs
Individual job postings · Stripe job API ↗
Finance
Company filings and financial releases · Apple SEC filings ↗
Research
Papers and scholarly articles · Nature feed ↗
Legal & government
Rules, notices and official records · Federal Register API ↗
Software & docs
Release notes and documentation · VS Code releases API ↗
Community
Discussion threads and social posts · Stack Overflow API ↗

These are configured discovery sources, not a guarantee that every source contributes to every sample.

11Methodology

How the benchmark works

Every rule that affects a score is written down here. Each topic opens for the full detail, and all of it stays on the page for readers, search engines, and AI assistants.
How scores are calculated

A page counts as accessed when actual page data or file content loaded. A partial preview, populated listing, publication landing page, or raw file can pass. Blocks, mandatory login screens, main-page errors, and empty shells fail when they contain no page data. Relevance, document identity, completeness, and extraction quality are not part of the access score; they are reported separately under Quality. We calculate the percentage of accessed pages within each category, then average those percentages, so every category has the same influence regardless of its page count. Failed requests, unresolved judgments, and pending results remain in the denominator and lower the score. Requests rejected by our own account limits (HTTP 401, 402, or 429, or exhausted credits) are excluded from that provider's score and listed separately; they are not retried, so no provider gets a second attempt at a page.

The ± range is a 95% confidence interval for the category-weighted score. Rankings use an exact McNemar test on the pages two providers disagree on; providers that do not differ at the 95% level share a place.

For the current selection, 9 provider results remain unresolved and 0 are pending. These results count against the score until access is confirmed.

The judge, and how we audit it

TypeSafe's Jev 1.13.0 model grades up to 12,000 characters taken from the beginning, middle, and end of each response. For the access score it sees only that text and whether it was sampled, never the provider name or the requested URL. Unclear evidence and judge failures stay unresolved rather than being guessed. Document and content grades for the Quality section use a separate judge call that also sees the requested URL, title, and category, still without the provider name.

Each week we hand-check a random sample of judged pages. Reviewers see the requested URL and the same evidence as the judge, but not the provider or the judge's verdict. No audit has been published for this scoring rule yet; agreement will appear here once it has.

Fresh content and cache checks

Every request asks for a fresh fetch, and every response is checked for the provider's own record of where the content came from. A response that a provider marks as served from cache is left out of the scores and latency instead of being counted as a success.

How each provider's cache status is checked
ProviderFresh-content settingResponse field checked
context.devmaxAgeMs: 0cache_metadata.status, cache_metadata.age_ms
ExamaxAgeHours: 0statuses[].source
FirecrawlmaxAge: 0, storeInCache: falsemetadata.cacheState
Keenablelive=trueusage.sku must be fetch.live
Request settings for each provider

Each provider's API is different, so these are the closest equivalent settings. Any change to them is logged in the repository with the date it took effect.

Request settings
ProviderEndpointFresh contentContentDeadline
context.dev/v1/web/scrapemaxAgeMs: 0Main content only27 s
Exa/contentsmaxAgeHours: 0Full text27 s
Firecrawl/v2/scrapemaxAge: 0, storeInCache: falseMain content only27 s
Keenable/v1/fetchlive=trueDefault30 s cutoff (no setting)

All outputs are limited to 250,000 characters.

Deadlines, timeouts, and rate limits

Each request has a 30-second hard cutoff on our side. context.dev, Exa, and Firecrawl are also asked to give up at 27 seconds. Providers report a missed deadline in different ways: an HTTP 408, an empty failure, or our cutoff. All of them count as timeouts.

Scheduled collection starts every Friday at 00:15 UTC, and workers continue through the queued sample. Limits are 4,000 requests per provider per UTC day, plus a separate grading budget. HTTP 401, 402, and 429 responses pause the affected provider across workers. Results reflect our own account plans, and requests those limits reject are excluded from scores. Interrupted requests are not automatically repeated, which avoids giving a provider extra attempts at the same page.

Reruns, duplicate days, and retention

Every sampled day has exactly one run.

Grading evidence (the excerpts the judge reads) is compressed and kept for 30 days so samples can be regraded and audited. Page-level records are kept for 180 days, and run summaries are kept permanently. Raw responses are not published.

Weekly collection and Wikipedia discovery

The selected run collected 2,527 of 2,700 targeted pages. In the unfiltered view, a missing category withholds the overall score.

Wikipedia discovery runs once before the weekly sample is created, using up to 1,200 non-bot article edits spread across the previous UTC day. We compare the old and new revision text. Only new external URLs that have not been tested before are eligible. The weekly sample includes up to 300 of these pages in the Other category, without inferring their subject from the citing article. This is a sample of edits, not every link added to Wikipedia. If discovery fails, the other sources can still form the weekly sample, and Wikipedia is checked again during the next weekly collection.

This group receives the same weight as each other category when present; missing Wikipedia pages do not suppress the eight-category score.

Known limitations

The sample is drawn from sources we chose; it is not a random sample of the web. The judge can make mistakes, which is why its agreement with human reviewers is published. Provider rate limits, request budgets, and the number of available pages can reduce a sample. Latency is measured from one region with caching turned off, which is slower than many real workloads.

184 of 198 sources last fetched successfully. Last collector update: 2026-11-07 02:30 UTC.

12Data & API

Check our work

Every number on this page comes from public records you can download. Each record has the URL, provider, timing, HTTP status, judge verdict, and a hash of the returned text.
  • Filtered results for this view
  • Every page-level record for 2026-11-07NDJSON
  • Run summaries with intervalsJSON
  • Judge prompts and request settingsGitHub ↗
  • Full source codeMIT license ↗
  • Plain-text summary for AI assistantsllms.txt
report.sh
curl -s https://trace.context.dev/api/report \  | jq '.latest.providers[] | {id, rate, ci, p50, p95}'

13FAQ

Common questions

Which web scraping API has the highest success rate?

In the Nov 7, 2026 sample, context.dev accessed 94.4% of 2,527 pages, followed by Firecrawl at 92.9%, Keenable at 92.3%, Exa at 84.9%. Its lead over the next provider is statistically significant.

Which web scraping API is fastest?

Exa had the fastest median response, 1.17 seconds. context.dev had the shortest slow tail: 95% of its requests finished within 10.8 seconds. Times are measured with caching turned off.

Does the benchmark use cached pages?

No. Every request asks for a fresh fetch, and we check each response for the provider's own cache marker. Responses served from cache are left out of the scores and latency.

How often is the benchmark updated?

A new sample of about 2,500 never-tested pages is drawn every Friday at 00:15 UTC and sent to all four providers. Its scores fill in as collection progresses.

What does a success mean?

Each sample states its scoring rule. Under page access, a page succeeds when actual page data loaded rather than a block, login screen, error, or empty shell. Under useful content, the response must also contain substantive content from the requested page, a stricter test, so compare scores only between samples that use the same rule.

Can I reproduce the results?

Yes. Every page-level record is downloadable, and the collector, judge prompt, and request settings are open source.

14Citation

Cite the benchmark

If you use TRACE in your work, please cite:

Our approach is inspired by NEEDLE: A Live Open-Source Search Benchmark for AI Agents (2026), by Andrey Styskin, Matthias Petri, and Ilya Gusev. Its fresh-query methodology and transparent comparisons informed this benchmark, which evaluates scraping rather than search.

trace.bib
@misc{trace2026,  author = {Bakour, Yahia and Ryaboy, Michael},  title  = {{TRACE}: A Live Open-Source Scrape Benchmark for {AI} Agents},  year   = {2026},  url    = {https://github.com/context-dot-dev/trace-benchmark},  note   = {Contact: yahia@context.dev,michael@context.dev}}