Skip to the page

Migrate from SearXNG

One address, the same JSON, no instance to run.

Since November 9, 2026 SpecStream answers SearXNG's JSON search at https://api.specstream.ai/searxng, with no instance, no Valkey and no upstream engines to keep unblocked. Each call is one search of 10 results at $0.005.

Set your instance address to https://api.specstream.ai/searxng/<key>. The key can also go in key=, in X-API-Key, as a Bearer token, or as the Basic password or user name.

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 page.

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

A SearXNG instance to SpecStream, parameter by parameter and field by field

SpecStream (`/searxng`)SearXNG
Addresshttps://api.specstream.ai/searxng/<key>, or .../searxng/<key>/search where the setting takes the whole search address. /searxng and /searxng/search answer GET and a form POSTGET /, GET /search, POST / and POST /search on your instance
KeyRead in this order: a path part (/searxng/<key>/search), key= in the address, X-API-Key, then Authorization as Bearer or as HTTP Basic (the password, else the user name, so https://<key>@api.specstream.ai/searxng and https://:<key>@api.specstream.ai/searxng both work). A wrong key gets a 401No key. A public instance is open to everyone who has access to its URL
`format`json, always on, and the default when the field is left out. html, csv and rss get a 403 with "Send format=json."Must be listed under search: formats in settings.yml. An unset format returns 403 Forbidden, and many public instances have these formats disabled
`q`Read as the search, with operators such as site:Passed to the external search services, with the syntax of each service
`pageno`Read, default 1, in pages of 10 results. Page 1 runs the fast search; each page is $0.005. A page past the last result gets a 400Search page number, default 1
`time_range`Read: day, week, month or year, applied as a date filter on the searchTime range of search for engines which support it
`categories`, `language`, `safesearch`, `engines`Accepted with no error. The first of categories is printed as each result's category; the others do not change the searchcategories is a comma separated list; language and safesearch (0, 1 or 2) default from the search: settings
The replyquery, number_of_results, results[], answers (the answer, on page 1 when the search has one), corrections, infoboxes, suggestions and unresponsive_engines, plus specstream with the request ID and the pricequery, results, answers, corrections, infoboxes, suggestions and unresponsive_engines
Each resulturl, title, content, engine (specstream), engines, parsed_url, template, positions, score (highest first), category and publishedDate, which is null on most results. thumbnail and img_src are emptyThe results of each engine the instance queried, merged and ordered
Always empty herecorrections, infoboxes, suggestions and unresponsive_engines come back as empty lists, so a parser that reads them keeps workingunresponsive_engines lists the engines that failed, with their errors
Upstream blockingNone to manage. One account takes up to 8,800 searches a minute; a call over that gets a 429 with Retry-After and is not chargedAn engine that answers with a CAPTCHA is suspended for 86400 seconds by default, too many requests for 3600, access denied for 86400
What you runNothing. GET /searxng/config answers for clients that check the address, at no chargeDocker or Podman, a Valkey database for the limiter, and a reverse proxy that sets X-Forwarded-For
Price$0.005 a call of 10 results, paid from a balance. $10 of credit on sign up, no card, covers 2,000 searchesFree software you host yourself

What changes and what stays when you move from SearXNG

Other hosted options in place of SearXNG

How SpecStream scores

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

How to move from SearXNG

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 instance address to https://api.specstream.ai/searxng/<key>, or https://api.specstream.ai/searxng/<key>/search where the setting holds the whole search address. In Python:

import os
import requests

BASE = "https://api.specstream.ai/searxng"  # was https://searx.example.org

reply = requests.get(
    f"{BASE}/search",
    params={"q": "open source vector databases", "format": "json", "pageno": 1},
    headers={"X-API-Key": os.environ["SPECSTREAM_API_KEY"]},
).json()

for result in reply["results"]:
    print(result["title"], result["url"], result["content"])

In JavaScript:

const BASE = "https://api.specstream.ai/searxng"; // was https://searx.example.org

const params = new URLSearchParams({ q: "open source vector databases", format: "json" });
const reply = await fetch(`${BASE}/search?${params}`, {
  headers: { "X-API-Key": process.env.SPECSTREAM_API_KEY },
}).then((response) => response.json());

for (const result of reply.results) {
  console.log(result.title, result.url, result.content);
}

3. Keep format=json, pageno and time_range. Treat publishedDate as optional.

4. Turn off the instance when your app runs on the new address. 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 SearXNG alternative for an app or an agent?
SpecStream, at $0.005 a search of 10 results. It answers SearXNG's JSON search at https://api.specstream.ai/searxng in the same shape, so the client keeps its setting, and it scores 97.9 F-score on all 1,000 SimpleQA Verified questions.
Is there a SearXNG alternative I do not have to self host?
Yes. SpecStream's SearXNG address runs nothing on your side: no Docker, no Valkey and no reverse proxy. Set the instance address to https://api.specstream.ai/searxng/<key> and it answers in SearXNG's JSON.
Why does SearXNG return 403 for format=json?
Because json is not listed under search: formats in the instance's settings.yml, and SearXNG returns 403 for a format that is not set. SpecStream's address always answers format=json.
Where does the SpecStream key go?
In five places, read in this order: the path (/searxng/<key>), key= in the address, X-API-Key, a Bearer token, or HTTP Basic as the password or the user name.
Is there a free SearXNG alternative?
New SpecStream accounts get $10 of credit with no card, which covers 2,000 searches. After that a search costs $0.005, and credit you buy never expires.
Does SearXNG have an API rate limit?
An instance can turn on its limiter, which needs a Valkey database, and upstream engines that answer with a CAPTCHA are suspended for 86400 seconds by default. SpecStream takes up to 8,800 searches a minute on one account.

Sources

SpecStream wrote this page. The route's behavior is read from its code; SearXNG's behavior from its own docs and source, and each other figure from that company's own page.

  1. SearXNG Search APIdocs.searxng.org/dev/search_api.html, read Nov 10, 2026
  2. SearXNG settings, searchdocs.searxng.org/admin/settings/settings_search.html, read Nov 10, 2026
  3. SearXNG, why use a private instancedocs.searxng.org/own-instance.html, read Nov 10, 2026
  4. SearXNG, installation with Dockerdocs.searxng.org/admin/installation-docker.html, read Nov 10, 2026
  5. SearXNG limiterdocs.searxng.org/admin/searx.limiter.html, read Nov 10, 2026
  6. SearXNG source, JSON replyraw.githubusercontent.com/searxng/searxng/master/searx/webutils.py, read Nov 10, 2026
  7. SearXNG on GitHubgithub.com/searxng/searxng, read Nov 10, 2026
  8. Brave Search APIbrave.com/search/api/, read Nov 9, 2026
  9. Tavily API creditsdocs.tavily.com/documentation/api-credits.md, read Nov 9, 2026
  10. Exa pricingexa.ai/docs/admin/pricing.md, read Nov 9, 2026
  11. SpecStream benchmarksspecstream.ai/benchmarks, read Nov 10, 2026
  12. SpecStream pricingspecstream.ai/pricing, read Nov 10, 2026
  13. SpecStream for agentsspecstream.ai/agents.md, read Nov 10, 2026