Skip to the page

Tavily, Exa and Firecrawl SDKs

For developers whose code already calls a search vendor's own SDK: the same code runs on the Search API once you pass one more argument to the client.

Keep the SDK and your calls as they are. Give the client the SpecStream address and your key in place of YOUR_SPECSTREAM_KEY, and read the key from the environment in your own code.

tavily-python

Pass api_base_url to TavilyClient, with your key as api_key:

Python
from tavily import TavilyClient
client = TavilyClient(api_key="YOUR_SPECSTREAM_KEY", api_base_url="https://api.specstream.ai/tavily")
response = client.search("latest SEC rule on climate disclosure", max_results=5)
for result in response["results"]:
print(result["title"], result["url"])

exa-py

Pass base_url to Exa, with your key as api_key. search and search_and_contents both work:

Python
from exa_py import Exa
exa = Exa(api_key="YOUR_SPECSTREAM_KEY", base_url="https://api.specstream.ai/exa")
response = exa.search("latest SEC rule on climate disclosure", num_results=5)
for result in response.results:
print(result.title, result.url)

@mendable/firecrawl-js

Pass apiUrl to the client, with your key as apiKey. search and scrape both work:

JavaScript
import Firecrawl from "@mendable/firecrawl-js";
const firecrawl = new Firecrawl({ apiKey: "YOUR_SPECSTREAM_KEY", apiUrl: "https://api.specstream.ai/firecrawl" });
const results = await firecrawl.search("latest SEC rule on climate disclosure", { limit: 5 });
for (const result of results.web ?? []) console.log(result.title, result.url);
const page = await firecrawl.scrape("https://example.com", { formats: ["markdown"] });
console.log(page.markdown);

firecrawl-py

Pass api_url to the client, with your key as api_key. The Python SDK adds /v2 itself, so the address has no path. search and scrape both work:

Python
from firecrawl import Firecrawl
firecrawl = Firecrawl(api_key="YOUR_SPECSTREAM_KEY", api_url="https://api.specstream.ai")
results = firecrawl.search("latest SEC rule on climate disclosure", limit=5)
for result in results.web or []:
print(result.title, result.url)
page = firecrawl.scrape("https://example.com", formats=["markdown"])
print(page.markdown)

Cost

Each search is one Search API call at $5 per 1,000 searches of up to 10 results. It comes out of your balance, with no quote and no approval. Search API has the details.

A Firecrawl scrape is one Extract API page, at $0.80 per 1,000 pages.

Your key

Get your key on the Search API screen of your SpecStream workspace. New accounts start with $10 of credit, no card.

The same setting works in other tools too: Search API by one setting.