<!-- twin of https://specstream.ai/migrate/serpstack -->
# serpstack compatible: change the address, keep the JSON

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

serpstack's Basic plan is $29.99 a month for 5,000 searches, and each search over the plan costs $0.023992. SpecStream answers the same `GET /search` in serpstack's JSON at $0.005 a search, with no plan.

The switch is one line: `https://api.specstream.ai/serpstack` in place of `https://api.serpstack.com`, and a SpecStream key as `access_key`. The parameters and the parser stay.

SpecStream scores 97.9 F-score on all 1,000 SimpleQA Verified questions, with a median of 0.82 s a search. A new account gets $10 of credit, no card.

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

## serpstack to SpecStream, parameter by parameter and field by field

| | SpecStream | serpstack |
|---|---|---|
| Address | `GET https://api.specstream.ai/serpstack/search` | `GET https://api.serpstack.com/search` |
| The key | A SpecStream key as `access_key` in the address | A serpstack key as `access_key` in the address |
| Results and dates | `num`, `page`, `period` (`last_hour` to `last_year`, or `custom` with `period_start` and `period_end`), `gl`, `hl`, `safe`, and `type=news` with `sort=date` | Google results as JSON or CSV, with search types |
| Each result | `position`, `title`, `url`, `domain`, `displayed_url` and `snippet`; news adds `source_name`, `uploaded` and `uploaded_utc`. Not returned: `sitelinks`, `cached_page_url`, `related_pages_url`, `prerender`, `rich_snippet` | Organic results, news results and more result types |
| Errors | serpstack's `{"success": false, "error": {"code", "type", "info"}}`: `401` with no key, `400` for `type=images` (314) or `engine=bing` (311). A busy call gets `429` with `Retry-After` and is not charged | The same error body with codes such as 104 when the monthly allowance is used |
| Price | $5 per 1,000 searches of up to 10 results, with no plan. 100 results cost $0.059 a call | Basic $29.99 a month for 5,000 searches, then $0.023992 each. Business $99.99 for 20,000, then $0.019998 each |
| Free to start | $10 of credit, no card, which covers 2,000 searches | 100 searches a month, for non-commercial use |

## The serpstack reference, on SpecStream

### The call, before and after

```
# Before
curl "https://api.serpstack.com/search?access_key=$SERPSTACK_KEY&query=mcdonalds"

# After
curl "https://api.specstream.ai/serpstack/search?access_key=$SPECSTREAM_API_KEY&query=mcdonalds"
```

serpstack's own Python example is a plain `requests.get` call, so the change is the address and the key in that one line: `requests.get("https://api.specstream.ai/serpstack/search", {"access_key": SPECSTREAM_KEY, "query": "mcdonalds"})`.

### What the route reads, and what it refuses

Read and applied: `query`, `num`, `page`, `period` (`last_hour`, `last_day`, `last_week`, `last_month`, `last_year`, or `custom` with `period_start` and `period_end` as YYYY-MM-DD), `gl`, `hl`, `safe`, `type=news`, `sort=date` on news, and `pagination.next_page_url` for the next page.

Refused, in serpstack's own error body: `type=images` gets `400` with code 314, `engine=bing` gets 311, an unknown `period` gets 316, and a call with no `access_key` gets `401`. Every parameter was measured on production on Nov 10, 2026, and the full [pass table](https://specstream.ai/specstream/dialects/serpstack.md) lists each one and its result.

### Every field that comes back

The reply has `request` with `success`, `processed_timestamp` and `total_time_taken`, `search_parameters` with `engine`, `query`, `type`, `page` and `num`, `search_information` with `total_results`, `time_taken_displayed`, `query_displayed` and `no_results_for_original_query`, `organic_results[]` or `news_results[]`, and `pagination` with `current_page`, `next_page_url` and `other_page_urls`.

The route does not return `request.search_url`, `search_parameters` `device`, `google_domain`, `hl` and `gl`, `did_you_mean`, `showing_results_for`, `detected_location`, a news item's `thumbnail_url`, nor `ads`, `answer_box`, `knowledge_graph`, `local_results`, `related_questions`, `related_searches`, `inline_images` and `top_stories`.

### One price a search, and no overage

On serpstack Basic each search over the 5,000 in the plan costs $0.023992. On SpecStream every call of up to 10 results costs $0.005, each started block of 10 more adds $0.006, and there is no plan to renew. A busy call gets `429` with `Retry-After` and charges nothing. Credit you buy never expires.

### The most accurate web search API, in about one second

