Open source web search API in 2026
SearXNG's JSON, nothing to run.
The open-source web search APIs are free code you host: SearXNG, OpenSERP, DDGS and DonSeTch. Each sends your queries to Google, Bing or DuckDuckGo from your own IP, and the engines answer heavy use with CAPTCHAs, rate limits or bans.
SpecStream is the live web data engine. Its Search API answers SearXNG's own JSON at one address, with no server, at $1 per 1,000 searches. New accounts get $10 of credit, no card.
New accounts get $10 of credit, no card. It covers 10,000 searches.
SpecStream and the open-source search APIs, from each project's own docs
| SpecStream | SearXNG | OpenSERP | DDGS | DonSeTch | |
|---|---|---|---|---|---|
| What it is | A hosted Search API, GET /v1/web-search, that also answers the calls of SearXNG, Tavily, Exa, Brave, Serper, Firecrawl and Crawl4AI at their own paths | A metasearch engine that aggregates results from various search services and databases | A REST API and CLI for Google, Bing, Yandex, Baidu, DuckDuckGo and Ecosia | A Python metasearch library, with an optional API server built on FastAPI | One Rust binary with four tools for agents: fetch, search, crawl and screenshot |
| What you run | Nothing. One address and a key: https://api.specstream.ai/searxng/<key> | Your own instance: a working Docker or Podman installation, and a Valkey database for the limiter | One Go binary or Docker image, with Chromium loading each rendered results page | pip install -U ddgs[api], then ddgs api, on port 4479 by default | A local process. The first build compiles BoringSSL from source and downloads V8 |
| When engines push back | The search behind the address is ours to run. A busy call gets a 429 with Retry-After, and nothing is charged | Public use can make engines enforce CAPTCHAs or ban the instance's IP. A CAPTCHA suspends that engine for 86,400 seconds by default | Engines can return CAPTCHAs, rate limits or unrelated results, and browser mode does not stop them. The README's advice: another engine or a proxy | You pass a proxy for the HTTP client (http, https or socks5) | Keyless search rate-limits without a proxy, because it hits engines from your IP. CAPTCHA walls need a paid unlocker key |
| The reply | SearXNG's results[] with title, url and content on every key, or SpecStream's own data.sources[], with the answer and the page it was read from | JSON only when the admin turns it on. Requesting an unset format returns 403 Forbidden, and many public instances have it disabled | The same JSON for all six engines, with each result's source engine and rank | Separate endpoints: /search/text, /search/images, /search/news, /search/videos and /search/books | Ranked URLs and snippets |
| License and terms | A paid API with no plan to buy: you pay for the calls you make, under the spending limit you set on each key | AGPL-3.0 | MIT | Its README says the library is for educational purposes only | AGPL-3.0 |
| Price | $1 per 1,000 searches of up to 10 results on every drop-in address and speed=fast, $5 per 1,000 on the default search. A call that returns no results costs nothing | Free software, on a server you pay for | No per-query fees: you cover compute and proxies. The hosted OpenSERP Cloud is $0.0078 a credit | Free library, on a server and proxies you pay for | No keys and $0, on your machine and your IP |
Why teams that self-host search move to SpecStream
Keep the open-source client, drop the server
Many open-source AI apps take a SearXNG address for web search. SpecStream answers that call at one address, so the app keeps its SearXNG setting and gets results[] back as before. Where the setting takes the whole search address, use https://api.specstream.ai/searxng/<key>/search. The apps set up this way are on web search for your AI app.
# Before: your own instance
curl "http://localhost:8080/search?q=open+source+vector+databases&format=json"
# After: nothing to host
curl "https://api.specstream.ai/searxng/$SPECSTREAM_API_KEY/search?q=open+source+vector+databases&format=json"The same key answers the open-source scrapers too: Firecrawl's search, scrape, map and crawl at https://api.specstream.ai/firecrawl, and a Crawl4AI server's /crawl, /crawl/stream and /md at https://api.specstream.ai/crawl4ai. The step by step move from an instance is on Migrate from SearXNG.
No IP of yours for the engines to block
A self-hosted search API asks Google, Bing and DuckDuckGo from your server's address. SearXNG suspends an engine for a day after a CAPTCHA, OpenSERP's README says browser mode does not stop CAPTCHAs, and DonSeTch's says keyless search rate-limits without a proxy. With SpecStream the engines never see your address, and a call stopped by a busy search costs nothing.
The most accurate web search API
SpecStream scores 97.9 F-score on all 1,000 official SimpleQA Verified questions (978 correct), and 64.0 item F1 and 43.4 row F1 on all 200 official WideSearch tasks. The Extract API scores 0.908 F1 on WCXB. Each score and its method is on the benchmarks page.
The privacy you self-hosted for, set on the key
Zero retention is a field on each key: a search made with it keeps no request text and no answer after the reply, and the charge keeps only the account, the key, the request ID, the price and the time. A second field, eu_egress_only, sends every search from our server in Madrid, straight to each engine, never through a proxy in another country.
POST https://api.specstream.ai/v1/account/keys
{
"name": "search",
"scopes": ["account:read", "finds:spend"],
"spend_cap_cents": 500000,
"zero_retention": true,
"eu_egress_only": true
}Search, pages and rows on one key
The Extract API returns the main text of up to 20 pages or documents (PDF, Word, Excel) a call at $0.80 per 1,000 pages, and a page with no text is not charged. Deep Search returns every match on the live web as structured rows at 5¢, 15¢ or $1 a row, with the most a run can cost quoted before it starts. Agents connect to https://api.specstream.ai/mcp.
The open-source web search APIs, one by one
SpecStream
The live web data engine. Its Search API answers SearXNG's JSON at https://api.specstream.ai/searxng/<key> for $1 per 1,000 searches, with nothing to host, and scores 97.9 F-score on all 1,000 SimpleQA Verified questions. The Extract API reads pages at $0.80 per 1,000, and Deep Search returns structured rows at 5¢, 15¢ or $1 a row.
SearXNG
An AGPL-3.0 metasearch engine you host with Docker or Podman and a Valkey database. JSON is off until the admin adds it to the formats list, and a CAPTCHA suspends an engine for 86,400 seconds by default. SpecStream answers the same format=json call on every key.
OpenSERP
An MIT REST API and CLI over six engines, in one Go binary or Docker image, that loads each results page in Chromium and reads up to 20 URLs in a batch. You cover compute and proxies, or pay $0.0078 a credit on its Cloud. SpecStream searches and reads pages on one key, with no browser of yours to run.
DDGS
A Python metasearch library with ten text backends, from Bing and Brave to Mojeek and Yahoo, and an API server on port 4479. Its README says it is for educational purposes only. SpecStream is a paid API with a key, a spending limit and a request log for every call.
DonSeTch
An AGPL-3.0 Rust binary that fetches, searches, crawls and takes screenshots with no keys, across 10+ search backends. Its README says keyless search rate-limits without a proxy and that CAPTCHA walls need an unlocker key. SpecStream reads pages through the Extract API, retrying a refused page as a browser, then from the site's feed, then from its newest archive capture.
How SpecStream scores
The same numbers as the benchmarks page, from the official tasks and scorers.
How to switch from a self-hosted search API
1. Create a key under Agents & API in the workspace. A new account gets $10 of credit, no card, which covers 10,000 searches.
2. Put https://api.specstream.ai/searxng/<key> where your app asks for the SearXNG URL. Code that calls the instance changes one address:
import requests
reply = requests.get(
"https://api.specstream.ai/searxng/search", # was http://localhost:8080/search
headers={"X-API-Key": SPECSTREAM_KEY},
params={"q": "open source vector databases", "format": "json", "pageno": 1},
).json()
for result in reply["results"]:
print(result["title"], result["url"], result["content"])3. Or call the Search API directly. With speed=fast a search of up to 10 results is $0.001:
const reply = await fetch(
"https://api.specstream.ai/v1/web-search?" + new URLSearchParams({ q: "open source vector databases", speed: "fast" }),
{ headers: { Authorization: `Bearer ${process.env.SPECSTREAM_KEY}` } },
).then((r) => r.json());
for (const source of reply.data.sources) console.log(source.title, source.url, source.snippet);4. Give the key a spending limit, then shut the instance down. Every call is in the request log at GET https://api.specstream.ai/v1/account/requests, with its price.
Frequently asked questions
Something we didn't answer? Talk to a human
What is the best open source web search API?
https://api.specstream.ai/searxng/<key> for $1 per 1,000 searches, with no server to run, and scores 97.9 F-score on all 1,000 SimpleQA Verified questions. The open-source projects (SearXNG, OpenSERP, DDGS, DonSeTch) are free code you host and keep unblocked.Is there a web search API with no API key?
Why does my self-hosted search get CAPTCHAs?
Can I keep my SearXNG settings?
https://api.specstream.ai/searxng/<key> and keep format=json and pageno. The reply has SearXNG's results[] with title, url and content.Does SpecStream keep my searches?
eu_egress_only on the key sends every search from our server in Madrid.How much does SpecStream cost next to a self-hosted search API?
Sources
SpecStream wrote this page. Each figure about another project comes from that project's own docs or README.
- SearXNG Search APIdocs.searxng.org/dev/search_api.html, read Nov 12, 2026
- SearXNG settings, searchdocs.searxng.org/admin/settings/settings_search.html, read Nov 12, 2026
- SearXNG limiterdocs.searxng.org/admin/searx.limiter.html, read Nov 12, 2026
- SearXNG, why use a private instancedocs.searxng.org/own-instance.html, read Nov 12, 2026
- SearXNG installation with Dockerdocs.searxng.org/admin/installation-docker.html, read Nov 12, 2026
- SearXNG READMEgithub.com/searxng/searxng, read Nov 12, 2026
- OpenSERP READMEgithub.com/karust/openserp, read Nov 12, 2026
- DDGS READMEgithub.com/deedy5/ddgs, read Nov 12, 2026
- DonSeTch READMEgithub.com/dondai44423/donsetch, read Nov 12, 2026
- SpecStream benchmarksspecstream.ai/benchmarks, read Nov 12, 2026
- SpecStream pricingspecstream.ai/pricing, read Nov 12, 2026
- SpecStream for agentsspecstream.ai/agents.md, read Nov 12, 2026




