Scripts and raw data from an original benchmark comparing Zenrows and Firecrawl's /scrape endpoint across 7 target URLs, conducted in May 2026.
Companion code for the Zenrows article Best Firecrawl Alternative for Anti-Bot Bypass.
| Target | Type | URL |
|---|---|---|
| Amazon product page | Protected | https://www.amazon.com/ref=nav_logo |
| Glassdoor company page | Protected | https://www.glassdoor.com/Overview/Working-at-Google-EI_IE9079.11,17.htm |
| LinkedIn public profile | Protected | https://www.linkedin.com/in/satyanadella/ |
| Google SERP results page | Protected | https://www.google.com/search?q=web+scraping+api |
| IKEA (Cloudflare-protected e-commerce) | Protected | https://www.ikea.com/ |
| Zillow real estate listing | Unprotected | https://www.zillow.com/homes/for_sale/ |
| BBC news article | Unprotected | https://www.bbc.com/news/technology |
- 100 requests per target per platform
- Zenrows configured with
mode=autoon all requests - Firecrawl using its
/scrapeendpoint - Recorded per request: HTTP status code, response time (ms), and page title detection
- Bulk asynchronous job workflows
- Session persistence across multi-step logged-in workflows
- Firecrawl's crawl and map endpoints (only
/scrapeis exercised)
- Python 3.10+
- A Zenrows API key
- A Firecrawl API key
git clone https://github.com/ZenRows/zenrows-vs-firecrawl-benchmark.git
cd zenrows-vs-firecrawl-benchmarkpython -m venv .venv
source .venv/bin/activate # macOS/Linux
.venv\Scripts\activate # Windowspip install -r requirements.txtBoth scripts read their credentials from the environment:
export ZENROWS_API_KEY=your_zenrows_api_key
export FIRECRAWL_API_KEY=your_firecrawl_api_keyEach platform is run by its own script:
python zenrows.py # writes zenrows_benchmark_results.csv
python firecrawl.py # writes firecrawl_benchmark_results.csvEach run issues 100 requests per target, so expect it to take a while.
test.py is a small standalone script for confirming your Firecrawl credentials work before starting a full run.
Both scripts write a CSV to the repository root recording, per request: target name, URL, HTTP status code, response time, whether a page title was detected, and success status.
The data/ folder holds the aggregated spreadsheet used to produce the figures in the article.
.
├── zenrows.py # Zenrows benchmark run
├── firecrawl.py # Firecrawl /scrape benchmark run
├── test.py # quick Firecrawl credential check
├── data/ # aggregated results used in the article
├── requirements.txt
└── README.md