<!-- twin of https://specstream.ai/compare/zenrows-vs-scrapingbee -->
# ZenRows vs ScrapingBee in 2026: one SpecStream key answers both calls

Compared on Nov 10, 2026. The page: https://specstream.ai/compare/zenrows-vs-scrapingbee

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](https://specstream.ai/benchmarks?utm_source=alternatives&utm_campaign=zenrows-vs-scrapingbee) page.

[Get an API key](https://specstream.ai/signup?src=alternatives-zenrows-vs-scrapingbee&utm_source=alternatives-md&utm_campaign=zenrows-vs-scrapingbee&returnTo=%2Fworkspace%2Fagents%3Ftab%3Dkeys) 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](https://specstream.ai/deep-search?utm_source=alternatives&utm_campaign=zenrows-vs-scrapingbee): 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](https://specstream.ai/migrate/zenrows?utm_source=alternatives&utm_campaign=zenrows-vs-scrapingbee) and the [ScrapingBee guide](https://specstream.ai/migrate/scrapingbee?utm_source=alternatives&utm_campaign=zenrows-vs-scrapingbee).

### 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](https://specstream.ai/benchmarks?utm_source=alternatives&utm_campaign=zenrows-vs-scrapingbee) 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](https://specstream.ai/extract-api?utm_source=alternatives&utm_campaign=zenrows-vs-scrapingbee), 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 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

### Is ZenRows better than ScrapingBee?

On price per JavaScript page they are close: both charge 5 credits, so ZenRows' $19 plan reads 9,000 such pages and ScrapingBee's $19 Hobby plan 15,000. SpecStream reads 23,750 pages for $19, answers both APIs' calls on one key, and its credit never expires.

### ZenRows vs ScrapingBee pricing: what does each cost?

Both start at $19 a month: ZenRows for 45,000 credits, ScrapingBee for 75,000. ZenRows charges 1, 5 or 25 credits a page and ScrapingBee 1 to 75. SpecStream charges $0.80 per 1,000 pages with no plan.

### Can I use both ZenRows and ScrapingBee code?

Yes, on one SpecStream key. ZenRows calls go to `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?

Yes, as tested on production on Nov 10, 2026. `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?

No. ZenRows plan credits expire at every renewal, and ScrapingBee credits are valid for one month. SpecStream credit you buy never expires.

### What does SpecStream not charge for?

Two things: a page with no text, and a busy call, which gets `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?

SpecStream gives $10 of credit, no card, which reads 12,500 pages. ZenRows has a free plan of 5,000 credits a month, and ScrapingBee gives 1,000 free credits.

## Sources

SpecStream wrote this page. Each rival figure comes from that company's own page.

- [ZenRows pricing documentation](https://docs.zenrows.com/first-steps/pricing.md), read Nov 10, 2026
- [ZenRows pricing](https://www.zenrows.com/pricing), read Nov 10, 2026
- [ZenRows authentication](https://docs.zenrows.com/authentication.md), read Nov 10, 2026
- [ZenRows pricing system](https://docs.zenrows.com/first-steps/faq/understanding-zenRows-pricing-system), read Nov 10, 2026
- [ZenRows Universal Scraper API reference](https://docs.zenrows.com/universal-scraper-api/api-reference), read Nov 10, 2026
- [ScrapingBee pricing](https://www.scrapingbee.com/pricing/), read Nov 10, 2026
- [ScrapingBee documentation](https://www.scrapingbee.com/documentation/), read Nov 10, 2026
- [ScraperAPI pricing](https://www.scraperapi.com/pricing/), read Nov 10, 2026
- [Scrapfly pricing](https://scrapfly.io/pricing), read Nov 10, 2026
- [Scrapfly billing](https://scrapfly.io/docs/scrape-api/billing), read Nov 10, 2026
- [Scrape.do pricing](https://scrape.do/pricing/), read Nov 10, 2026
- [Firecrawl pricing](https://www.firecrawl.dev/pricing), read Nov 10, 2026
- [SpecStream benchmarks](https://specstream.ai/benchmarks), read Nov 10, 2026
- [SpecStream pricing](https://specstream.ai/pricing), read Nov 10, 2026
- [SpecStream for agents](https://specstream.ai/agents.md), read Nov 10, 2026
