Skip to the page

Firecrawl migration

Change the base address, keep search and scrape.

Since November 9, 2026 SpecStream answers Firecrawl v2 search and scrape at https://api.specstream.ai/firecrawl, in Firecrawl's JSON. A search costs $0.005 for up to 10 results and a scrape $0.0008 a page, from a balance, with no monthly plan.

Change https://api.firecrawl.dev to https://api.specstream.ai/firecrawl and send a SpecStream key as the Bearer token. POST /v2/search and POST /v2/scrape keep their bodies.

97.9 F-score on all 1,000 SimpleQA Verified questions for search, and 0.908 F1 on WCXB for the Extract API that answers each scrape, on the benchmarks page.

New accounts get $10 of credit, no card. It covers 2,000 searches.

Firecrawl v2 to SpecStream, parameter by parameter and field by field

SpecStream (`/firecrawl/v2`)Firecrawl
Addresshttps://api.specstream.ai/firecrawl, so the calls are POST /firecrawl/v2/search and POST /firecrawl/v2/scrape. A setting that holds the version takes https://api.specstream.ai/firecrawl/v2https://api.firecrawl.dev, with POST /v2/search and POST /v2/scrape
KeyYour SpecStream key as Authorization: Bearer, or as the HTTP Basic password. No key gets a 401Your Firecrawl key as Authorization: Bearer
Search: `query` and `limit`Read. limit is 1 to 100, default 5. Up to 10 results cost $0.005 and run the fast search; 100 cost $0.059The search body with query and limit. A search takes 2 credits
Search: `includeDomains`, `excludeDomains`, `tbs`Read as site filters and as a date filter (qdr: or cdr with cd_min and cd_max)Fields of the search body
Search: `scrapeOptions.formats` with `markdown`Read. Each result then carries markdown: the text of its page closest to the query, up to about 3,500 characters, and metadata. Same price; it runs the default searchAsks for each result's page as markdown, as LobeHub sends it with a limit of 20
Search: `timeout`, `ignoreInvalidURLs` and other fieldsAccepted with no error and not usedFields Open WebUI sends with its search
Search replysuccess: true, data.web[] with url, title, description and position, id, and specstream with the price of the call. data.web is the only list in datasuccess: true and data.web[] with url, title and description, and markdown when asked
Scrape: `url`Read. One page or document (PDF, Word, Excel) through the Extract API. Other formats are accepted; the reply is markdownThe page to scrape, with the formats you want back
Scrape replysuccess: true, data.markdown (the main text, without menus, footers and ads) and data.metadata with sourceURL, url, statusCode, title and publishedTime when the page gives one. data.html and data.rawHtml are not returneddata.markdown, data.html, data.rawHtml and data.metadata
A page that gives no textsuccess: false with a 500 and the reason, and nothing is charged. A page that refuses a plain read is tried as a browser would ask, then in a real browser, then from the site's feed, then from its newest archive capturesuccess: false with an error
Price$0.005 a search of up to 10 results and $0.0008 a page, paid from a balance. Credit you top up never expiresMonthly plans in credits: Hobby $19 a month for 5,000, Standard $99 a month for 100,000, Scale $749 a month for 1,000,000
Before you pay$10 of credit on sign up, no card: 2,000 searches or 12,500 pagesA free plan of 500 searches or 1,000 pages scraped, at 10 requests a minute

What changes and what stays when you move from Firecrawl

Other options when you leave Firecrawl

How SpecStream scores

The same numbers as the benchmarks page, from the official tasks and scorers.

How to move from Firecrawl

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 base address to https://api.specstream.ai/firecrawl where your code has https://api.firecrawl.dev, and send the SpecStream key as the Bearer token. In Python:

import os
import requests

BASE = "https://api.specstream.ai/firecrawl"  # was https://api.firecrawl.dev
HEADERS = {"Authorization": f"Bearer {os.environ['SPECSTREAM_API_KEY']}"}

