Independent Benchmark: Scraping APIs, Head-to-Head
Last updated: October 23, 2026 · Data snapshot: October 23, 2026 (trailing 30-day window) · Weekly refresh
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).
| Provider | Success rate | Median latency | p95 | Cloudflare-target median | Est. $/1k successful | Claimed entry pricing |
|---|---|---|---|---|---|---|
| Scrape.do | 100% | 1864.5ms | 3736ms | 3487ms (3/3) | $0.11 | 1,000 free successful calls; Hobby $29/mo ≈ $0.11/1k; Business $249/mo ≈ $0.07/1k |
| ScraperAPI | 100% | 2042.5ms | 6710ms | 3879ms (3/3) | $0.49 | $49/mo for ~100k credits (claimed) |
Key findings
- Across 36 validator-checked requests on the same targets (including a Cloudflare-protected page), Scrape.do posted the lowest median latency at 1864.5ms.
- On our honest cost metric — claimed list price per 1k ÷ measured success rate — Scrape.do is cheapest at $0.11 per 1k successful responses. Pricing claims vary wildly in structure (credits, tiers, GB); the per-successful-request view is the only one we consider comparable.
- On the Cloudflare-protected target specifically, Scrape.do resolved in a median of 3487ms vs 3879ms for ScraperAPI — and all tested providers fetched the protected page successfully in every attempt.
- Caveats we won't hide: single day, tiny volume (18 requests per provider), one run origin, and claimed pricing parsed from vendor pages. Treat this as a spot-check of advertised capability, not a load test — we re-run weekly and trends will earn their own page.
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.