On SimpleQA Verified the SpecStream Search API scores 97.9 F-score on all 1,000 official questions, 978 of them correct. On WideSearch it scores 64.0 item F1 and 43.4 row F1 on all 200 official tasks. The Extract API scores 0.908 F1 on WCXB. Every score and its method is on the [benchmarks](https://specstream.ai/benchmarks?utm_source=alternatives&utm_campaign=migrate-serpstack) page.

Every drop-in route runs the fast search. Measured on production on November 9, 2026, its median was 0.82 s at 1 search a second and 1.07 s at 20 a second, the 95th percentile stayed between 1.09 and 1.73 s, and it answered 718 of 720. There is no limit per key and no daily limit.

### You decide what is kept, on each key

Create the key with `zero_retention` and a search 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}'
```

### Search, pages and rows on one 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-serpstack) 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-serpstack) 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 else serpstack users price

### SerpApi

Google results on monthly plans: Starter is $25 for 1,000 searches with 200 an hour, Developer $75 for 5,000. SpecStream charges $0.005 a search with no plan, and answers SerpApi's call at `https://api.specstream.ai/serpapi` too.

### VALUE SERP

Google results at $2.50 per 1,000 on pay as you go, or 25,000 searches for $50 a month. SpecStream answers VALUE SERP's call at `https://api.specstream.ai/valueserp`, AI Overview included at the price of one search.

### Serper

Google results in credit packs from $1.00 per 1,000 for 50,000 credits, with 2,500 free queries. SpecStream answers Serper's call at `https://api.specstream.ai/serper`, and its credit never expires.

### DataForSEO

SERP data at $2 per 1,000 in Live Mode, with a minimum account top-up of $50. SpecStream answers DataForSEO's live organic call at `https://api.specstream.ai/dataforseo` and starts with $10 of credit, no card.

## 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/serpstack/search` where your code has `https://api.serpstack.com/search`, and send the SpecStream key as `access_key`. In Python:

```
import requests

URL = "https://api.specstream.ai/serpstack/search"  # was https://api.serpstack.com/search

reply = requests.get(URL, {"access_key": SPECSTREAM_KEY, "query": "mcdonalds", "num": 10}, timeout=30)
reply.raise_for_status()
for result in reply.json()["organic_results"]:
    print(result["position"], result["title"], result["url"])
```

3. In JavaScript:

```
const url = new URL("https://api.specstream.ai/serpstack/search");
url.search = new URLSearchParams({ access_key: process.env.SPECSTREAM_KEY, query: "mcdonalds" });
const data = await (await fetch(url)).json();
for (const result of data.organic_results) console.log(result.title, result.url);
```

4. Follow `pagination.next_page_url` for the next page, and read `429` as a call to send again after `Retry-After`. It is not charged.

## Frequently asked questions

### Is there a serpstack compatible API?

Yes. SpecStream answers serpstack's `GET /search` at `https://api.specstream.ai/serpstack` in serpstack's JSON, as measured on production on Nov 10, 2026. A search of up to 10 results costs $0.005.

### How do I migrate from serpstack?

Change one address: `https://api.serpstack.com` becomes `https://api.specstream.ai/serpstack`, and a SpecStream key goes in `access_key`. `query`, `num`, `page`, `period`, `gl`, `hl`, `safe` and `type=news` keep their meaning.

### How much does serpstack cost?

Basic is $29.99 a month for 5,000 searches with $0.023992 for each search over, and Business $99.99 for 20,000. The free plan has 100 searches a month for non-commercial use. SpecStream costs $5 per 1,000 searches with no plan.

### Is there a serpstack SDK whose address I can change?

serpstack's own examples are plain HTTP calls in Python and Node.js, so the change is the address in that one line. The same holds for `fetch` and curl.

### Does SpecStream return serpstack news results?

Yes. `type=news` returns `news_results[]` with `title`, `url`, `source_name`, `uploaded`, `uploaded_utc` and `snippet`, newest first with `sort=date`, at $0.005 a call.

### Which serpstack fields does SpecStream not return?

`ads`, `answer_box`, `knowledge_graph`, `local_results`, `related_questions`, `related_searches`, `inline_images` and `top_stories`, and a result's `sitelinks`, `cached_page_url`, `related_pages_url`, `prerender` and `rich_snippet`. Each result keeps `position`, `title`, `url`, `domain`, `displayed_url` and `snippet`.

## Sources

SpecStream wrote this page. Each serpstack figure comes from serpstack'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.

- [serpstack pricing](https://serpstack.com/pricing), read Nov 10, 2026
- [serpstack documentation](https://serpstack.com/documentation), read Nov 10, 2026
- [SpecStream serpstack pass table](https://specstream.ai/specstream/dialects/serpstack.md), read Nov 10, 2026
- [SerpApi pricing](https://serpapi.com/pricing.md), read Nov 10, 2026
- [VALUE SERP pricing](https://trajectdata.com/serp/value-serp-api/pricing/), read Nov 10, 2026
- [Serper](https://serper.dev/), read Nov 10, 2026
- [DataForSEO SERP API pricing](https://dataforseo.com/apis/serp-api), 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
