Benchmark

We ran six scraping APIs on 72 lead-gen pages and two got over 80%

6 min read

Six scraping APIs on 72 lead-gen pages: context.dev 85% usable, Parallel 84%, ZenRows 73%, Spider 58%, Exa 58%, Firecrawl 49%
On this page
context.dev 85% and Parallel 84% usable on lead-gen pages, ZenRows 73%, Spider and Exa 58%, Firecrawl 49%, with cost per 1,000 usable pagescontext.dev 85% and Parallel 84% usable on lead-gen pages, ZenRows 73%, Spider and Exa 58%, Firecrawl 49%, with cost per 1,000 usable pages

Two panels. On the left, the share of 144 lead-gen page attempts that came back usable for each API: context.dev 85%, Parallel 84%, ZenRows 73%, Spider 58%, Exa 58%, Firecrawl 49%. On the right, the list-price cost per 1,000 usable pages on each API's mid plan, from Exa at $1.02 to Firecrawl at $4.32.

This week we pointed six scraping APIs at the same 72 pages and ran every page twice. LinkedIn company pages, Reddit threads, Facebook pages, G2 and Trustpilot reviews, Google Maps listings, Crunchbase profiles, funding news, job posts. The pages outbound data comes from.

The six were context.dev, Firecrawl, Spider, ZenRows, Exa and Parallel. Firecrawl's numbers are from our run on Oct 22, two weeks earlier, because we couldn't rerun it this week. Every other API ran on Nov 5.

We also ran all six on scrape-evals, Firecrawl's open benchmark of ordinary web pages with a human-marked answer for each one. It's the closest thing the industry has to a standard scraping test. It told us a lot less than the 72 pages did.

The number on the pricing page is the wrong number

Exa looks like the obvious pick on paper. It was the fastest API we tested, 0.6 seconds for a typical lead-gen page, and the cheapest at list price, $1.02 per 1,000 pages that came back usable.

Then you look at what it refused. 40 of its 144 attempts came back with the same answer: "SOURCE_NOT_AVAILABLE." Every Reddit page, every X profile, every Facebook page. Not a failed scrape, a flat no. Exa ended at 58% usable.

Parallel cost about the same, $1.10 per 1,000 usable pages, and got 84%. It was the only API of the six that returned every Reddit thread, X profile and Facebook page we gave it.

Reddit, X and Facebook: Parallel 100% on all three, context.dev 90%, 100% and 70%, Exa refused all threeReddit, X and Facebook: Parallel 100% on all three, context.dev 90%, 100% and 70%, Exa refused all three

A grid of six APIs against Reddit, X and Facebook. Each cell is the share of pages that came back with the real content, or no where the API refused the site. Parallel is the only row at 100% on all three; Exa refused all three.

Same price, and one of them gets you the social pages while the other one won't touch them. If your list building depends on Reddit or Facebook signals, that's the whole decision.

No API won every source

A page counted as usable when it came back with the real content: the company name, the post title or the job title we expected, at least 50 words, and no login or bot wall. A login wall comes back as a normal page, so a status code alone would have scored it as a win.

APIUsableWhat stood out
Firecrawl49%Refused LinkedIn, Reddit and Facebook on our account
Spider58%Cheap on normal sites, came back empty or walled on Reddit, Facebook and review sites
Exa58%Fastest, refused all three social sites
ZenRows73%80% on review sites, every local directory page
Parallel84%Every social page, but 30% on B2B data sites and 40% on hiring and funding news
context.dev85%Never refused a site, top score on the standard benchmark too

context.dev and Parallel are one point apart overall and they got there in different ways. Parallel got 100% on Reddit and 40% on funding news. context.dev got 90% on Reddit and 80% on funding news.

Usable share for each of 15 lead-gen sources across all six APIsUsable share for each of 15 lead-gen sources across all six APIs

A heat map of 15 lead-gen sources against six APIs, with the usable share in each cell and the overall total in the last row. Darker cells are higher. LinkedIn rows are full for every API but Firecrawl; B2B data sites are the weakest row for everyone.

The API that scores best overall still loses on specific sources, so the right setup routes each source to the scraper that actually returns it.

SourceSend it toWhy
LinkedIn companies, profiles, jobsAny API but FirecrawlAll five got every LinkedIn page
RedditParallel or context.dev100% and 90%
Facebook pagesParallel100%, context.dev next at 70%
Review sitesZenRows or ParallelBoth 80%
Company websites at volumeSpider or ZenRowsAbout $0.60 per 1,000 good pages

How each one failed

How an API fails matters as much as how often. A refusal comes back as a clear error, so you can catch it and send the page somewhere else. A bot wall looks like a real page, so it gets into your data unless you check for it.

Failed attempts out of 144 per API, split into refused, bot or login wall, too little content, error or timeout, and dead pageFailed attempts out of 144 per API, split into refused, bot or login wall, too little content, error or timeout, and dead page

One stacked bar per API, sorted by total failures out of 144 attempts, split into refused by the tool, bot or login wall, too little content, error or timeout, and dead page. Refusals make up most of Firecrawl's and Exa's failures; walls and thin pages make up most of Spider's.

