Home / Reports / Independent Benchmark: Scraping APIs Head-to-Head

Independent Benchmark: Scraping APIs, Head-to-Head

Last updated: October 23, 2026 · Data snapshot: October 23, 2026 (trailing 30-day window) · Weekly refresh

2providers independently tested (2026-10-23)
36validator-checked requests total
1864.5mslowest median latency (Scrape.do)
$0.11lowest est. $/1k successful (Scrape.do)

Table 1 — Head-to-head (same targets, same day, same run origin)

Success = HTTP 200 AND validator substring present. Est. $/1k successful = claimed list price per 1k ÷ measured success rate. Cloudflare-target column: median latency on the protected page (success count in parentheses).

ProviderSuccess rateMedian latencyp95Cloudflare-target medianEst. $/1k successfulClaimed entry pricing
Scrape.do100%1864.5ms3736ms3487ms (3/3)$0.111,000 free successful calls; Hobby $29/mo ≈ $0.11/1k; Business $249/mo ≈ $0.07/1k
ScraperAPI100%2042.5ms6710ms3879ms (3/3)$0.49$49/mo for ~100k credits (claimed)

Key findings

How we measure

Cohort: Actors scanned from the public Apify Store API (popularity-sorted top 4,788, 3,492 scraping-related matches) on 2026-10-23. For each Actor we take publicActorRunStats30Days: TOTAL, SUCCEEDED, FAILED, ABORTED, TIMED-OUT over the trailing 30 days. Failure rate = FAILED / TOTAL — a run the user cancelled (ABORTED) or that exceeded its timeout budget (TIMED-OUT) is not counted as a failure; both are small relative to TOTAL in this cohort.

Bench harness: fixed 4-target set (static / static / regular site / Cloudflare-protected demo page), 18 requests per provider per run, serial with 1s gaps, run from our network (the no-key baseline in the raw data reflects local conditions; commercial APIs fetch from their own infrastructure). Success requires the validator substring — a 200 with a block page counts as a failure. Raw JSON: site snapshot; harness code ships with the repo.

Failures have many causes (bad input, target changes, platform incidents) — a high failure rate is a signal, not a verdict. Display threshold for tables is ~500 runs/30d; ranking threshold is 1,000 runs/30d — entries between the two appear in tables but not in ranked statements. License: CC BY 4.0 — cite TopScraper with the data snapshot date.

Conclusion

Claimed pricing pages are marketing; this table is a measurement — small, but repeatable, and we repeat it weekly. When a provider's dashboard shows 100% everywhere, the differences that matter move to latency and cost per successful request: at 2 providers we can already rank both.

Next: more providers enter the harness as we register them; per-provider detail pages carry the full per-target breakdowns and the methodology note.