Firecrawl v1 compatible
Change the address.
Since November 10, 2026 SpecStream answers Firecrawl's v1 API, /v1/scrape, /v1/search, /v1/map and /v1/crawl, in v1's own JSON. A search costs $0.005 for up to 10 results and a page $0.0008, from a balance, with no monthly plan.
The switch is one line: V1FirecrawlApp(api_key=KEY, api_url="https://api.specstream.ai/firecrawl") in place of V1FirecrawlApp(api_key="fc-..."). The v1 paths, the crawl's next and your parser stay.
The SpecStream Search API scores 97.9 F-score on SimpleQA Verified and the Extract API 0.908 F1 on WCXB. A new account gets $10 of credit, no card.
New accounts get $10 of credit, no card. It covers 2,000 searches.
Firecrawl v1 to SpecStream, parameter by parameter and field by field
| SpecStream | Firecrawl v1 | |
|---|---|---|
| Address | https://api.specstream.ai/firecrawl, then /v1/scrape, /v1/search, /v1/map and /v1/crawl | https://api.firecrawl.dev/v1, then /scrape, /search, /map and /crawl |
| The key | A SpecStream key as Authorization: Bearer | A Firecrawl key as a Bearer token |
| Scrape | url and formats with markdown, html, rawHtml and links applied. The site's own status in metadata.statusCode | url, formats (default markdown) and page options. 1 credit a page |
| Search | query, limit, tbs, lang, country, site: and scrapeOptions.formats applied. Up to 10 results $0.005 | query, limit (default 5, up to 100), tbs, scrapeOptions. 2 credits per 10 results |
| Map | url, limit, search, sitemapOnly, ignoreSitemap, includeSubdomains and ignoreQueryParameters applied. links as strings | The same parameters, limit default 5,000. 1 credit a call |
| Crawl | url, limit, maxDepth, maxDiscoveryDepth, includePaths and scrapeOptions.formats applied. Up to 500 pages a job | The same parameters, limit defaults to 10,000. 1 credit a page |
| Errors | Firecrawl's own: 404 for an unknown crawl id, 401 for a wrong key. A busy call gets 429 with Retry-After and is not charged | 402 payment required, 429 request rate limit exceeded, 500 |
| Price | $0.005 a search, $0.80 per 1,000 pages, from a balance. $19 pays for 3,800 searches or 23,750 pages | Hobby $19 a month for 5,000 credits. Standard $99 a month for 100,000 |
| Free to start | $10 of credit, no card, which covers 2,000 searches or 12,500 pages | 1,000 free credits a month, no card |
The Firecrawl v1 reference, on SpecStream
The call, before and after
# Before
curl https://api.firecrawl.dev/v1/search \
-H "Authorization: Bearer $FIRECRAWL_API_KEY" -H "Content-Type: application/json" \
-d '{"query": "web scraping history", "limit": 5}'
# After
curl https://api.specstream.ai/firecrawl/v1/search \
-H "Authorization: Bearer $SPECSTREAM_API_KEY" -H "Content-Type: application/json" \
-d '{"query": "web scraping history", "limit": 5}'The reply is v1's: success and data[], each result with url, title, description, and markdown when scrapeOptions.formats asks for it.
With firecrawl-py 4.55.0 the change is one line: V1FirecrawlApp(api_key=KEY, api_url="https://api.specstream.ai/firecrawl"). The client keeps the address's path and calls /firecrawl/v1/..., so scrape_url, search, map_url, async_crawl_url, check_crawl_status and cancel_crawl run as before.
What the route reads, and what it refuses
Scrape, applied: url and formats with markdown, html, rawHtml and links. A page the site answers 404 comes back with metadata.statusCode 404, as on Firecrawl.
Search, applied: query, limit, operators such as site:, tbs such as qdr:w, lang and country, and scrapeOptions.formats with markdown for the page text of each result.
Map, applied: url, limit, search, sitemapOnly, ignoreSitemap, includeSubdomains and ignoreQueryParameters (on by default). Crawl, applied: url, limit, maxDepth, maxDiscoveryDepth, includePaths and scrapeOptions.formats, up to 500 pages a job, with the status read and DELETE to cancel.
Refused, in Firecrawl's own status and body: an unknown crawl id gets 404 and a wrong key gets 401. 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
A scrape returns data with markdown, html, rawHtml, links and metadata (title, sourceURL, statusCode, error). A search returns success and data[] with url, title, description, markdown and metadata. A map returns links as strings. A crawl status read returns success, status, total, completed, creditsUsed, expiresAt, next and data[].
The route does not return screenshot, metadata.description or metadata.language on a scrape.
One price a search, one price a page
On Firecrawl a search is 2 credits per 10 results and a page or a map 1 credit, from a monthly plan: Hobby is $19 for 5,000 credits. On SpecStream a search of up to 10 results costs $0.005, each started block of 10 more adds $0.006, a page costs $0.0008 and a page that gives no text costs nothing. A busy call gets 429 with Retry-After and charges nothing. Credit you buy never expires.
Speed, measured on production
On November 9, 2026 the fast search every drop-in route uses had a median of 0.82 s at 1 search a second and 1.07 s at 20 a second, and answered 718 of 720 calls. There is no limit per key and no daily limit.
Scored on the official benchmarks
The SpecStream 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. 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 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 address answers Firecrawl's v2 calls too, so a client can move to /v2 with no new key. The key reads up to 20 pages or documents a call with the Extract API. 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 full comparison is on the Firecrawl migration page.
What else Firecrawl v1 users price
Firecrawl v2
Firecrawl's newer API, on the same credits: Hobby is $19 a month for 5,000 credits. SpecStream answers v2's search, scrape, map and crawl at the same address, https://api.specstream.ai/firecrawl.
Tavily
Search and extract billed in credits at $0.008 a credit on pay as you go. SpecStream answers Tavily's call at https://api.specstream.ai/tavily at $0.005 a search.
Exa
A search API from $4 per 1,000 requests, with page contents at $1 per 1,000 pages. SpecStream answers Exa's own call at https://api.specstream.ai/exa and reads pages at $0.80 per 1,000.
Serper
Google results as JSON, in credit packs from $1.00 per 1,000 that are valid for 6 months. SpecStream answers Serper's call at https://api.specstream.ai/serper, reads the pages too, and its credit never expires.
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 2,000 searches.
2. Set the address to https://api.specstream.ai/firecrawl where your code has https://api.firecrawl.dev, and send the SpecStream key as the Bearer token. A scrape in Python:
import requests
BASE = "https://api.specstream.ai/firecrawl" # was https://api.firecrawl.dev
reply = requests.post(
f"{BASE}/v1/scrape",
headers={"Authorization": f"Bearer {SPECSTREAM_KEY}"},
json={"url": "https://en.wikipedia.org/wiki/Web_scraping", "formats": ["markdown", "links"]},
timeout=60,
)
reply.raise_for_status()
data = reply.json()["data"]
print(data["metadata"]["statusCode"], len(data["markdown"]), len(data["links"]))3. A map in JavaScript:
const reply = await fetch("https://api.specstream.ai/firecrawl/v1/map", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.SPECSTREAM_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({ url: "https://quotes.toscrape.com/", search: "einstein", limit: 20 }),
});
const { links } = await reply.json();
console.log(links);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 Firecrawl v1 compatible API?
/v1/scrape, /v1/search, /v1/map and /v1/crawl at https://api.specstream.ai/firecrawl in v1's JSON, as measured on production. A search costs $0.005.How do I migrate from Firecrawl v1?
https://api.firecrawl.dev becomes https://api.specstream.ai/firecrawl, and a SpecStream key goes in the Bearer token. The v1 paths and bodies stay as they are.How much does Firecrawl cost?
Does the Firecrawl Python SDK's v1 client work with SpecStream?
V1FirecrawlApp in firecrawl-py 4.55.0 works with api_url="https://api.specstream.ai/firecrawl", as tested on production on Nov 10, 2026: scrape, search, map, crawl, status and cancel.Do I have to move from v1 to v2 first?
Which Firecrawl v1 fields does SpecStream not return?
screenshot, metadata.description and metadata.language on a scrape. A crawl job reads up to 500 pages. Every other field a v1 client reads comes back.Sources
SpecStream wrote this page. Each Firecrawl figure comes from Firecrawl'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.
- Firecrawl pricingfirecrawl.dev/pricing, read Nov 10, 2026
- Firecrawl v1 scrapedocs.firecrawl.dev/api-reference/v1-endpoint/scrape, read Nov 10, 2026
- Firecrawl v1 searchdocs.firecrawl.dev/api-reference/v1-endpoint/search, read Nov 10, 2026
- Firecrawl v1 crawldocs.firecrawl.dev/api-reference/v1-endpoint/crawl-post, read Nov 10, 2026
- SpecStream Firecrawl v1 pass tablespecstream.ai/specstream/dialects/firecrawl_v1.md, read Nov 10, 2026
- Tavily pricingtavily.com/pricing, read Nov 10, 2026
- Exa pricingexa.ai/docs/admin/pricing.md, read Nov 10, 2026
- Serperserper.dev/, read Nov 10, 2026
- SpecStream benchmarksspecstream.ai/benchmarks, read Nov 10, 2026
- SpecStream for agentsspecstream.ai/agents.md, read Nov 10, 2026