found = requests.post(
    f"{BASE}/v2/search",
    json={"query": "open source vector databases", "limit": 5},
    headers=HEADERS,
).json()
for result in found["data"]["web"]:
    print(result["title"], result["url"], result["description"])

page = requests.post(
    f"{BASE}/v2/scrape",
    json={"url": found["data"]["web"][0]["url"]},
    headers=HEADERS,
).json()
print(page["data"]["metadata"].get("title"), page["data"]["markdown"][:500])

In JavaScript:

const BASE = "https://api.specstream.ai/firecrawl"; // was https://api.firecrawl.dev
const headers = {
  Authorization: `Bearer ${process.env.SPECSTREAM_API_KEY}`,
  "Content-Type": "application/json",
};

const found = await fetch(`${BASE}/v2/search`, {
  method: "POST",
  headers,
  body: JSON.stringify({ query: "open source vector databases", limit: 5 }),
}).then((response) => response.json());

for (const result of found.data.web) {
  console.log(result.title, result.url, result.description);
}

3. Keep limit, includeDomains, excludeDomains and tbs as they are. Add scrapeOptions with formats: ["markdown"] when you want the part of each page closest to the query in the search reply.

4. Read data.markdown from a scrape, and treat data.html and data.rawHtml as optional. Each reply carries the price of the call under specstream.

Frequently asked questions

Something we didn't answer? Talk to a human

What is the best Firecrawl alternative?
SpecStream, at $0.005 a search and $0.0008 a page with no monthly plan. It answers Firecrawl's v2 search and scrape at https://api.specstream.ai/firecrawl in Firecrawl's JSON, and its Extract API scores 0.908 F1 on WCXB.
How do I migrate from Firecrawl?
Change one base address and one key. Replace https://api.firecrawl.dev with https://api.specstream.ai/firecrawl and send a SpecStream key as the Bearer token. POST /v2/search and POST /v2/scrape keep their bodies.
Is there a cheaper Firecrawl alternative?
SpecStream charges $0.005 a search and $0.0008 a page from a balance, and credit you top up never expires. Firecrawl's Standard plan is $99 a month for 100,000 credits, and a search takes 2 credits.
Is there a free Firecrawl alternative?
New SpecStream accounts get $10 of credit with no card, which covers 2,000 searches or 12,500 pages. A page that gives no text is not charged.
Does search with `scrapeOptions` return the whole page?
It returns up to about 3,500 characters per result: the text of the page closest to the query. For the whole page, call /v2/scrape for $0.0008.
Does the Firecrawl SDK work with SpecStream?
The JavaScript SDK works with its API address set to https://api.specstream.ai/firecrawl. The Python SDK works with api_url="https://api.specstream.ai", and so do the Firecrawl loaders of GPT Researcher, LangChain and LlamaIndex.
Is there a Firecrawl alternative for Claude?
Yes. SpecStream's MCP server is at https://api.specstream.ai/mcp, and its read_pages tool reads up to 20 pages or documents a call at $0.80 per 1,000 pages.

Sources

SpecStream wrote this page. The route's behavior is read from its code; each rival figure comes from that company's own page.

  1. Firecrawl pricingfirecrawl.dev/pricing, read Nov 9, 2026
  2. Exa pricingexa.ai/docs/admin/pricing.md, read Nov 9, 2026
  3. Tavily pricingtavily.com/pricing, read Nov 9, 2026
  4. Brave Search APIbrave.com/search/api/, read Nov 9, 2026
  5. Serperserper.dev/, read Nov 9, 2026
  6. SerpApi pricingserpapi.com/pricing, read Nov 9, 2026
  7. SpecStream benchmarksspecstream.ai/benchmarks, read Nov 10, 2026
  8. SpecStream pricingspecstream.ai/pricing, read Nov 10, 2026
  9. SpecStream for agentsspecstream.ai/agents.md, read Nov 10, 2026