Scrapfly compatible
Change the address, keep the client.
Scrapfly plans start at $30 a month for 200,000 credits, browser rendering adds 5 credits a request, and failed scrapes are billed once 30% of your traffic is blocked. SpecStream answers the same GET /scrape at $0.80 per 1,000 pages.
The switch is one line: https://api.specstream.ai/scrapfly in place of https://api.scrapfly.io, and a SpecStream key as key. In the Python SDK it is the host argument.
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.
Scrapfly to SpecStream, parameter by parameter and field by field
| SpecStream | Scrapfly | |
|---|---|---|
| Address | GET https://api.specstream.ai/scrapfly/scrape?url=&key= | GET https://api.scrapfly.io/scrape?url=&key= |
| The key | A SpecStream key as key, as the SDK sends it | The key parameter |
| Output | result.content as HTML, markdown or text with format, markdown:no_links honoured, and the page itself with proxified_response | The result JSON, with result.content holding the page |
| Errors | Scrapfly's own: a missing page gets 404 ERR::SCRAPE::BAD_UPSTREAM_RESPONSE, a host that does not resolve 422, a wrong key 401, no credit 429 ERR::SCRAPE::QUOTA_LIMIT_REACHED. A busy call gets 429 with Retry-After and is not charged | 401 for a missing or invalid key, 422 for a request it cannot handle, 429 Too Many Request |
| Failed requests | Never charged, and a page with no main text is not charged | Failed scrapes are not billed, until 30% or more of your traffic is blocked; then failed scrapes are billed |
| Price | $0.80 per 1,000 pages, the same for every page. $30 reads 37,500 pages | Discovery $30 a month for 200,000 credits, Pro $100 for 1,000,000. Browser rendering adds 5 credits, a residential proxy costs 25 |
| Free to start | $10 of credit, no card, which covers 12,500 pages | 1,000 API credits on signup, no credit card required |
The Scrapfly reference, on SpecStream
The call, before and after
# Before
curl -G https://api.scrapfly.io/scrape \
--data-urlencode "key=$SCRAPFLY_KEY" \
--data-urlencode "url=https://en.wikipedia.org/wiki/Web_scraping"
# After
curl -G https://api.specstream.ai/scrapfly/scrape \
--data-urlencode "key=$SPECSTREAM_API_KEY" \
--data-urlencode "url=https://en.wikipedia.org/wiki/Web_scraping"With Scrapfly's Python SDK, scrapfly-sdk 0.12.0, the change is the constructor: client = ScrapflyClient(key=SPECSTREAM_KEY, host="https://api.specstream.ai/scrapfly"). client.scrape(ScrapeConfig(url=...)) then runs as before.
What the route reads, and what it refuses
Read and applied: url, key, format with markdown or text and its options such as markdown:no_links, and proxified_response. A page the site does not have comes back as Scrapfly's 404 ERR::SCRAPE::BAD_UPSTREAM_RESPONSE, which the SDK raises as UpstreamHttpClientError.
Refused, in Scrapfly's own form: a host that does not resolve gets 422 and a wrong key gets 401, both raised by the SDK as ApiHttpClientError. 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
The reply has uuid, config with url and format, context, and result with status, success, status_code, reason, format, content, content_type, url, size and duration. result.log_url and result.error are present and empty on a page that was read.
The route does not return result.request_headers, response_headers, cookies, screenshots, iframes, browser_data, extracted_data, dns, ssl or content_encoding.
One price a page, and a failed page is free
On Scrapfly browser rendering adds 5 credits a request, a residential proxy costs 25, and failed scrapes are billed once 30% of your traffic is blocked. On SpecStream every page read costs $0.0008, which is $0.80 per 1,000, a failed page is never 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.
What else Scrapfly users price
ScrapingBee
A page API from $19 a month for 75,000 credits, where a default call with JavaScript costs 5 credits and credits don't roll over. SpecStream answers ScrapingBee's call at https://api.specstream.ai/scrapingbee/api/v1/ too, at $0.80 per 1,000 pages.
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/.
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/scrapfly/scrape where your code has https://api.scrapfly.io/scrape, and send the SpecStream key as key. In Python:
import requests
URL = "https://api.specstream.ai/scrapfly/scrape" # was https://api.scrapfly.io/scrape
reply = requests.get(
URL,
params={"key": SPECSTREAM_KEY, "url": "https://en.wikipedia.org/wiki/Web_scraping", "format": "markdown"},
timeout=60,
)
reply.raise_for_status()
result = reply.json()["result"]
print(result["status_code"], result["content"][:500])3. In JavaScript:
const url = new URL("https://api.specstream.ai/scrapfly/scrape");
url.search = new URLSearchParams({ key: process.env.SPECSTREAM_KEY, url: "https://en.wikipedia.org/wiki/Web_scraping", format: "text" });
const { result } = await (await fetch(url)).json();
console.log(result.status_code, result.content.length);4. Read 429 with Retry-After as a call to send again later. It is not charged.
Frequently asked questions
Something we didn't answer? Talk to a human
Is there a Scrapfly compatible API?
GET /scrape at https://api.specstream.ai/scrapfly with Scrapfly's result JSON and error codes, as measured on production on Nov 10, 2026. A page costs $0.0008.How do I migrate from Scrapfly?
https://api.scrapfly.io becomes https://api.specstream.ai/scrapfly, and a SpecStream key goes in key. url, format and proxified_response keep their meaning.How much does Scrapfly cost?
Does the Scrapfly Python SDK work with SpecStream?
scrapfly-sdk 0.12.0 works with host="https://api.specstream.ai/scrapfly" and a SpecStream key, as tested on production on Nov 10, 2026. client.scrape() runs unchanged.Does Scrapfly charge for failed scrapes?
429 with Retry-After at no charge.Which Scrapfly fields does SpecStream not return?
result fields: request_headers, response_headers, cookies, screenshots, iframes, browser_data, extracted_data, dns, ssl and content_encoding. result.content, status_code, url, size and duration come back.Sources
SpecStream wrote this page. Each Scrapfly figure comes from Scrapfly'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.
- Scrapfly pricingscrapfly.io/pricing, read Nov 10, 2026
- Scrapfly billingscrapfly.io/docs/scrape-api/billing, read Nov 10, 2026
- Scrapfly getting startedscrapfly.io/docs/scrape-api/getting-started, read Nov 10, 2026
- Scrapfly errorsscrapfly.io/docs/scrape-api/errors, read Nov 10, 2026
- SpecStream Scrapfly pass tablespecstream.ai/specstream/dialects/scrapfly.md, read Nov 10, 2026
- ScrapingBee pricingscrapingbee.com/pricing/, read Nov 10, 2026
- ScraperAPI pricingscraperapi.com/pricing/, read Nov 10, 2026
- ZenRows pricingdocs.zenrows.com/first-steps/pricing.md, read Nov 10, 2026
- Firecrawl pricingfirecrawl.dev/pricing, read Nov 10, 2026
- ScrapingBee documentationscrapingbee.com/documentation/, read Nov 10, 2026
- SpecStream benchmarksspecstream.ai/benchmarks, read Nov 10, 2026
- SpecStream for agentsspecstream.ai/agents.md, read Nov 10, 2026




