Web scraping API comparison 2026
Price per 1,000 pages.
Scraping APIs sell credits, and harder pages take more of them. Per 1,000 rendered pages on the entry plan: ScrapingBee $1.27, ZenRows $2.11, Firecrawl $3.80, ScraperAPI $4.90. Protected pages run from $10.56 on ZenRows to $36.75 on ScraperAPI.
SpecStream is the live web data engine for teams and agents. Its Extract API reads any page for $0.80 per 1,000, in a real browser when it has to, and a 404 or a page with no text costs nothing.
New accounts get $10 of credit, no card. It covers 12,500 pages.
Price per 1,000 pages on each entry plan, read on Nov 12, 2026
| SpecStream | ScraperAPI | ScrapingBee | ZenRows | Firecrawl | Zyte API | |
|---|---|---|---|---|---|---|
| Entry plan | None. Pay from a balance, with $10 of credit to start and no card | Hobby: $49 a month for 100,000 credits | Hobby: $19 a month for 75,000 credits | $19 a month for 45,000 credits | Hobby: $19 a month for 5,000 pages | Pay as you go, with $5 of free credit for the first billing month |
| Plain page | $0.80 | $0.49 at 1 credit | $0.25 at 1 credit | $0.42 at 1 credit | $3.80 at 1 credit | $0.13 to $1.27, by the site's tier |
| Page rendered in a browser | $0.80 | $4.90: render=true costs 10 credits | $1.27: rendering is the default, at 5 credits | $2.11 at 5 credits | $3.80 at 1 credit a basic page | $1.01 to $16.08, by the site's tier |
| Protected page | $0.80. A page that refuses a plain read is tried as a browser would ask, in a real browser, from the site's feed, then from its newest archive capture | $12.25 with premium proxies and rendering at 25 credits, $36.75 with Ultra Premium and rendering at 75 | $19.00 with the stealth proxy at 75 credits | $10.56 at 25 credits | $3.80 a basic page. The JSON format adds 4 credits a page, $19.00 per 1,000 | $16.08 at the hardest browser tier |
| A 404 page | Not charged, and a page with no text is not charged either | Charged: 200 and 404 are billed | Billed per successful request. An error from ScrapingBee itself is not billed | Charged: 404 and 410 count as successful | 1 credit | Only successful responses are charged |
| Credit you do not use | Never expires | The balance resets at renewal | Valid for one month, no roll over | Plan credits expire at every renewal | Rolls over only on Scale and Enterprise | Pay as you go: you pay for what you use |
Why developers compare on SpecStream's price
One price, whatever the page needs
On a credit plan the price of 1,000 pages moves with the page. ZenRows' $19 for 45,000 credits is $0.42 per 1,000 plain pages, $2.11 rendered and $10.56 protected. ScraperAPI's $49 for 100,000 credits is $0.49, $4.90 and $12.25, and $36.75 with Ultra Premium. You find out which a site needs after the first calls.
SpecStream charges $0.0008 a page, or $0.80 per 1,000, for every page and every site. Each reply carries price_usd, so a run's cost is known before you scale it.
A 404 and an empty page are free
ScraperAPI bills 200 and 404, ZenRows counts 404 and 410 as successful, and Firecrawl charges 1 credit for a 403 or 404 page. On SpecStream only a page read with text is charged: not_found, blocked, empty and failed results cost nothing, and a site's own error page comes back in text with its status_code, unbilled.
Measured on a public benchmark
The Extract API scores 0.908 F1 on WCXB, on the benchmarks page. It returns the main text without menus, footers and ads, as Markdown or plain text, with the title, the published date and every email address the page carries. PDF, Word and Excel files are read too.
Change one address to compare
ScraperAPI answers at https://api.specstream.ai/scraperapi, ScrapingBee at /scrapingbee/api/v1/, ZenRows at /zenrows/v1/, Firecrawl at /firecrawl, and Scrapfly, Scrape.do and ScrapingAnt at their own paths, each in that API's own form. Run your own URLs through both and compare the bill. The migration guides list every parameter.
Other web scraping APIs, by price
SpecStream
The live web data engine for teams and agents. $0.80 per 1,000 pages for any page, $1 per 1,000 searches on the fast tier and $5 by default, and structured rows at 5¢, 15¢ or $1 a row from Deep Search, on one key and one balance.
ScrapingAnt
100K credits at $19 a month. SpecStream answers ScrapingAnt's call at /scrapingant/v2 for $0.80 per 1,000 pages, with nothing to set per page.
Scrape.do
Hobby is $29 billed monthly for 250,000 credits, and failed requests cost nothing. SpecStream also leaves a page with no text unbilled, and answers Scrape.do's call at /scrapedo.
Crawl4AI Cloud
Credits at $0.001 each: 0.1 credit for a plain page, 0.5 in a real browser and 2 for a hard site, from $10 a month. SpecStream has one price for all three, no plan, and answers a Crawl4AI server's /crawl and /md at /crawl4ai.
Oxylabs Web Scraper API
From $0.50 per 1,000 results on the entry tiers. SpecStream reads pages at $0.80 per 1,000 from a balance that never expires.
Apify
$0.2 per compute unit on Free and Starter, with $5 of monthly prepaid platform usage free. The cost of a page depends on the Actor and the compute it uses. On SpecStream a page is $0.0008.
How SpecStream scores
The same numbers as the benchmarks page, from the official tasks and scorers.
How to compare on your own URLs
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. Read up to 20 URLs in one call. Each result has its status, read_from and text, and the reply has price_usd:
curl -s https://api.specstream.ai/v1/extract \
-H "Authorization: Bearer $SPECSTREAM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"urls": ["https://en.wikipedia.org/wiki/Web_scraping", "https://www.python.org/"], "format": "markdown"}'3. On ScraperAPI now? Change the address and keep the call. In Python:
import os
import requests
URL = "https://api.specstream.ai/scraperapi" # was https://api.scraperapi.com
reply = requests.get(
URL,
params={"api_key": os.environ["SPECSTREAM_API_KEY"], "url": "https://en.wikipedia.org/wiki/Web_scraping", "output_format": "markdown"},
timeout=70,
)
reply.raise_for_status()
print(reply.text[:500])4. On ScrapingBee? The same in JavaScript:
const url = new URL("https://api.specstream.ai/scrapingbee/api/v1/"); // was https://app.scrapingbee.com/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_API_KEY}` } });
const data = await reply.json();
console.log(data["initial-status-code"], data["resolved-url"], data.body.length);5. Read 429 as a call to send again after Retry-After. It is not charged. The ScraperAPI, ScrapingBee, ZenRows and Firecrawl guides list every parameter.
Frequently asked questions
Something we didn't answer? Talk to a human
How much does a web scraping API cost per 1,000 pages?
Which web scraping API is best for pages that block bots?
Do scraping APIs charge for a 404?
200 and 404, ZenRows counts 404 and 410 as successful, and Firecrawl charges 1 credit for a 403 or 404 page. SpecStream charges only for a page read with text.What does a rendered page cost on ScraperAPI and ScrapingBee?
Can I switch scraping APIs without rewriting code?
https://api.specstream.ai. Change the address and the key, and the parser stays.Does SpecStream have an MCP server?
https://api.specstream.ai/mcp, with read_pages at $0.80 per 1,000 pages and search_web on the same key and balance.Sources
SpecStream wrote this page. Each figure about another company comes from that company's own pricing page or documentation, read on the date shown. Prices per 1,000 pages are our arithmetic: the entry plan's price divided by its credits, times the credits a page takes.
- SpecStream pricingspecstream.ai/pricing, read Nov 12, 2026
- SpecStream for agentsspecstream.ai/agents.md, read Nov 12, 2026
- SpecStream benchmarksspecstream.ai/benchmarks, read Nov 12, 2026
- ScraperAPI pricingscraperapi.com/pricing.md, read Nov 12, 2026
- ScraperAPI credits and request costsdocs.scraperapi.com/getting-started/quick-start/credits-and-requests-costs.md, read Nov 12, 2026
- ScrapingBee pricingscrapingbee.com/pricing/, read Nov 12, 2026
- ScrapingBee documentationscrapingbee.com/documentation/, read Nov 12, 2026
- ZenRows pricingzenrows.com/pricing.md, read Nov 12, 2026
- ZenRows pricing docsdocs.zenrows.com/first-steps/pricing.md, read Nov 12, 2026
- ZenRows pricing FAQdocs.zenrows.com/first-steps/faq/understanding-zenRows-pricing-system, read Nov 12, 2026
- Firecrawl pricingfirecrawl.dev/pricing.md, read Nov 12, 2026
- Zyte pricingzyte.com/pricing/, read Nov 12, 2026
- Zyte API pricing docsdocs.zyte.com/zyte-api/pricing.html, read Nov 12, 2026
- ScrapingAnt pricingscrapingant.com/price-scraping-api, read Nov 12, 2026
- Scrape.do pricingscrape.do/pricing/, read Nov 12, 2026
- Scrape.do request costsscrape.do/documentation/request-costs/, read Nov 12, 2026
- Crawl4AI pricingcrawl4ai.com/pricing, read Nov 12, 2026
- Oxylabs pricingoxylabs.io/pricing, read Nov 12, 2026
- Apify pricingapify.com/pricing, read Nov 12, 2026




