<!-- twin of https://specstream.ai/migrate -->
# Search API migration guides: change one address and keep your code

Compared on Nov 10, 2026. The page: https://specstream.ai/migrate

SpecStream answers 23 search and page APIs on their own paths, in their own JSON: Google Custom Search JSON, Bing Web Search v7, Tavily, Exa, Brave, Serper, Firecrawl v2, SearXNG, Open WebUI's external search, and since November 10, 2026 Perplexity, You.com, Parallel, Linkup, Kagi, SerpApi, SearchApi, Zenserp, VALUE SERP, Bocha, Jina Search, Jina Reader, Tavily Extract and Exa Contents.

The switch is one line. Put the SpecStream address where your client has the old API's address, send a SpecStream key where the old key went, and the code that reads the reply stays as it is.

It is the most accurate web search API in the world: 97.9 F-score on all 1,000 SimpleQA Verified questions and 64.0 item F1 on all 200 WideSearch tasks, on the [benchmarks](https://specstream.ai/benchmarks?utm_source=alternatives&utm_campaign=migrate) page. A search costs $0.005, which is $5 per 1,000.

[Get an API key](https://specstream.ai/signup?src=alternatives-migrate&utm_source=alternatives-md&utm_campaign=migrate&returnTo=%2Fworkspace%2Fsearch%3Froute%3Dgoogle) New accounts get $10 of credit, no card. It covers 2,000 searches.

## Each drop-in route next to the API it answers, with the day it went live

| | SpecStream | The API you call today |
|---|---|---|
| Google Custom Search JSON API | `https://api.specstream.ai/customsearch/v1`, the key in `key=`. `cx` is accepted and not used. Live since Nov 9, 2026. [Google Custom Search migration guide](https://specstream.ai/migrate/google-custom-search?utm_source=alternatives&utm_campaign=migrate) | `https://www.googleapis.com/customsearch/v1`, the key in `key=` and a search engine ID in `cx`. Closed to new customers, and Google ends it for existing customers on January 1, 2027 |
| Bing Web Search API v7 | `https://api.specstream.ai/v7.0/search`, the key in `Ocp-Apim-Subscription-Key`. Live since Nov 9, 2026. [Bing Web Search v7 migration guide](https://specstream.ai/migrate/bing-web-search-v7?utm_source=alternatives&utm_campaign=migrate) | `https://api.bing.microsoft.com/v7.0/search`, the key in `Ocp-Apim-Subscription-Key`. Microsoft retired the Bing Search APIs on August 11, 2025 |
| Tavily | `https://api.specstream.ai/tavily`, then `POST /tavily/search`. The key as a Bearer token or in `api_key`. Live since Nov 9, 2026. [Tavily migration guide](https://specstream.ai/migrate/tavily?utm_source=alternatives&utm_campaign=migrate) | `https://api.tavily.com`, then `POST /search`. The key as a Bearer token |
| Exa | `https://api.specstream.ai/exa`, then `POST /exa/search`. The key in `x-api-key` or as a Bearer token. Live since Nov 9, 2026. [Exa migration guide](https://specstream.ai/migrate/exa?utm_source=alternatives&utm_campaign=migrate) | `https://api.exa.ai`, then `POST /search`. The key in `x-api-key` |
| Brave Search API | `https://api.specstream.ai/res/v1/web/search`, the key in `X-Subscription-Token`. $0.005 a call of up to 10 results, and a call with no `count` returns 10. Live since Nov 9, 2026. [Brave migration guide](https://specstream.ai/migrate/brave?utm_source=alternatives&utm_campaign=migrate) | `https://api.search.brave.com/res/v1/web/search`, the key in `X-Subscription-Token` |
| Serper | `https://api.specstream.ai/serper`, then `POST /serper/search`. The key in `X-API-KEY`. Live since Nov 9, 2026. [Serper migration guide](https://specstream.ai/migrate/serper?utm_source=alternatives&utm_campaign=migrate) | `https://google.serper.dev`, then `POST /search`. The key in `X-API-KEY` |
| Firecrawl v2 | `https://api.specstream.ai/firecrawl`, then `POST /firecrawl/v2/search` for one search and `POST /firecrawl/v2/scrape` for one page at $0.0008. The key as a Bearer token. Called over HTTP or from the JavaScript SDK. Live since Nov 9, 2026. [Firecrawl migration guide](https://specstream.ai/migrate/firecrawl?utm_source=alternatives&utm_campaign=migrate) | `https://api.firecrawl.dev`, then `POST /v2/search` and `POST /v2/scrape`. The key as a Bearer token |
| SearXNG | `https://api.specstream.ai/searxng/<key>`, or `https://api.specstream.ai/searxng/<key>/search` where the setting takes the whole search address. The key can also go in `key=`, `X-API-Key` or a Bearer token. Live since Nov 9, 2026. [SearXNG migration guide](https://specstream.ai/migrate/searxng?utm_source=alternatives&utm_campaign=migrate) | The address of an instance you run, `GET /search?q=...&format=json`, with no key |
| Open WebUI external search | External Web Search URL `https://api.specstream.ai/openwebui/search` and External Web Loader URL `https://api.specstream.ai/openwebui/loader`, the key in each API key field. Live since Nov 9, 2026. [Open WebUI setup](https://specstream.ai/web-search/open-webui?utm_source=alternatives&utm_campaign=migrate) | The address of a search server you run, in External Web Search URL |
| Perplexity Search API | Base `https://api.specstream.ai/perplexity`, `POST /perplexity/search`, the key as a Bearer token. The `perplexityai` SDK takes it as `base_url`. Live since Nov 10, 2026. [Perplexity migration guide](https://specstream.ai/migrate/perplexity?utm_source=alternatives&utm_campaign=migrate) | `https://api.perplexity.ai/search`, the key as a Bearer token |
| You.com Search API | Base `https://api.specstream.ai/you`, `GET` or `POST /you/v1/search`, the key in `X-API-Key`. Live since Nov 10, 2026. [You.com migration guide](https://specstream.ai/migrate/you?utm_source=alternatives&utm_campaign=migrate) | `https://ydc-index.io/v1/search`, the key in `X-API-Key` |
| Parallel Search API | Base `https://api.specstream.ai/parallel`, `POST /parallel/v1/search`, the key in `x-api-key`. The `parallel-web` SDK takes it as `base_url`. Live since Nov 10, 2026. [Parallel migration guide](https://specstream.ai/migrate/parallel?utm_source=alternatives&utm_campaign=migrate) | `https://api.parallel.ai/v1/search`, the key in `x-api-key` |
| Linkup | Base `https://api.specstream.ai/linkup/v1`, `POST` or `GET /linkup/v1/search`, the key as a Bearer token. The `linkup-sdk` takes it as `base_url`. Live since Nov 10, 2026. [Linkup migration guide](https://specstream.ai/migrate/linkup?utm_source=alternatives&utm_campaign=migrate) | `https://api.linkup.so/v1/search`, the key as a Bearer token |
| Kagi Search API | Base `https://api.specstream.ai/kagi/api/v1`, `POST /search`, the key as a Bearer token. The older `GET /kagi/api/v0/search` answers too. Live since Nov 10, 2026. [Kagi migration guide](https://specstream.ai/migrate/kagi?utm_source=alternatives&utm_campaign=migrate) | `https://kagi.com/api/v1/search`, the key as a Bearer token |
| SerpApi | Base `https://api.specstream.ai/serpapi`, `GET /serpapi/search.json` with `engine=google`, the key as `api_key`. Live since Nov 10, 2026. [SerpApi migration guide](https://specstream.ai/migrate/serpapi?utm_source=alternatives&utm_campaign=migrate) | `https://serpapi.com/search.json`, the key as `api_key` |
| SearchApi | Base `https://api.specstream.ai/searchapi`, `GET /searchapi/api/v1/search?engine=google`, the key as `api_key` or a Bearer token. Live since Nov 10, 2026. [SearchApi migration guide](https://specstream.ai/migrate/searchapi?utm_source=alternatives&utm_campaign=migrate) | `https://www.searchapi.io/api/v1/search`, the key as `api_key` or a Bearer token |
| Zenserp | Base `https://api.specstream.ai/zenserp/api/v2`, `GET` or `POST /search`, the key in the `apikey` header. Live since Nov 10, 2026. [Zenserp migration guide](https://specstream.ai/migrate/zenserp?utm_source=alternatives&utm_campaign=migrate) | `https://app.zenserp.com/api/v2/search`, the key in the `apikey` header |
| VALUE SERP | Base `https://api.specstream.ai/valueserp`, `GET /valueserp/search`, the key as `api_key`. Live since Nov 10, 2026. [VALUE SERP migration guide](https://specstream.ai/migrate/valueserp?utm_source=alternatives&utm_campaign=migrate) | `https://api.valueserp.com/search`, the key as `api_key` |
| Bocha Web Search | Base `https://api.specstream.ai/bocha`, `POST /bocha/v1/web-search`, the key as a Bearer token. Live since Nov 10, 2026. [Bocha migration guide](https://specstream.ai/migrate/bocha?utm_source=alternatives&utm_campaign=migrate) | `https://api.bochaai.com/v1/web-search`, the key as a Bearer token |
| Jina Search | Base `https://api.specstream.ai/jina-search`, `GET` or `POST` with `q`, the key as a Bearer token. Live since Nov 10, 2026. [Jina Search migration guide](https://specstream.ai/migrate/jina-search?utm_source=alternatives&utm_campaign=migrate) | `https://s.jina.ai`, the key as a Bearer token |
| Jina Reader | `POST https://api.specstream.ai/jina` with `url` in the body, the key as a Bearer token. A page read costs $0.0008. Live since Nov 10, 2026. [Jina Reader migration guide](https://specstream.ai/migrate/jina?utm_source=alternatives&utm_campaign=migrate) | `https://r.jina.ai/`, the key as a Bearer token |
| Tavily Extract | `POST https://api.specstream.ai/tavily/extract`, the same base and key as Tavily search. `tavily-python` `extract()` works unchanged. A page read costs $0.0008. Live since Nov 10, 2026. [Tavily Extract migration guide](https://specstream.ai/migrate/tavily-extract?utm_source=alternatives&utm_campaign=migrate) | `https://api.tavily.com/extract`, the key as a Bearer token |
| Exa Contents | `POST https://api.specstream.ai/exa/contents`, the same base and key as Exa search. `exa-py` `get_contents()` works unchanged. A page read costs $0.0008. Live since Nov 10, 2026. [Exa Contents migration guide](https://specstream.ai/migrate/exa-contents?utm_source=alternatives&utm_campaign=migrate) | `https://api.exa.ai/contents`, the key in `x-api-key` |

## What changes when your client points at SpecStream

### One line changes: the address

Each route reads the request your client sends today and answers in the JSON it reads today. This is a Google Custom Search call, before and after.

```
# Before
curl "https://www.googleapis.com/customsearch/v1?key=$GOOGLE_API_KEY&cx=$CX&q=who+founded+Mistral+AI"

# After
curl "https://api.specstream.ai/customsearch/v1?key=$SPECSTREAM_API_KEY&cx=$CX&q=who+founded+Mistral+AI"
```

Every search on a route is one web search on your key, with the same limits and the same history as `GET /v1/web-search`. Parameters a route does not use, such as Google's `cx`, are accepted, so your code sends them as before.

### What comes back, and what does not

The reply keeps the old API's field names: Google's `items[]` with `title`, `link` and `snippet`, Bing's `webPages.value[]`, Tavily's and Exa's `results[]`, Brave's `web.results[]`, Serper's `organic[]`, Firecrawl's `data.web[]` and SearXNG's `results[]`. Each reply also carries a `specstream` field your parser can ignore.

Three fields do not come back today: Tavily's `published_date`, Brave's `page_age`, and Exa's `score`, `summary`, image and favicon. Exa's `author` is `null`. Each guide lists every parameter and field of its API.

### $0.005 a search, and a failed call costs nothing

A search of up to 10 results costs $0.005, which is $5 per 1,000. Each started block of 10 more results adds $0.006, up to 100 results a search. A call stopped by a `429` charges nothing, and credit you buy never expires.

A new account gets $10 of credit with no card, which covers 2,000 searches.

### The most accurate web search API, at about one second a call

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. The method and each score are on the [benchmarks](https://specstream.ai/benchmarks?utm_source=alternatives&utm_campaign=migrate) page.

Every drop-in call runs the fast search unless it asks for page text, the answer or results past the first ten. On November 9, 2026 production answered 718 of 720 searches at 1 to 20 a second, with a median of 0.82 s at 1 a second and 1.07 s at 20 a second, and the 95th percentile between 1.09 and 1.73 s. One account takes up to 8,800 searches a minute; a call over that gets a `429` with `Retry-After` and is not charged.

### Nothing is kept on a zero retention key

Create a key with `zero_retention` and a search made with it keeps no request text and no answer after the reply, in the history or in a log line. `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 and finished rows on the same key

The same key reads up to 20 pages or documents a call with the [Extract API](https://specstream.ai/extract-api?utm_source=alternatives&utm_campaign=migrate) at $0.80 per 1,000 pages, and a page with no text is not charged. [Deep Search](https://specstream.ai/deep-search?utm_source=alternatives&utm_campaign=migrate) 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.

## What the old vendors point you to instead

### Vertex AI Search

Google's suggestion on the Custom Search page, for searching up to 50 domains. For full web search the page asks you to contact Google and express your interest. SpecStream searches the whole live web from the first call, on the path your code already uses, at $5 per 1,000 searches.

### Grounding with Bing Search

Microsoft's path after the Bing Search APIs: a tool inside Azure AI agents at $14 per 1,000 transactions, and developers do not get the raw content it returns. SpecStream answers the Bing v7 call your code sends, with each result's name, URL and snippet, at $5 per 1,000.

### Parallel Search API

Web search from $1 per 1,000 requests, with a guide to move Exa, Tavily and Brave calls to its own Search API, so the call and the parser are rewritten. On SpecStream the call and the JSON stay as they are, Parallel's own included: the [Parallel migration guide](https://specstream.ai/migrate/parallel?utm_source=alternatives&utm_campaign=migrate) changes one address. The score is 97.9 on all 1,000 SimpleQA Verified questions.

## How to switch

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. Find your API in the table and put its SpecStream address where your client keeps the old one. The key goes where the old key went. This is a Tavily client in Python:

```
import os, requests

reply = requests.post(
    "https://api.specstream.ai/tavily/search",  # was https://api.tavily.com/search
    headers={"Authorization": f"Bearer {os.environ['SPECSTREAM_API_KEY']}"},
    json={"query": "Who founded Mistral AI and when?", "max_results": 5},
)
for result in reply.json()["results"]:
    print(result["title"], result["url"])
```

3. Run your own questions and compare the answers. The guide for your API has the call in curl, Python and JavaScript.

## Frequently asked questions

### Is there a drop-in replacement for the Google Custom Search JSON API?

Yes, since November 9, 2026: SpecStream answers `GET /customsearch/v1` at `https://api.specstream.ai` in Google's JSON, at $5 per 1,000 searches. Google closed the API to new customers and ends it for existing customers on January 1, 2027. The [migration guide](https://specstream.ai/migrate/google-custom-search?utm_source=alternatives&utm_campaign=migrate) maps each parameter and field.

### What replaces the Bing Search API v7?

SpecStream, at `https://api.specstream.ai/v7.0/search` since November 9, 2026. Microsoft retired the Bing Search APIs on August 11, 2025. Your code keeps its `Ocp-Apim-Subscription-Key` header and reads `webPages.value` as before, at $5 per 1,000 searches. See the [Bing v7 guide](https://specstream.ai/migrate/bing-web-search-v7?utm_source=alternatives&utm_campaign=migrate).

### Can I switch search API without changing code?

Yes, for 23 APIs: you change the base address and the key. Google Custom Search, Bing v7, Tavily, Exa, Brave, Serper, Firecrawl v2, SearXNG, Open WebUI's external search, Perplexity, You.com, Parallel, Linkup, Kagi, SerpApi, SearchApi, Zenserp, VALUE SERP, Bocha, Jina Search, Jina Reader, Tavily Extract and Exa Contents are answered on their own paths, in their own JSON. The live list is at `GET https://api.specstream.ai/v1/search-dialects`, which needs no key.

### How much does a search cost after the switch?

$0.005 for a search of up to 10 results, which is $5 per 1,000, on every route. Each started block of 10 more results adds $0.006, a Firecrawl scrape or an Open WebUI loader page costs $0.0008, and a call stopped by a `429` costs nothing.

### Which fields does a drop-in route not return?

Three APIs have fields that do not come back today: Tavily's `published_date`, Brave's `page_age`, and Exa's `score`, `summary`, image and favicon. Every other field your parser reads is there, and each guide lists them one by one.

### How fast is a drop-in call?

About one second. Measured on production on November 9, 2026, the median was 0.82 s at 1 search a second and 1.07 s at 20 a second, with the 95th percentile between 1.09 and 1.73 s.

## Sources

SpecStream wrote this page. Each vendor's address and figure comes from that company's own page or documentation.

- [Google Custom Search JSON API overview](https://developers.google.com/custom-search/v1/overview), read Nov 10, 2026
- [Microsoft: Bing Search APIs retiring on August 11, 2025](https://learn.microsoft.com/en-us/lifecycle/announcements/bing-search-api-retirement), read Nov 10, 2026
- [Microsoft: Grounding with Bing pricing](https://www.microsoft.com/en-us/bing/apis/grounding-pricing), read Nov 10, 2026
- [Microsoft: Grounding with Bing Search tools](https://learn.microsoft.com/en-us/azure/foundry/agents/how-to/tools/bing-tools), read Nov 10, 2026
- [Parallel pricing](https://parallel.ai/pricing), read Nov 10, 2026
- [Parallel, migrate to Parallel](https://docs.parallel.ai/search/migrate-to-parallel), read Nov 10, 2026
- [SpecStream benchmarks](https://specstream.ai/benchmarks), read Nov 10, 2026
- [SpecStream for agents](https://specstream.ai/agents.md), read Nov 10, 2026
