ScraperAPI vs Scrape.do vs ScrapeOps in 2026
Price per 1,000 pages.
ScraperAPI starts at $49 a month for 100,000 credits, Scrape.do at $29 for 250,000 and ScrapeOps at $9 for 25,000. On all three a JavaScript page takes 5 or 10 credits, and a residential one 10 or more.
SpecStream answers the ScraperAPI and Scrape.do calls at their own addresses on one key, and reads any page at $0.80 per 1,000 from credit that never expires. A ScrapeOps call moves to the Extract API.
New accounts get $10 of credit, no card. It covers 12,500 pages.
SpecStream, ScraperAPI, Scrape.do and ScrapeOps side by side
| SpecStream | ScraperAPI | Scrape.do | ScrapeOps | |
|---|---|---|---|---|
| The call your code sends | ScraperAPI's call at https://api.specstream.ai/scraperapi and Scrape.do's at https://api.specstream.ai/scrapedo, on one key. A ScrapeOps call moves to POST /v1/extract | GET https://api.scraperapi.com?api_key=&url= | GET https://api.scrape.do/?token=&url= | GET https://proxy.scrapeops.io/v1/?api_key=&url= |
| Entry plan | No plan. $10 reads 12,500 pages and $29 reads 36,250 | Hobby, $49 a month for 100,000 credits | Hobby, $29 a month for 250,000 credits | $9 a month for 25,000 credits, $19 for 100,000 |
| Plain page, per 1,000 | $0.80 | 1 credit: $0.49 on Hobby | 1 credit: $0.12 on Hobby | 1 credit: $0.19 on the $19 plan |
| JavaScript page, per 1,000 | $0.80. A page that refuses a plain read is tried again in a real browser at the same price | render=true is 10 credits: $4.90 on Hobby | render=true is 5 credits: $0.58 on Hobby | render_js=true is 10 credits: $1.90 on the $19 plan |
| Residential proxy and a browser, per 1,000 | $0.80. The price does not change with what a page takes to load | premium=true with render=true is 25 credits: $12.25 on Hobby | super=true with render=true is 25 credits: $2.90 on Hobby | residential=true&render_js=true is 25 credits: $4.75 on the $19 plan |
| A Google page | The Search API answers a question from the live web at $5 per 1,000 searches of up to 10 results, or $1 with speed=fast | 25 credits: $12.25 per 1,000 on Hobby | 10 credits, with residential proxies on by default: $1.16 per 1,000 on Hobby | 10 credits, 25 with render_js=true: $1.90 per 1,000 on the $19 plan |
| Monthly credit | No plan. Credit you buy never expires | The credit balance resets when the subscription renews | At the monthly limit, requests stop until you upgrade or buy more credits | Unused credits do not carry to the next period |
| Charged replies | A page with no text and a busy call's 429 are not charged, and the Extract API does not charge a site's 404 | 200 and 404 are charged | 2XX, 400, 404 and 410 count as successful and are charged | 200 and 404 consume credits |
| Requests at once | Up to 20 pages a call on the Extract API. A call past the account's calls for the minute answers 429 with Retry-After and charges nothing | 20 concurrent threads on Hobby, 50 on Startup | 10 concurrent requests on Hobby, 50 on Pro | 1 concurrent thread on the $9 and $19 plans, 5 on the $29 plan |
| Free to start | $10 of credit, no card, which covers 12,500 pages | A 7-day trial with 5,000 credits, no card, then 1,000 credits a month | 1,000 credits a month, with 5 concurrent requests | 1,000 free credits, no card. A prepaid block of 10,000 credits costs $5 |
| Structured data | Deep Search: a request in plain words returns every match on the live web as rows that meet each condition you wrote, at 5¢, 15¢ or $1 a row. The most a run can cost is quoted before it starts | Autoparse returns JSON or CSV for Amazon, eBay, Google, Redfin and Walmart | Amazon pages go through its Amazon Scraper API and return structured JSON, at 1 credit | llm_extract=true adds 25 credits a page |
Why teams comparing ScraperAPI, Scrape.do and ScrapeOps use SpecStream
What 100,000 JavaScript pages cost in a month
Plans sell credits, and a rendered page takes several. 100,000 rendered pages need 1,000,000 ScraperAPI credits, the Startup plan at $149. On Scrape.do they need 500,000 credits, past Hobby's 250,000, so the Pro plan at $99. On ScrapeOps they need 1,000,000 credits, the $99 plan of 1,250,000. On SpecStream they cost $80, and a page that gives no text costs nothing.
For plain pages that load without a browser, each of the three is cheaper per page on paper: $0.12 to $0.49 per 1,000 when every credit is used in the month. SpecStream's $0.80 holds for every page, on any site, from a balance that stays until you spend it.
Keep the ScraperAPI and Scrape.do calls
Each call changes its address and keeps its parameters and its parser. Both carry the same SpecStream key, where theirs went.
# ScraperAPI: was https://api.scraperapi.com
curl -G https://api.specstream.ai/scraperapi \
--data-urlencode "api_key=$SPECSTREAM_KEY" \
--data-urlencode "url=https://en.wikipedia.org/wiki/Web_scraping" \
--data-urlencode "output_format=markdown"
# Scrape.do: was https://api.scrape.do
curl -G https://api.specstream.ai/scrapedo \
--data-urlencode "token=$SPECSTREAM_KEY" \
--data-urlencode "url=https://en.wikipedia.org/wiki/Web_scraping" \
--data-urlencode "output=markdown"The parameter tables are in the ScraperAPI migration guide and the Scrape.do migration guide.
A ScrapeOps call on the Extract API
ScrapeOps sends each request on to one of 20+ scraping APIs and bills its own credits for it. SpecStream reads the page itself. The call becomes a POST with up to 20 URLs, and each result carries url, status and the page's main text.
# ScrapeOps: was GET https://proxy.scrapeops.io/v1/?api_key=&url=
curl https://api.specstream.ai/v1/extract \
-H "Authorization: Bearer $SPECSTREAM_KEY" \
-H "Content-Type: application/json" \
-d '{"urls": ["https://en.wikipedia.org/wiki/Web_scraping"], "format": "markdown"}'Check the price on your own pages
ScraperAPI returns the credits a call took in its sa-credit-cost header, and Scrape.do in its Scrape.do-Request-Cost header. On SpecStream every charged reply carries X-Balance-Cents, an Extract API reply carries price_usd, and GET https://api.specstream.ai/v1/account/requests lists each call with its price. Send the same 100 URLs through each and compare the totals.
Scores published on official benchmarks
The SpecStream Extract API scores 0.908 F1 on WCXB. The Search API scores a 97.9 F-score on all 1,000 official SimpleQA Verified questions and 64.0 item F1 on all 200 WideSearch tasks. The scores and the method are at specstream.ai/benchmarks.
Search, crawls and rows on the same key
A scraper reads the pages you already know. The same key finds them: the Search API at $5 per 1,000 searches, POST /v1/map for a site's links and POST /v1/crawl for a whole site, each page with text at the page price. Deep Search returns every match on the live web as structured rows at 5¢, 15¢ or $1 a row, and a saved request reruns hourly to yearly with each row labeled changed, unchanged or no longer matching.
Other scraping APIs
Firecrawl
Scrape, crawl and search by monthly credits: Hobby is $19 a month for 5,000 credits, and a 403 or 404 page costs 1 credit. SpecStream answers Firecrawl v2 scrape, map and crawl at https://api.specstream.ai/firecrawl, at $0.0008 a page.
ScrapingBee
Hobby is $19 a month for 75,000 credits, and each request with JavaScript rendering costs 5. SpecStream answers ScrapingBee's call at https://api.specstream.ai/scrapingbee/api/v1/, at one price for every page.
Scrapfly
Discovery is $30 a month for 200,000 credits, and render_js adds 5 credits a call. SpecStream answers Scrapfly's call at https://api.specstream.ai/scrapfly/scrape, at $0.80 per 1,000 pages.
How SpecStream scores
The same numbers as the benchmarks page, from the official tasks and scorers.
How to move your calls 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 each call at SpecStream. The key goes as api_key on the ScraperAPI path, as token on the Scrape.do path, and as the Bearer token on the Extract API. In Python:
import requests
PAGE = "https://en.wikipedia.org/wiki/Web_scraping"
# ScraperAPI's call, was https://api.scraperapi.com
scraper = requests.get(
"https://api.specstream.ai/scraperapi",
params={"api_key": SPECSTREAM_KEY, "url": PAGE, "output_format": "markdown"},
timeout=70,
)
print(scraper.status_code, scraper.text[:200])
# Scrape.do's call, was https://api.scrape.do/
scrapedo = requests.get(
"https://api.specstream.ai/scrapedo",
params={"token": SPECSTREAM_KEY, "url": PAGE, "output": "markdown"},
timeout=60,
)
print(scrapedo.status_code, scrapedo.text[:200])
# ScrapeOps' call, was https://proxy.scrapeops.io/v1/
read = requests.post(
"https://api.specstream.ai/v1/extract",
headers={"Authorization": f"Bearer {SPECSTREAM_KEY}"},
json={"urls": [PAGE], "format": "markdown"},
timeout=60,
).json()
for result in read["data"]["results"]:
print(result["url"], result["status"], (result.get("text") or "")[:200])3. Leave the rest. Each page is billed at $0.0008, and a page that gives no text is not charged. On a 429, wait the seconds in Retry-After and send the call again; nothing was charged.
When you scrape pages to build a list, write the list you want in plain words. SpecStream reads it back as the conditions every row must meet and the facts to bring back, quotes the most it can cost, and delivers the rows after you approve.
Frequently asked questions
Something we didn't answer? Talk to a human
Which is cheapest: ScraperAPI, Scrape.do or ScrapeOps?
What does a JavaScript page cost on each?
Is ScrapeOps a scraping API?
Do unused credits roll over?
Which ones charge for a 404?
200 and 404, and Scrape.do counts 400, 404 and 410 as successful. On SpecStream a page with no text and a busy call are not charged, and the Extract API does not charge a site's 404.Can I keep my code?
https://api.specstream.ai/scraperapi or https://api.specstream.ai/scrapedo and send the SpecStream key where theirs went. A ScrapeOps call moves to POST https://api.specstream.ai/v1/extract, up to 20 pages a call.Sources
SpecStream wrote this page. Each figure for ScraperAPI, Scrape.do, ScrapeOps and the other APIs comes from that company's own page.
- 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
- ScraperAPI first requestdocs.scraperapi.com/getting-started/quick-start/send-your-first-request.md, read Nov 12, 2026
- ScraperAPI Autoparsedocs.scraperapi.com/data-pipeline/creating-a-datapipeline-project/results-and-output-formats.md, 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
- Scrape.do documentationscrape.do/documentation/, read Nov 12, 2026
- ScrapeOps Proxy API Aggregator and pricingscrapeops.io/proxy-api-aggregator/, read Nov 12, 2026
- ScrapeOps request costsscrapeops.io/docs/web-scraping-proxy-api-aggregator/account/request-costs/, read Nov 12, 2026
- ScrapeOps quick startscrapeops.io/docs/web-scraping-proxy-api-aggregator/quickstart/, read Nov 12, 2026
- Firecrawl pricingfirecrawl.dev/pricing.md, read Nov 12, 2026
- ScrapingBee pricingscrapingbee.com/pricing/, read Nov 12, 2026
- Scrapfly pricingscrapfly.io/pricing, read Nov 12, 2026
- Scrapfly billingscrapfly.io/docs/scrape-api/billing, read Nov 12, 2026
- 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




