ScrapingBee compatible
Change the address, keep the client.
ScrapingBee's Hobby plan is $19 a month for 75,000 credits, a default call with JavaScript costs 5 credits, and credits don't roll over. SpecStream answers the same GET /api/v1 call at one price: $0.80 per 1,000 pages.
The switch is one line: https://api.specstream.ai/scrapingbee/api/v1/ in place of https://app.scrapingbee.com/api/v1/, and a SpecStream key as the Bearer token. The client and your parser stay.
The SpecStream Extract API scores 0.908 F1 on WCXB. A failed page costs nothing, credit you buy never expires, and a new account gets $10 of credit, no card.
New accounts get $10 of credit, no card. It covers 12,500 pages.
ScrapingBee to SpecStream, parameter by parameter and field by field
| SpecStream | ScrapingBee | |
|---|---|---|
| Address | GET https://api.specstream.ai/scrapingbee/api/v1/?url= | GET https://app.scrapingbee.com/api/v1?url= |
| The key | A SpecStream key as Authorization: Bearer, or as api_key in the address | Authorization: Bearer YOUR-API-KEY. Passing the key as api_key is deprecated |
| Output | The page's HTML, or its main content with return_page_markdown or return_page_text. json_response wraps it, and add_html adds the HTML | The page as returned, or JSON with json_response |
| Status codes | The site's 404 passes through, and transparent_status_code gives the site's own status. A page that cannot be read gets 500 and is not charged | 404 and 410 are billed. 500 is not billed |
| Errors | ScrapingBee's own: 400 with no url, 401 for a wrong key or no credit. A busy call gets 429 with Retry-After and is not charged | 401 out of credits or an invalid key, 429 too many concurrent requests |
| Price | $0.80 per 1,000 pages, the same for every page. $19 reads 23,750 pages | Hobby $19 a month for 75,000 credits. A call costs 1 to 75 credits, 5 with JavaScript rendering by default |
| Credit | Credit you buy never expires | API credits are valid for one month and don't roll over |
| Free to start | $10 of credit, no card, which covers 12,500 pages | 1,000 free API credits, no credit card required |
The ScrapingBee reference, on SpecStream
The call, before and after
# Before
curl -G https://app.scrapingbee.com/api/v1/ \
-H "Authorization: Bearer $SCRAPINGBEE_API_KEY" \
--data-urlencode "url=https://en.wikipedia.org/wiki/Web_scraping"
# After
curl -G https://api.specstream.ai/scrapingbee/api/v1/ \
-H "Authorization: Bearer $SPECSTREAM_API_KEY" \
--data-urlencode "url=https://en.wikipedia.org/wiki/Web_scraping"With ScrapingBee's Python client, scrapingbee 2.2.0, the change is one line after the client is built: client.HTML_API_URL = "https://api.specstream.ai/scrapingbee/api/v1/", with a SpecStream key as api_key. client.html_api(url) then runs as before.
What the route reads, and what it refuses
Read and applied: url, the key as Authorization: Bearer or api_key, return_page_markdown, return_page_text, json_response, add_html and transparent_status_code. A page the site does not have passes through as its own 404.
Refused, in ScrapingBee's own status and body: no url gets 400, mode=auto together with render_js gets 400, a wrong key or an empty balance gets 401, and a host that does not resolve gets 500 and is not charged. Every parameter was measured on production on Nov 10, 2026, and the full pass table lists each one and its result.
Every field that comes back
By default the body is the page itself with its content-type. With json_response=true the reply has body, initial-status-code, resolved-url, type, and html when you add add_html.
The route does not return the Spb-* response headers, nor headers, cost, cookies, xhr, screenshot, metadata, iframes, evaluate_results and js_scenario_report in the JSON form.
One price a page, and a failed page is free
On ScrapingBee a call costs 1 to 75 credits by the options it uses, and the month's credits do not roll over. On SpecStream every page read costs $0.0008, which is $0.80 per 1,000, a page with no main text is not charged, a failed page is not charged, and a busy call gets 429 with Retry-After and charges nothing. Credit you buy never expires.
Scored on the official benchmarks
The SpecStream Extract API scores 0.908 F1 on WCXB. The Search API scores 97.9 F-score on all 1,000 SimpleQA Verified questions, 978 of them correct, and 64.0 item F1 and 43.4 row F1 on all 200 WideSearch tasks. 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 a call made with it keeps no request text and no answer after the reply. 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}'Pages, search and rows on one key
The same key reads up to 20 pages or documents a call with the Extract API, searches the web at $5 per 1,000 searches, and runs Deep Search, which 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 full comparison is on the ScrapingBee alternative page.
What else ScrapingBee users price
ScraperAPI
A page API on monthly plans: Hobby is $49 a month for 100,000 API credits, and the balance resets when the subscription renews. SpecStream answers ScraperAPI's call at https://api.specstream.ai/scraperapi too, at $0.80 per 1,000 pages.
ZenRows
A page API on monthly plans from $19 for 45,000 credits, where a JavaScript-rendered request always costs 5 credits. SpecStream charges one price a page and answers ZenRows' call at https://api.specstream.ai/zenrows/v1/.
Scrapfly
A page API from $30 a month for 200,000 credits, where browser rendering adds 5 credits a request. SpecStream answers Scrapfly's /scrape call too, and its credit never expires.
Firecrawl
Scrape, search and crawl in credits: Hobby is $19 a month for 5,000 credits. SpecStream answers Firecrawl's v2 calls at https://api.specstream.ai/firecrawl, and $19 reads 23,750 pages.
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/scrapingbee/api/v1/ where your code has https://app.scrapingbee.com/api/v1/, and send the SpecStream key as the Bearer token. In Python:
import requests
URL = "https://api.specstream.ai/scrapingbee/api/v1/" # was https://app.scrapingbee.com/api/v1/
reply = requests.get(
URL,
headers={"Authorization": f"Bearer {SPECSTREAM_KEY}"},
params={"url": "https://en.wikipedia.org/wiki/Web_scraping", "return_page_markdown": "true"},
timeout=60,
)
reply.raise_for_status()
print(reply.text[:500])3. In JavaScript:
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.
Frequently asked questions
Something we didn't answer? Talk to a human
Is there a ScrapingBee compatible API?
GET /api/v1 at https://api.specstream.ai/scrapingbee/api/v1/ with ScrapingBee's reply and status codes, as measured on production on Nov 10, 2026. A page costs $0.0008.How do I migrate from ScrapingBee?
https://app.scrapingbee.com/api/v1/ becomes https://api.specstream.ai/scrapingbee/api/v1/, and a SpecStream key goes in the Bearer token. url, return_page_markdown, return_page_text, json_response, add_html and transparent_status_code keep their meaning.How much does ScrapingBee cost?
Does the ScrapingBee Python SDK work with SpecStream?
scrapingbee 2.2.0 works when you set client.HTML_API_URL = "https://api.specstream.ai/scrapingbee/api/v1/" and pass a SpecStream key, as tested on production on Nov 10, 2026. html_api() runs unchanged.Does SpecStream charge for a failed page?
500 and costs nothing, a page with no main text costs nothing, and a busy call gets 429 with Retry-After and costs nothing.Which ScrapingBee fields does SpecStream not return?
Spb-* headers, and in the JSON form headers, cost, cookies, xhr, screenshot, metadata, iframes, evaluate_results and js_scenario_report. The JSON keeps body, initial-status-code, resolved-url, type and html.Sources
SpecStream wrote this page. Each ScrapingBee figure comes from ScrapingBee'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.
- ScrapingBee pricingscrapingbee.com/pricing/, read Nov 10, 2026
- ScrapingBee documentationscrapingbee.com/documentation/, read Nov 10, 2026
- SpecStream ScrapingBee pass tablespecstream.ai/specstream/dialects/scrapingbee.md, read Nov 10, 2026
- ScraperAPI pricingscraperapi.com/pricing/, read Nov 10, 2026
- ZenRows pricingdocs.zenrows.com/first-steps/pricing.md, read Nov 10, 2026
- Scrapfly pricingscrapfly.io/pricing, read Nov 10, 2026
- Scrapfly billingscrapfly.io/docs/scrape-api/billing, read Nov 10, 2026
- Firecrawl pricingfirecrawl.dev/pricing, read Nov 10, 2026
- SpecStream benchmarksspecstream.ai/benchmarks, read Nov 10, 2026
- SpecStream for agentsspecstream.ai/agents.md, read Nov 10, 2026




