ZenRows vs ScrapingBee in 2026
One SpecStream key answers both calls.
On Nov 10, 2026, ZenRows starts at $19 a month for 45,000 credits and ScrapingBee at $19 for 75,000. Both charge 5 credits for a JavaScript-rendered page, and neither keeps unused plan credits past the month.
SpecStream answers both calls with one key. ZenRows code points at https://api.specstream.ai/zenrows/v1/, ScrapingBee code at https://api.specstream.ai/scrapingbee/api/v1/, and each gets its own reply back. Every page costs $0.80 per 1,000.
SpecStream is the live web data engine. Its Extract API scores 0.908 F1 on WCXB, and its Search API 97.9 F-score on all 1,000 SimpleQA Verified questions and 64.0 item F1 on WideSearch, shown on the benchmarks page.
New accounts get $10 of credit, no card. It covers 12,500 pages.
SpecStream, ZenRows and ScrapingBee side by side
| SpecStream | ZenRows | ScrapingBee | |
|---|---|---|---|
| Your code | Runs as written. ZenRows calls go to https://api.specstream.ai/zenrows/v1/ with the key as apikey. ScrapingBee calls go to https://api.specstream.ai/scrapingbee/api/v1/ with the key as the Bearer token. One key answers both | GET https://api.zenrows.com/v1/ with your key in the apikey query parameter | GET https://app.scrapingbee.com/api/v1 with Authorization: Bearer. Passing the key as api_key is deprecated |
| What comes back | Each API's own reply. ZenRows: HTML, markdown or text with response_type, JSON with json_response, links and emails with outputs. ScrapingBee: HTML, markdown or text, and its JSON with body, initial-status-code and resolved-url | The page's HTML, or the same page as Markdown, plain text or PDF. An extract mode returns JSON from the page | The page's HTML. Options return Markdown, plain text, a screenshot, or JSON from the extraction rules you write |
| Price per page | $0.80 per 1,000 pages, the same for every page ($0.0008) | 1 credit for a standard page, 5 with JavaScript rendering and 25 for a protected page, on every plan | 1 to 75 credits: 5 with JavaScript rendering, which is the default, 10 or 25 with premium proxies, 75 with the stealth proxy |
| What $19 buys | 23,750 pages from your balance, with no plan to buy | The $19 monthly plan: 45,000 credits, which is 9,000 JavaScript-rendered requests | The Hobby plan at $19 a month: 75,000 credits, which is 15,000 calls with JavaScript rendering |
| Credit you do not use | Never expires. Credit you buy stays on the account | Plan credits expire at every renewal. Top-up credits roll over once, then expire | Valid for one month. Credits don't roll over |
| What is not charged | A page with no text. A busy call, which gets 429 with Retry-After | Failed and retried requests. A 404 or 410 counts as successful and is billed | A 500. A 404 or 410 from the target page is billed |
| Free to start | $10 of credit, no card: 12,500 pages | Free plan: 5,000 credits a month | 1,000 free API credits, no credit card required |
| Search | GET /v1/web-search on the same key: $5 per 1,000 searches of up to 10 results, 97.9 F-score on all 1,000 SimpleQA Verified questions | Fetches the URL you send. A Fetch request can take up to 3 minutes | A Google API that returns search results as JSON, and a Fast Search API, in every plan |
| A whole site | POST /v1/map returns a site's links for one page read. POST /v1/crawl charges each page with text as one page read | A crawl takes 1 to 25 credits per page, depending on the site | One URL a call. Plans allow 25 to 900 requests at the same time |
| Every match as rows | Deep Search: a request in plain words returns every match on the live web as rows, at 5¢, 15¢ or $1 a row, with the most a run can cost quoted before it starts. Saved requests rerun hourly to yearly with each row labeled changed, unchanged or no longer matching | JSON from one page you name, through the extract mode | JSON from the CSS, XPath or AI rules you write, one URL a call. AI extraction adds 5 credits |
| Agents and MCP | MCP server at https://api.specstream.ai/mcp, REST API, Python and TypeScript SDKs and a CLI | An API called with your key. Agents buy pay as you go credits for $0.50 per 1,000, with a minimum of 10,000 credits | API, CLI and a remote MCP server |
Why ZenRows and ScrapingBee users move to SpecStream
Both calls answered on one key
You do not have to pick one API and rewrite the other. Each call keeps its path, its parameters and its parser. The address changes, and the key.
# ZenRows: before
curl "https://api.zenrows.com/v1/?apikey=$ZENROWS_KEY&url=https://example.com"
# ZenRows: after
curl "https://api.specstream.ai/zenrows/v1/?apikey=$SPECSTREAM_KEY&url=https://example.com"
# ScrapingBee: before
curl -H "Authorization: Bearer $SCRAPINGBEE_KEY" "https://app.scrapingbee.com/api/v1/?url=https://example.com"
# ScrapingBee: after
curl -H "Authorization: Bearer $SPECSTREAM_KEY" "https://api.specstream.ai/scrapingbee/api/v1/?url=https://example.com"The parameter and field tables are in the ZenRows guide and the ScrapingBee guide.
What stays the same
On the ZenRows route, url, response_type, json_response and outputs keep their meaning, and errors come back in ZenRows' codes: 404 RESP002, 422 RESP001, 400 REQS004, 401 AUTH002. On the ScrapingBee route, url, return_page_markdown, return_page_text, json_response, add_html and transparent_status_code keep theirs, and the key also works as api_key.
Not returned: ZenRows' X-Request-Id, X-Request-Cost, Zr-Final-Url and Concurrency-* headers, xhr, and headings and images from outputs. ScrapingBee's Spb-* headers, and in its JSON headers, cost, cookies, xhr, screenshot, metadata, iframes, evaluate_results and js_scenario_report.
One price for every page, from credit that does not expire
ZenRows charges 1, 5 or 25 credits a page, and ScrapingBee 1 to 75, so the same plan reads a different number of pages each month. SpecStream charges $0.80 per 1,000 pages whatever the page needs: $19 reads 23,750 pages. There is no monthly plan, credit you buy never expires, and a busy call or a page with no text costs nothing.
Scores published on the official sets
The Extract API scores 0.908 F1 on WCXB. The Search API on the same key scores 97.9 F-score on all 1,000 official SimpleQA Verified questions, 978 of them correct, and 64.0 item F1 and 43.4 row F1 on all 200 official WideSearch tasks. Every score and its method is on the benchmarks page.
Zero retention on any key
Set zero_retention when you create a key. A call made with that key keeps no request text and no answer after the reply.
curl -X POST https://api.specstream.ai/v1/account/keys \
-H "Authorization: Bearer $SPECSTREAM_API_KEY" -H "Content-Type: application/json" \
-d '{"name": "production", "scopes": ["account:read", "finds:spend"], "spend_cap_cents": 500000, "zero_retention": true}'Search, sites and rows on the same key
A scraper reads the pages you already know. On SpecStream the same key also searches the live web at $5 per 1,000 searches, maps and crawls a site at the page price, reads up to 20 pages a call with the Extract API, and runs Deep Search, which returns every match for a request as rows. Saved requests rerun hourly to yearly, and new rows arrive in Slack, a sheet, a CRM or a signed webhook.
Other ZenRows and ScrapingBee alternatives
ScraperAPI
A page API sold by monthly plan. Hobby costs $49 a month for 100,000 credits, and the credit balance resets when the subscription renews. SpecStream answers ScraperAPI's call at https://api.specstream.ai/scraperapi at $0.80 per 1,000 pages.
Scrapfly
A scrape API billed in credits. Discovery costs $30 a month for 200,000 credits, and JavaScript rendering adds 5 credits a request. SpecStream answers Scrapfly's call at https://api.specstream.ai/scrapfly/scrape at one price per page.
Scrape.do
A page API with 1,000 free credits and a Hobby plan at $29 a month for 250,000 credits. SpecStream answers Scrape.do's call at https://api.specstream.ai/scrapedo, and its credit never expires.
Firecrawl
Scrape, crawl and search endpoints billed in credits: 1 credit a page and 2 credits per 10 search results, with paid plans from $19 a month for 5,000 credits. SpecStream answers Firecrawl's v2 calls at https://api.specstream.ai/firecrawl, with search at $5 per 1,000 and pages at $0.80 per 1,000.
How SpecStream scores
The same numbers as the benchmarks page, from the official tasks and scorers.
How to move ZenRows and ScrapingBee code to SpecStream
1. Create a key under Agents & API in the workspace. A new account gets $10 of credit, no card, which covers 12,500 pages.
2. Point ZenRows code at https://api.specstream.ai/zenrows/v1/ and send the SpecStream key as apikey. In the zenrows Python SDK 1.13.0, set base_url to that address or ZENROWS_SCRAPER_BASE_URL.
import requests
reply = requests.get(
"https://api.specstream.ai/zenrows/v1/", # was https://api.zenrows.com/v1/
params={"apikey": SPECSTREAM_KEY, "url": "https://en.wikipedia.org/wiki/Web_scraping", "response_type": "markdown"},
timeout=60,
)
print(reply.text[:500])3. Point ScrapingBee code at https://api.specstream.ai/scrapingbee/api/v1/ and send the SpecStream key as the Bearer token. In the scrapingbee Python SDK 2.2.0, set client.HTML_API_URL to that address and html_api() runs unchanged.
const url = new URL("https://api.specstream.ai/scrapingbee/api/v1/");
url.search = new URLSearchParams({ url: "https://en.wikipedia.org/wiki/Web_scraping", json_response: "true" });
const reply = await fetch(url, { headers: { Authorization: `Bearer ${process.env.SPECSTREAM_KEY}` } });
const data = await reply.json();
console.log(data["initial-status-code"], data["resolved-url"], data.body.length);4. Read 429 as a call to send again after Retry-After. It is not charged. Both routes spend from the same balance, inside the spending limit you set on the key.
Frequently asked questions
Something we didn't answer? Talk to a human
Is ZenRows better than ScrapingBee?
ZenRows vs ScrapingBee pricing: what does each cost?
Can I use both ZenRows and ScrapingBee code?
https://api.specstream.ai/zenrows/v1/ and ScrapingBee calls to https://api.specstream.ai/scrapingbee/api/v1/, each answered in its own form and billed from one balance at $0.0008 a page.Do the ZenRows and ScrapingBee SDKs work with SpecStream?
zenrows 1.13.0 works with base_url set to the SpecStream address, and scrapingbee 2.2.0 works with client.HTML_API_URL set to it.Do ZenRows and ScrapingBee credits roll over?
What does SpecStream not charge for?
429 with Retry-After. ScrapingBee bills a 404 or 410 from the target page, and ZenRows counts both as successful.Is there a free trial?
Sources
SpecStream wrote this page. Each rival figure comes from that company's own page.
- ZenRows pricing documentationdocs.zenrows.com/first-steps/pricing.md, read Nov 10, 2026
- ZenRows pricingzenrows.com/pricing, read Nov 10, 2026
- ZenRows authenticationdocs.zenrows.com/authentication.md, read Nov 10, 2026
- ZenRows pricing systemdocs.zenrows.com/first-steps/faq/understanding-zenRows-pricing-system, read Nov 10, 2026
- ZenRows Universal Scraper API referencedocs.zenrows.com/universal-scraper-api/api-reference, read Nov 10, 2026
- ScrapingBee pricingscrapingbee.com/pricing/, read Nov 10, 2026
- ScrapingBee documentationscrapingbee.com/documentation/, read Nov 10, 2026
- ScraperAPI pricingscraperapi.com/pricing/, read Nov 10, 2026
- Scrapfly pricingscrapfly.io/pricing, read Nov 10, 2026
- Scrapfly billingscrapfly.io/docs/scrape-api/billing, read Nov 10, 2026
- Scrape.do pricingscrape.do/pricing/, read Nov 10, 2026
- Firecrawl pricingfirecrawl.dev/pricing, read Nov 10, 2026
- SpecStream benchmarksspecstream.ai/benchmarks, read Nov 10, 2026
- SpecStream pricingspecstream.ai/pricing, read Nov 10, 2026
- SpecStream for agentsspecstream.ai/agents.md, read Nov 10, 2026




