Scrape.do compatible
Change the address, keep the call.
Scrape.do sells monthly credits: Hobby is $29 for 250,000, and a rendered page takes 5 credits. SpecStream answers the same ?token=&url= call with the page itself, at $0.80 per 1,000 pages, and a failed page costs nothing.
The switch is one line: https://api.specstream.ai/scrapedo in place of https://api.scrape.do, and a SpecStream key as token. Your parser stays.
The Extract API behind each call scores 0.908 F1 on WCXB. A new account gets $10 of credit, no card, which covers 12,500 pages.
New accounts get $10 of credit, no card. It covers 12,500 pages.
Scrape.do to SpecStream, parameter by parameter and field by field
| SpecStream | Scrape.do | |
|---|---|---|
| Address | GET https://api.specstream.ai/scrapedo?token=KEY&url=URL | GET https://api.scrape.do/?token=TOKEN&url=URL |
| The key | A SpecStream key as token in the address | A Scrape.do token in the address |
| Output | The page's HTML, output=markdown for markdown, returnJSON=true with render=true for {"content"} | The page as returned, raw or markdown |
| Target status | A missing page answers 404, and transparentResponse=true passes the target's status | transparentResponse returns the target's response |
| Errors | Scrape.do's {"error", "message"}: 401 for a wrong key, 400 with no url, 502 for a host that does not resolve, not charged. A busy call gets 429 with Retry-After and is not charged | Over the plan's concurrency, requests are queued or rejected until a slot opens up |
| Price | $0.0008 a page, $0.80 per 1,000, with no plan. A failed page costs nothing | Hobby $29 billed monthly for 250,000 credits, Pro $99 for 1,250,000. A rendered page takes 5 credits, a residential one 10 |
| Free to start | $10 of credit, no card, which covers 12,500 pages | 1,000 credits a month, no credit card |
The Scrape.do reference, on SpecStream
The call, before and after
# Before
curl -G https://api.scrape.do/ \
--data-urlencode "token=$SCRAPEDO_TOKEN" \
--data-urlencode "url=https://en.wikipedia.org/wiki/Web_scraping"
# After
curl -G https://api.specstream.ai/scrapedo \
--data-urlencode "token=$SPECSTREAM_API_KEY" \
--data-urlencode "url=https://en.wikipedia.org/wiki/Web_scraping"Scrape.do's documented calls are plain HTTP, so the change is the address in that one line, in curl, Python requests or fetch.
What the route reads, and what it refuses
Read and applied: url, token, output=markdown and output=raw, returnJSON=true with render=true, and transparentResponse=true. A page the site does not have answers 404, as Scrape.do does.
Refused, in Scrape.do's {"error", "message"} form: returnJSON without render=true gets 400, a call with no url gets 400, a wrong key gets 401, and a host that does not resolve gets 502 and is not charged. An account with no credit left gets 401, as on Scrape.do. Every parameter was measured on production on Nov 10, 2026, and the full pass table lists each one and its result.
What comes back
The body is the page: its HTML by default, or markdown with output=markdown. With returnJSON=true and render=true the reply is a JSON object whose content is the page.
The Scrape.do-* response headers, such as Scrape.do-Request-Cost and Scrape.do-Remaining-Credits, are not sent, and the returnJSON reply has no frames, networkRequests, websocketResponses or screenShots.
One price a page, no credits to count
On Scrape.do a page takes 1 credit, 5 with render=true, 10 with super=true and 25 with both. On SpecStream every page costs $0.0008, a failed page costs nothing, there is no plan to renew, and credit you buy never expires. A busy call gets 429 with Retry-After and charges nothing.
Measured on the official benchmarks
The Extract API that reads each page scores 0.908 F1 on WCXB. Each call is one Extract API read of the page.
On SimpleQA Verified the SpecStream Search API scores 97.9 F-score on all 1,000 official questions, 978 of them correct. On WideSearch it scores 64.0 item F1 and 43.4 row F1 on all 200 official tasks. The Extract API scores 0.908 F1 on WCXB. Every score and its method is on the benchmarks page.
You decide what is kept, on each key
Create the key with zero_retention and the pages it reads are not kept: the Extract API keeps the pages it returned for 7 days in the request log, and keeps none for a zero-retention key. spend_cap_cents is the most the key can spend.
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 one key
The same key calls GET /v1/web-search, which returns up to 100 results for one search, at $5 per 1,000 searches of up to 10 results. Deep Search returns every match for a request in plain words as structured rows, at 5¢, 15¢ or $1 a row, with a source URL on every value. The most a run can cost is approved before it starts.
What else Scrape.do users price
ScrapingAnt
A scraping API sold by monthly credits: Enthusiast is $19 for 100,000, and a page with its default browser takes 10. SpecStream answers ScrapingAnt's own /v2/general call at /scrapingant/v2, at $0.0008 a page.
ScrapingBee
A scraping API sold by monthly credits: Hobby is $19 for 75,000, and a request with JavaScript rendering costs 5 credits. SpecStream charges $0.0008 a page, and its credit never expires.
ScraperAPI
A scraping API on monthly plans: Hobby is $49 a month for 100,000 credits, and a standard page costs 1 credit. SpecStream charges $0.80 per 1,000 pages from a balance, and a failed page costs nothing.
How SpecStream scores
The same numbers as the benchmarks page, from the official tasks and scorers.
How to migrate, step by step
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. Set the address to https://api.specstream.ai/scrapedo where your code has https://api.scrape.do, and send the SpecStream key as token. In Python:
import requests
URL = "https://api.specstream.ai/scrapedo" # was https://api.scrape.do/
reply = requests.get(URL, {"token": SPECSTREAM_KEY, "url": "https://en.wikipedia.org/wiki/Web_scraping", "output": "markdown"}, timeout=60)
reply.raise_for_status()
print(reply.text[:500])3. In JavaScript:
const url = new URL("https://api.specstream.ai/scrapedo");
url.search = new URLSearchParams({ token: process.env.SPECSTREAM_KEY, url: "https://en.wikipedia.org/wiki/Web_scraping" });
const html = await (await fetch(url)).text();
console.log(html.length);4. Read 429 as a call to send again after Retry-After. It is not charged, and neither is a page that fails.
Frequently asked questions
Something we didn't answer? Talk to a human
Is there a Scrape.do compatible API?
GET /?token=&url= at https://api.specstream.ai/scrapedo with the page itself, as measured on production on Nov 10, 2026. A page costs $0.0008.How do I migrate from Scrape.do?
https://api.scrape.do becomes https://api.specstream.ai/scrapedo, and a SpecStream key goes in token. url, output, returnJSON and transparentResponse keep their meaning.How much does Scrape.do cost?
Is there a Scrape.do SDK whose address I can change?
requests, fetch and curl.Is a failed page charged?
502, as on Scrape.do. A read page costs $0.0008.What does SpecStream not return from Scrape.do's API?
Scrape.do-* response headers, screenshots, frames and network logs. The page comes back as HTML, markdown, or content in the returnJSON form.Sources
SpecStream wrote this page. Each Scrape.do figure comes from Scrape.do's own pages, and each other provider's figure from that company's own page. The route's behavior comes from its code and the pass table measured on production.
- Scrape.do pricingscrape.do/pricing/, read Nov 10, 2026
- Scrape.do request costsscrape.do/documentation/request-costs/, read Nov 10, 2026
- Scrape.do documentationscrape.do/documentation/, read Nov 10, 2026
- SpecStream Scrape.do pass tablespecstream.ai/specstream/dialects/scrapedo.md, read Nov 10, 2026
- ScrapingAnt pricingscrapingant.com/price-scraping-api, read Nov 10, 2026
- ScrapingBee pricingscrapingbee.com/pricing/, read Nov 10, 2026
- ScraperAPI pricingscraperapi.com/pricing.md, 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




