This repository contains benchmark results comparing major web scraping APIs across protected targets under standardized test conditions.
Companion code for the Zenrows article Best Web Scraping APIs in 2026 (Benchmarked).
- Zenrows
- Zyte
- ScraperAPI
- Scrapfly
- Zim
- Glassdoor
- Idealista
- Indeed
Each provider executed:
- 100 requests per target
- Standard protected-target request configuration
- No custom header tuning
- No manual proxy rotation adjustments
- Standard extraction workflow
The benchmark focused on two primary metrics:
- Success rate
- Average response time
| Provider | Target | Success Rate | Avg Response Time (ms) | Total Requests |
|---|---|---|---|---|
| Zenrows | Zim | 99% | 10013.71 | 100 |
| Zenrows | Glassdoor | 100% | 8849.47 | 100 |
| Zenrows | Idealista | 98% | 10530.13 | 100 |
| Zenrows | Indeed | 99% | 7054.59 | 100 |
| Zyte | Zim | 99% | 15463.92 | 100 |
| Zyte | Glassdoor | 99% | 6929.69 | 100 |
| Zyte | Idealista | 92% | 14632.84 | 100 |
| Zyte | Indeed | 8% | 20144.59 | 100 |
| ScraperAPI | Zim | 88% | 45897.43 | 100 |
| ScraperAPI | Glassdoor | 25% | 53518.78 | 100 |
| ScraperAPI | Idealista | 0% | 10709.81 | 100 |
| ScraperAPI | Indeed | 83% | 33676.04 | 100 |
| Scrapfly | Zim | 97% | 11949.19 | 100 |
| Scrapfly | Glassdoor | 98% | 8691.70 | 100 |
| Scrapfly | Idealista | 99% | 11059.38 | 100 |
| Scrapfly | Indeed | 100% | 11877.39 | 100 |
The following values represent the average success rate across all four protected targets under repeated-request execution.
| Provider | Average Success Rate |
|---|---|
| Zenrows | 99.00% |
| Scrapfly | 98.50% |
| Zyte | 74.75% |
| ScraperAPI | 49.00% |
This metric reflects repeated-request consistency across multiple protected domains rather than performance on any individual target.
The following values reflect approximate dashboard telemetry observed during benchmark execution. Values were normalized against 1,000 protected-target requests.
| Provider | Benchmark Consumption Calculation | Approximate Protected-Target Cost |
|---|---|---|
| Zenrows | ~$2.74 across 400 requests → (2.74 ÷ 400) × 1000 | ~$6.85 / 1K requests |
| Zyte | ~$1.59 across 400 requests → (1.59 ÷ 400) × 1000 | ~$3.97 / 1K requests |
| ScraperAPI | ~3055 credits across 400 requests → (3055 ÷ 400) × 1000 | ~7,600 credits / 1K requests ($3.72 / 1K requests) |
| Scrapfly | ~16,160 credits across 400 requests → (16,160 ÷ 400) × 1000 | ~40,400 credits / 1K requests ($12.1 / 1K requests) |
These values reflect protected-target configurations under repeated-request execution and may vary depending on retries, rendering behavior, proxy escalation, and browser-level anti-bot handling.
Zenrows delivered the strongest overall performance across all targets. It maintained consistently high success rates while also keeping response times relatively low.
Key results:
- 100% on Glassdoor
- 99% on Indeed
- 99% on Zim
- 98% on Idealista
Zenrows achieved the strongest overall balance between reliability and latency consistency. It also achieved the highest overall success rate in the benchmark.
Zyte performed well on Zim and Glassdoor but struggled significantly on Indeed.
Key observations:
- 99% on Zim
- 99% on Glassdoor
- 92% on Idealista
- 8% on Indeed
Response times were also generally higher compared to other providers.
ScraperAPI produced mixed results depending on the target.
Key observations:
- 88% on Zim
- 83% on Indeed
- 25% on Glassdoor
- 0% on Idealista
The provider also experienced major latency increases under failure-heavy conditions.
Scrapfly demonstrated strong consistency across all protected targets.
Key observations:
- 100% on Indeed
- 99% on Idealista
- 98% on Glassdoor
- 97% on Zim
Success-rate stability remained strong across all four targets, though response times were higher on average than Zenrows.
- Zenrows delivered the strongest overall success-rate and the fastest average response time in the benchmark.
- Scrapfly achieved the second strongest overall success-rate consistency.
- Zyte showed uneven performance depending on the target.
- ScraperAPI performed well on Zim but struggled heavily against stronger anti-bot protections.
These results reflect:
- Standard protected-target request configurations
- No manual optimization
- No custom fingerprint tuning or manual anti-bot optimization
Real-world production performance may improve with:
- Custom fingerprinting
- Session persistence
- Adaptive retry logic
- Proxy tuning
- Browser-level optimization
git clone https://github.com/ZenRows/web-scraping-api-benchmark.git
cd web-scraping-api-benchmarkpip install -r requirements.txtCopy .env.example to .env and add your provider credentials:
ZENROWS_API_KEY=your_zenrows_api_key
ZYTE_API_KEY=your_zyte_api_key
SCRAPERAPI_API_KEY=your_scraperapi_api_key
SCRAPFLY_API_KEY=your_scrapfly_api_keypython3 src/benchmark.pyFor long-running benchmark sessions on macOS, you can prevent sleep interruptions with:
caffeinate -i python3 src/benchmark.pyRaw and summarised results are committed under results/:
results/
├── results-100req.csv # one row per request
└── summary-100req.csv # aggregated success rate and latency per provider/target