> SpecStream is the live web data engine for teams and agents. This is the Markdown copy of https://specstream.ai/docs/integrations/official-sdks. Every page, with what SpecStream does and costs: https://specstream.ai/llms.txt

# 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](https://specstream.ai/workspace/search?route=tavily&utm_source=official-sdks&utm_medium=howto) as `api_key`:

Python

```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](https://specstream.ai/workspace/search?route=exa&utm_source=official-sdks&utm_medium=howto) as `api_key`. `search` and `search_and_contents` both work:

Python

```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](https://specstream.ai/workspace/search?route=firecrawl&utm_source=official-sdks&utm_medium=howto) as `apiKey`. `search` and `scrape` both work:

JavaScript

```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](https://specstream.ai/workspace/search?route=firecrawl&utm_source=official-sdks&utm_medium=howto) as `api_key`. The Python SDK adds `/v2` itself, so the address has no path. `search` and `scrape` both work:

Python

```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](https://specstream.ai/docs/search-api.md) has the details.

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

## Your key

[Get your key](https://specstream.ai/workspace/search?route=tavily&utm_source=official-sdks&utm_medium=howto) 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](https://specstream.ai/docs/integrations/drop-in-search.md).
