This repository contains the scripts and raw results from an original benchmark comparing Zenrows and ScraperAPI across 8 target URLs at two concurrency levels, conducted in June 2026.
Companion code for the Zenrows article Best ScraperAPI Alternative for Anti-Bot Bypass.
| Target | Type |
|---|---|
| Amazon product page | Protected |
| Glassdoor company page | Protected |
| Idealista property listing | Protected |
| LinkedIn company profile | Protected |
| Google SERP results page | Protected |
| Footlocker category page | Protected |
| Hacker News front page | Unprotected |
| Python documentation index | Unprotected |
- 200 requests per target per platform
- Two concurrency levels: 2 req/s (low load) and 10 req/s (high load)
- Zenrows configured with
mode=autoon all requests - ScraperAPI using default routing
- Recorded per request: HTTP status code, response time (ms), and page title detection
- Bulk asynchronous job workflows
- No-code scheduling via ScraperAPI DataPipeline
- Session persistence across multi-step logged-in workflows
- Python 3.10+
- API keys for Zenrows and ScraperAPI
1. Clone the repository
git clone https://github.com/ZenRows/zenrows-vs-scraperapi-benchmark.git
cd zenrows-vs-scraperapi-benchmark2. Install dependencies
pip install -r requirements.txt3. Configure API keys
Create a .env file in the project root:
ZENROWS_API_KEY=your_zenrows_key
SCRAPERAPI_KEY=your_scraperapi_key4. Run the benchmark
python scripts/benchmark.pyThe script performs a preflight check on both API keys before starting and resumes automatically from where it left off if interrupted.
Results are saved to the results/ folder as CSV files:
results/
├── zenrows/
│ ├── low_concurrency.csv
│ └── high_concurrency.csv
└── scraperapi/
├── low_concurrency.csv
└── high_concurrency.csv
Each CSV contains the following columns:
| Column | Description |
|---|---|
target_url |
The scraped URL |
platform |
zenrows or scraperapi |
status_code |
HTTP status code returned |
response_time_ms |
End-to-end response time in milliseconds |
has_title |
Whether a <title> tag was detected in the response |
error_type |
API error code if the request failed |
error_msg |
Error detail message if the request failed |
timestamp |
UTC timestamp of the request |