Firecrawl's 73 failures were 60 refusals. On LinkedIn company pages and profiles it answered "THIRD_PARTY_DATA_ENRICHMENT_NOT_ENABLED", which is an account setting, so an account with that turned on may score differently. Exa's 61 were 40 refusals. Spider never refused anything, but 32 of its failures were pages behind a login or bot wall and 19 came back nearly empty. Parallel never refused a site and never hit a wall. Its 23 misses were short pages and timeouts, mostly on B2B data sites, hiring and funding news.

Cost depends on which plan you're on

We priced every API on every published plan, because a per-page price only means something once you know which plan it came from. The cost below is what each API actually charged in this run, divided by the pages that came back usable.

Cost per 1,000 usable lead-gen pages on the smallest and biggest plan for each APICost per 1,000 usable lead-gen pages on the smallest and biggest plan for each API

For each API, the cost per 1,000 usable lead-gen pages on its smallest and biggest published plan. context.dev goes from $2.36 to $0.45, ZenRows from $4.97 to $0.94, Firecrawl from $16.59 to $3.27, Spider from $1.57 to $1.40. Exa and Parallel have one pay-as-you-go price.

context.dev on its $20 Developer plan costs $2.36 per 1,000 usable lead-gen pages. On the $950 Scale plan the same pages cost $0.45. That's about 5x for the same API doing the same work.

ZenRows is $4.97 per 1,000 on its $19 plan and $0.94 on its $999 plan.

Firecrawl's $19 Hobby plan works out to $16.59 per 1,000 usable lead-gen pages. A lot of that is X: Firecrawl charges 30 credits for an X page where a normal page costs 1.

ZenRows has the opposite problem on hard pages. On an ordinary company site it charges 1 credit and it's the cheapest API we tested, $0.59 per 1,000 good pages on its $99 plan. On a lead-gen page it usually needs its browser and premium proxies, which is 25 credits, and the average usable lead-gen page cost about 12 credits. One thing that helps it is that ZenRows only bills the attempt that worked, so refused pages are free.

Exa and Parallel are flat pay as you go, $1 per 1,000 pages, so their cost per good page only moves with how many pages fail.

APIPlanPer 1,000 usable lead-gen pagesPer 1,000 good standard pages
context.dev$20 Developer$2.36$2.56
context.dev$90 Pro$1.06$1.15
context.dev$950 Scale$0.45$0.49
Firecrawl$19 Hobby$16.59$5.70
Firecrawl$99 Standard$4.32$1.49
Firecrawl$399 Growth$3.48$1.20
Firecrawl$749 Scale$3.27$1.12
ZenRows$19 Build$4.97$1.25
ZenRows$69 Launch$3.25$0.82
ZenRows$99 Launch$2.33$0.59
ZenRows$199 Growth$1.95$0.49
ZenRows$549 Scale$1.29$0.33
ZenRows$999 Scale$0.94$0.24
SpiderPay as you go$1.57$0.65
Spider$2,000 top-up$1.40$0.58
ExaPay as you go$1.02$1.09
ParallelPay as you go$1.10$1.15

If you're pulling a few thousand pages a month, the cheapest plan of the API that actually returns your source is the right answer. Past a few hundred thousand pages, context.dev's Scale plan and ZenRows' top plan are the cheapest per usable page we found.

The standard benchmark ranked them differently

On the 200 scrape-evals pages context.dev scraped 78% and scored highest on content quality. Spider got 75%, Firecrawl 73%, ZenRows 72.5%, Parallel 69.5% and Exa 63.5%.

Standard benchmark: pages scraped and content quality for all six APIsStandard benchmark: pages scraped and content quality for all six APIs

Two panels from the 200-page scrape-evals benchmark: the share of pages that returned real content, and the content quality score. context.dev leads both. Parallel is 5th on pages scraped at 69.5%.

Parallel is 5th of 6 on ordinary pages by that measure and 2nd of 6 on the pages lead-gen depends on. If we'd picked off the public benchmark we'd have skipped the one API that gets every Facebook page.

Fast can mean old

Exa answered a lot of company homepages in under a second, and Parallel returned LinkedIn profiles in about half a second as neat fields: name, headline, job history. That's too fast for a live page load.

Median seconds per page that worked, on lead-gen pages and standard pagesMedian seconds per page that worked, on lead-gen pages and standard pages

Median seconds per page that worked, on the lead-gen set and on the standard set. Exa is fastest on both, 0.6 s and 1.8 s. ZenRows is slowest on lead-gen pages at 6.4 s, Firecrawl slowest on standard pages at 5.4 s.

Both APIs keep their own copy of the web. We set caching as short as each one allows, and some answers still came from that copy.

For most lead-gen work that's fine, a LinkedIn headline from last week is still useful. For anything that changes by the hour, like a job post that just closed or a funding round announced this morning, check the date before you trust it.

What you should actually test

Take 50 pages from the sources your campaigns really use. Not a generic list, your list, the LinkedIn pages, review sites and directories your data comes from today.

Run every API you're considering on those 50, twice. Count a page as good only if it has the content you need.

Then price it on the plan you'd actually buy. The gap between $2.36 and $0.45 per 1,000 pages for the same API is bigger than the gap between context.dev and four of the other five APIs on their mid plans.

We'll keep adding APIs to this same test as new ones come up, same 72 pages and same rules, so every new number lines up against the old ones.

Ready to put these ideas to work? Explore Legion and build your marketing agents.

Bring the GTM job you need done. Build the run you can check.

Get one useful GTM email a week. Then join the community on Skool.