ScrapingAnt compatible
Change the address, keep the client.
ScrapingAnt sells monthly credits: Enthusiast is $19 for 100,000, and a page with its default browser takes 10. SpecStream answers the same /v2/general, /v2/extended and /v2/markdown calls at $0.80 per 1,000 pages.
The switch is one line: https://api.specstream.ai/scrapingant/v2 in place of https://api.scrapingant.com/v2, and a SpecStream key in x-api-key. The client and your parser stay.
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.
ScrapingAnt to SpecStream, parameter by parameter and field by field
| SpecStream | ScrapingAnt | |
|---|---|---|
| Address | GET https://api.specstream.ai/scrapingant/v2/general, /v2/extended and /v2/markdown | GET https://api.scrapingant.com/v2/general |
| The key | A SpecStream key in the x-api-key header or parameter | A ScrapingAnt key as x-api-key |
| Output | The page's HTML on /general, html, text and status_code on /extended, url and markdown on /markdown | The page's HTML on /v2/general |
| Errors | ScrapingAnt's {"detail"}: 403 for a wrong key, 422 with no key, 404 for a site that cannot be reached. A busy call gets 409 with Retry-After and is not charged | 403 for a wrong token, 409 past the free plan's one active request |
| Price | $0.0008 a page, $0.80 per 1,000, with no plan. A failed page costs nothing | Enthusiast $19 a month for 100,000 credits, Startup $49 for 500,000. A page with the default browser takes 10 credits |
| Free to start | $10 of credit, no card, which covers 12,500 pages | 10,000 free credits every month |
The ScrapingAnt reference, on SpecStream
The call, before and after
# Before
curl -G https://api.scrapingant.com/v2/general \
-H "x-api-key: $SCRAPINGANT_API_KEY" \
--data-urlencode "url=https://en.wikipedia.org/wiki/Web_scraping"
# After
curl -G https://api.specstream.ai/scrapingant/v2/general \
-H "x-api-key: $SPECSTREAM_API_KEY" \
--data-urlencode "url=https://en.wikipedia.org/wiki/Web_scraping"With ScrapingAnt's Python client, scrapingant-client 2.1.0, the change is one line before you build the client: scrapingant_client.client.SCRAPINGANT_API_BASE_URL = "https://api.specstream.ai/scrapingant/v2". Then ScrapingAntClient(token=SPECSTREAM_KEY), general_request() and markdown_request() run as before.
What the route reads, and what it refuses
Read and applied: url on /v2/general, /v2/extended and /v2/markdown, and the key in the x-api-key header the client sends or as the x-api-key parameter of the documented curl. A page the site does not have comes back with its own 404 in status_code.
Refused, in ScrapingAnt's {"detail"} form: a site that cannot be reached gets 404, a wrong key 403 and a missing key 422, as the client expects them. An account with no credit left gets 403, as on ScrapingAnt. Every parameter was measured on production on Nov 10, 2026, and the full pass table lists each one and its result.
What comes back
/v2/general returns the page's HTML. /v2/extended, which the Python client's general_request() reads, returns html, text and status_code, the page's own status, with cookies as an empty string. /v2/markdown returns url and markdown.
/v2/extended has no headers, xhrs or iframes, and the Ant-page-status-code and Ant-credits-cost response headers are not sent.
One price a page, no credits to count
On ScrapingAnt a page with the default browser takes 10 credits and a simple request 1. 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 409, ScrapingAnt's status for too many requests at once, 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 ScrapingAnt users price
Scrape.do
A scraping API sold by monthly credits: Hobby is $29 for 250,000, and a rendered page takes 5 credits. SpecStream answers Scrape.do's own ?token=&url= call at /scrapedo, at $0.0008 a page with no plan.
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/scrapingant/v2 where your code has https://api.scrapingant.com/v2, and send the SpecStream key in x-api-key. In Python:
import requests
URL = "https://api.specstream.ai/scrapingant/v2/markdown" # was https://api.scrapingant.com/v2/markdown
reply = requests.get(URL, {"url": "https://en.wikipedia.org/wiki/Web_scraping"}, headers={"x-api-key": SPECSTREAM_KEY}, timeout=60)
reply.raise_for_status()
print(reply.json()["markdown"][:500])3. In JavaScript:
const url = new URL("https://api.specstream.ai/scrapingant/v2/extended");
url.search = new URLSearchParams({ url: "https://en.wikipedia.org/wiki/Web_scraping" });
const page = await (await fetch(url, { headers: { "x-api-key": process.env.SPECSTREAM_KEY } })).json();
console.log(page.status_code, page.text.slice(0, 200));4. Read 409 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 ScrapingAnt compatible API?
/v2/general, /v2/extended and /v2/markdown at https://api.specstream.ai/scrapingant/v2 in ScrapingAnt's form, as measured on production on Nov 10, 2026. A page costs $0.0008.How do I migrate from ScrapingAnt?
https://api.scrapingant.com/v2 becomes https://api.specstream.ai/scrapingant/v2, and a SpecStream key goes in x-api-key. url and the three endpoints keep their meaning.How much does ScrapingAnt cost?
Does the ScrapingAnt Python client work with SpecStream?
scrapingant-client 2.1.0 works once scrapingant_client.client.SCRAPINGANT_API_BASE_URL is https://api.specstream.ai/scrapingant/v2, as tested on production on Nov 10, 2026. general_request() and markdown_request() run unchanged.Is a failed page charged?
404, as on ScrapingAnt. A read page costs $0.0008.What does SpecStream not return from ScrapingAnt's API?
headers, xhrs and iframes of /v2/extended, its cookies, and the Ant-page-status-code and Ant-credits-cost headers. The page comes back as HTML, text or markdown with its status_code.Sources
SpecStream wrote this page. Each ScrapingAnt figure comes from ScrapingAnt'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.
- ScrapingAnt pricingscrapingant.com/price-scraping-api, read Nov 10, 2026
- ScrapingAnt credits costdocs.scrapingant.com/credits-cost, read Nov 10, 2026
- ScrapingAnt errorsdocs.scrapingant.com/errors, read Nov 10, 2026
- ScrapingAnt API basicsdocs.scrapingant.com/api-basics, read Nov 10, 2026
- ScrapingAnt headless browserdocs.scrapingant.com/headless-browser, read Nov 10, 2026
- SpecStream ScrapingAnt pass tablespecstream.ai/specstream/dialects/scrapingant.md, read Nov 10, 2026
- Scrape.do pricingscrape.do/pricing/, 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




