On this page


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.


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.
| API | Usable | What stood out |
|---|---|---|
| Firecrawl | 49% | Refused LinkedIn, Reddit and Facebook on our account |
| Spider | 58% | Cheap on normal sites, came back empty or walled on Reddit, Facebook and review sites |
| Exa | 58% | Fastest, refused all three social sites |
| ZenRows | 73% | 80% on review sites, every local directory page |
| Parallel | 84% | Every social page, but 30% on B2B data sites and 40% on hiring and funding news |
| context.dev | 85% | 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.


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.
| Source | Send it to | Why |
|---|---|---|
| LinkedIn companies, profiles, jobs | Any API but Firecrawl | All five got every LinkedIn page |
| Parallel or context.dev | 100% and 90% | |
| Facebook pages | Parallel | 100%, context.dev next at 70% |
| Review sites | ZenRows or Parallel | Both 80% |
| Company websites at volume | Spider or ZenRows | About $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.


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.


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.
| API | Plan | Per 1,000 usable lead-gen pages | Per 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 |
| Spider | Pay as you go | $1.57 | $0.65 |
| Spider | $2,000 top-up | $1.40 | $0.58 |
| Exa | Pay as you go | $1.02 | $1.09 |
| Parallel | Pay 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%.


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 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.

