ZenRows vs Bright Data in 2026
Keep ZenRows code, pay one price.
On Nov 12, 2026, ZenRows starts at $19 a month for 45,000 credits, and a JavaScript page takes 5 of them. Bright Data's Web Unlocker takes one credit a request, and Bright Data values 5,000 credits at about $7.50.
SpecStream is the live web data engine. ZenRows code runs on it by changing the address to https://api.specstream.ai/zenrows/v1/, and every page costs $0.80 per 1,000. Its Extract API scores 0.908 F1 on WCXB.
New accounts get $10 of credit, no card. It covers 12,500 pages.
SpecStream, ZenRows and Bright Data side by side
| SpecStream | ZenRows | Bright Data | |
|---|---|---|---|
| Your code | ZenRows code runs as written at https://api.specstream.ai/zenrows/v1/ with the key as apikey. Other code calls POST /v1/extract with up to 20 URLs | GET https://api.zenrows.com/v1/ with your key in the apikey query parameter | POST https://api.brightdata.com/request with a Bearer key, your zone, the url and a format of raw or json |
| 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, 10 with a premium proxy and 25 for both | Web Unlocker: one credit per successful request. Bright Data values 5,000 credits at about $7.50, which is $1.50 per 1,000 |
| 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 pages or 1,800 protected pages | 12,666 Web Unlocker requests at $1.50 per 1,000 |
| 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 | Free credits reset to 5,000 on the first of each month and do not roll over |
| What is not charged | A page with no text. A busy call, which gets 429 with Retry-After | Failed requests. A 404 or 410 counts as successful and is billed | Failed requests. Scraper API records that fail on incorrect input are billed |
| Free to start | $10 of credit, no card: 12,500 pages | Free plan: 5,000 credits a month, no card | 5,000 free credits a month, no credit card |
| A browser | A page that refuses a plain read is tried again in a real browser, at the same $0.0008 | Browser: bandwidth plus 5 credits a minute of session time | Browser API at 5 credits per MB of traffic |
| Search | GET /v1/web-search on the same key: from $1 per 1,000 searches of up to 10 results, 97.9 F-score on all 1,000 SimpleQA Verified questions | Search returns ranked web results in one call | SERP API at one credit per request |
| 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 | JSON from the page you fetched, with Extract free on top of the Fetch credits | Scraper API: pre-built scrapers at $1.50 per 1,000 records pay as you go |
| Agents and MCP | MCP server at https://api.specstream.ai/mcp, REST API, Python and TypeScript SDKs and a CLI | MCP server, CLI and SDKs in its Agent Toolkit | An MCP server whose requests draw from the same 5,000 free monthly credits |
Why ZenRows and Bright Data users move to SpecStream
ZenRows code runs as written
Each ZenRows 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"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. Not returned: the X-Request-Id, X-Request-Cost, Zr-Final-Url and Concurrency-* headers, xhr, and headings and images from outputs. The full table is in the ZenRows guide.
A Bright Data call becomes one Extract API call
A Web Unlocker call sends one URL and gets the page back. The Extract API takes up to 20 URLs a call and returns each page's main text as Markdown or plain text.
# Bright Data Web Unlocker: before
curl https://api.brightdata.com/request \
-H "Authorization: Bearer $BRIGHTDATA_KEY" -H "Content-Type: application/json" \
-d '{"zone": "YOUR_ZONE", "url": "https://example.com", "format": "raw"}'
# SpecStream Extract API: after, up to 20 pages a call
curl -X POST https://api.specstream.ai/v1/extract \
-H "Authorization: Bearer $SPECSTREAM_API_KEY" -H "Content-Type: application/json" \
-d '{"urls": ["https://example.com"], "format": "markdown"}'Each item of data.results carries the url, a status, the page's main text without its menus, footers and ads, its title, and the published date when the page states one. Only a page with status ok is charged.
One price for every page, from credit that does not expire
ZenRows charges 1, 5, 10 or 25 credits a page, so the same plan reads a different number of pages each month, and plan credits expire at every renewal. Bright Data's free credits reset on the first of each month. SpecStream charges $0.80 per 1,000 pages whatever the page needs: $19 reads 23,750 pages, and credit you buy never expires.
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, pages and rows on the same key
A scrape API reads the pages you already know. On SpecStream the same key searches the live web from $1 per 1,000 searches, reads up to 20 pages a call with the Extract API, and runs Deep Search, which returns every match for a request as rows at 5¢, 15¢ or $1 a row. Saved requests rerun hourly to yearly, each row labeled changed, unchanged or no longer matching, and new rows arrive in Slack, a sheet, a CRM or a signed webhook.
Other ZenRows and Bright Data alternatives
AlterLab
A scrape API billed per request in five tiers, from $0.0002 for a direct fetch to $0.02 for an extended browser session, with a $10 minimum deposit. SpecStream charges $0.80 per 1,000 pages for every page, and its credit never expires.
Apify
A store of Actors billed by plan and usage. Starter costs $19 a month plus pay as you go, platform usage is $0.2 per compute unit, and its Unblocker costs $1.5 per 1,000 requests. SpecStream returns the records an Actor collects from a request in plain words, at 5¢ to $1 a row. See Apify alternatives.
ScrapingBee
A page API whose Hobby plan costs $19 a month for 75,000 credits, with 1,000 free credits to start. SpecStream answers ScrapingBee's call at https://api.specstream.ai/scrapingbee/api/v1/ at one price per page.
Firecrawl
Scrape, crawl and search endpoints billed in credits: 1 credit a page and 2 credits per 10 search results, with Hobby at $19 a month for 5,000 credits. SpecStream answers Firecrawl's v2 calls at https://api.specstream.ai/firecrawl, with search at $1 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 Bright Data 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. Replace each Bright Data Web Unlocker call with POST https://api.specstream.ai/v1/extract, with up to 20 URLs in urls and the key as the Bearer token.
import os, requests
reply = requests.post(
"https://api.specstream.ai/v1/extract", # was https://api.brightdata.com/request
headers={"Authorization": f"Bearer {os.environ['SPECSTREAM_API_KEY']}"},
json={"urls": ["https://en.wikipedia.org/wiki/Web_scraping"], "format": "markdown"},
timeout=60,
)
for page in reply.json()["data"]["results"]:
print(page["status"], page["url"], (page.get("text") or "")[:300])4. Read 429 as a call to send again after Retry-After. It is not charged. To test it on your own pages, send the same 100 URLs to your current API and to SpecStream, then compare each page's text and the price_usd of each call. 100 pages cost $0.08 on SpecStream.
Frequently asked questions
Something we didn't answer? Talk to a human
Is ZenRows better than Bright Data?
ZenRows vs Bright Data pricing: what does each cost?
Does ZenRows code work with SpecStream?
https://api.specstream.ai/zenrows/v1/ with the key as apikey and get ZenRows' own reply back, at $0.0008 a page. The zenrows Python SDK 1.13.0 works with base_url set to that address.Do ZenRows and Bright Data credits roll over?
What does SpecStream not charge for?
429 with Retry-After. ZenRows counts a 404 or 410 as successful and bills it.Is there a free trial?
Sources
SpecStream wrote this page. Each rival figure comes from that company's own page.
- ZenRows pricingzenrows.com/pricing.md, read Nov 12, 2026
- ZenRows pricing documentationdocs.zenrows.com/first-steps/pricing.md, read Nov 12, 2026
- ZenRows authenticationdocs.zenrows.com/authentication.md, read Nov 12, 2026
- Bright Data free tierdocs.brightdata.com/general/account/billing-and-pricing/free-tier.md, read Nov 12, 2026
- Bright Data Web Unlocker API overviewdocs.brightdata.com/products/web-unlocker/introduction.md, read Nov 12, 2026
- Bright Data billingdocs.brightdata.com/general/account/billing-and-pricing.md, read Nov 12, 2026
- Bright Data Scraper API FAQsdocs.brightdata.com/products/scrapers/scrapers-library/faqs.md, read Nov 12, 2026
- AlterLab pricingalterlab.io/pricing, read Nov 12, 2026
- Apify pricingapify.com/pricing, read Nov 12, 2026
- ScrapingBee pricingscrapingbee.com/pricing/, read Nov 12, 2026
- Firecrawl pricingfirecrawl.dev/pricing, read Nov 12, 2026
- SpecStream benchmarksspecstream.ai/benchmarks, read Nov 12, 2026
- SpecStream pricingspecstream.ai/pricing, read Nov 12, 2026
- SpecStream for agentsspecstream.ai/agents.md, read Nov 12, 2026




