LibreChat web search
Set two URLs and search at $5 per 1,000.
LibreChat's web search needs three parts: a search provider, a scraper and a reranker. SpecStream fills the first two from one key, as the SearXNG search provider and as the Firecrawl scraper.
In .env, set SEARXNG_INSTANCE_URL=https://api.specstream.ai/searxng/YOUR_KEY and FIRECRAWL_API_URL=https://api.specstream.ai/firecrawl with your key in FIRECRAWL_API_KEY. In librechat.yaml, set searchProvider: searxng and scraperProvider: firecrawl.
SpecStream scores 97.9 F-score on all 1,000 SimpleQA Verified questions. A search costs $0.005 and a page $0.0008. A new account gets $10 of credit, no card, which covers 2,000 searches.
New accounts get $10 of credit, no card. It covers 2,000 searches.
The web search providers LibreChat offers, from each company's own pages on Nov 10, 2026
| SpecStream | Serper | Tavily | Firecrawl | Keenable | |
|---|---|---|---|---|---|
| Role in LibreChat | Search provider, through the SearXNG setting, and scraper, through the Firecrawl setting, on one key | Search provider and scraper | Search provider and scraper | Scraper only. LibreChat has no Firecrawl search step | Search provider and scraper |
| Price of a search | $5 per 1,000 searches, with up to 10 results a search | $1.00 per 1,000 in the pack of 50,000 credits | $0.008 a credit on pay as you go. A basic search is 1 credit and an advanced search 2 | Not a search provider in LibreChat. Its own search costs 2 credits per 10 results | Keyless by default. The public search endpoint is rate limited, and a key lifts the cap |
| Price of reading pages | $0.80 per 1,000 pages through /firecrawl/v2/scrape, and a page with no text is not charged | Serper's scraper at scrape.serper.dev, set only by the SERPER_SCRAPE_URL environment variable | A basic extract costs 1 credit for every 5 successful URLs | The free plan reads 1,000 pages a month. The Hobby plan is $19 a month | Keyless by default. The public fetch endpoint is rate limited, and a key lifts the cap |
| How you start | $10 of credit, no card. It covers 2,000 searches | 2,500 free queries, no credit card | 1,000 free credits every month | A free plan of 500 searches or 1,000 pages a month | No key needed for the public endpoints |
| How long credit lasts | Credit you buy never expires | Credits are valid for 6 months | On a monthly plan, requests stop when the month's credits run out | Monthly plans, from $19 a month for Hobby | No credit to buy for the public endpoints |
| Address setting in LibreChat | SEARXNG_INSTANCE_URL and FIRECRAWL_API_URL, in .env or librechat.yaml | None for search. The address is fixed in LibreChat's code at google.serper.dev/search | TAVILY_SEARCH_URL. A user can enter it only after the admin opts in | FIRECRAWL_API_URL, default https://api.firecrawl.dev | KEENABLE_API_URL and KEENABLE_FETCH_URL |
Why LibreChat admins set SpecStream as search and scraper
Two URLs and one key in the config you already have
LibreChat reads its web search settings from librechat.yaml, and each value can point to a variable in .env. SpecStream answers SearXNG's JSON at /searxng and Firecrawl's scrape at /firecrawl/v2/scrape, so both providers LibreChat already knows run on SpecStream.
# librechat.yaml
webSearch:
searchProvider: searxng
scraperProvider: firecrawl
searxngInstanceUrl: '${SEARXNG_INSTANCE_URL}'
firecrawlApiUrl: '${FIRECRAWL_API_URL}'
firecrawlApiKey: '${FIRECRAWL_API_KEY}'
jinaApiKey: '${JINA_API_KEY}' # your reranker stays as it is
# .env
SEARXNG_INSTANCE_URL=https://api.specstream.ai/searxng/YOUR_SPECSTREAM_KEY
FIRECRAWL_API_URL=https://api.specstream.ai/firecrawl
FIRECRAWL_API_KEY=<YOUR_SPECSTREAM_KEY>The key goes in the SearXNG address, so leave SEARXNG_API_KEY empty. LibreChat adds /search to the instance URL and /v2/scrape to the Firecrawl URL. These are the two calls it sends:
# The search LibreChat sends: it adds /search to the instance URL
curl "https://api.specstream.ai/searxng/$SPECSTREAM_API_KEY/search?q=latest+LibreChat+release&format=json"
# The page read LibreChat sends: it adds /v2/scrape to the Firecrawl URL
curl -X POST https://api.specstream.ai/firecrawl/v2/scrape \
-H "Authorization: Bearer $SPECSTREAM_API_KEY" -H "Content-Type: application/json" \
-d '{"url": "https://www.librechat.ai/docs"}'LibreChat blocks private and loopback addresses for web search, and https://api.specstream.ai is public, so it needs no entry in allowedAddresses.
Let each user bring a key
Leave SEARXNG_INSTANCE_URL out of .env and LibreChat asks each user for it in the chat interface. Each user then pastes https://api.specstream.ai/searxng/ followed by their own SpecStream key, and each search is billed to that key.
Already on Tavily? Change one URL
SpecStream answers Tavily's search call in Tavily's JSON. Point TAVILY_SEARCH_URL at SpecStream and send the SpecStream key in TAVILY_API_KEY. The URL is the whole endpoint, so it ends in /search.
# librechat.yaml
webSearch:
searchProvider: tavily
tavilySearchUrl: '${TAVILY_SEARCH_URL}'
# .env
TAVILY_SEARCH_URL=https://api.specstream.ai/tavily/search
TAVILY_API_KEY=<YOUR_SPECSTREAM_KEY>$0.005 a search and $0.0008 a page
A search of up to 10 results costs $0.005, and the SearXNG route always returns 10. Each page the scraper reads costs $0.0008, which is $0.80 per 1,000 pages, and a page with no text costs nothing. A call stopped by a 429 charges nothing.
There is no monthly plan, no credit pack that expires and no reset on the first of the month. Credit you buy never expires.
The most accurate web search API in the world
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 page.
About one second a search, measured under load
Every drop-in route runs on the fast search. On November 9, 2026 production took 1, 5, 10 and 20 searches a second through it and answered 718 of 720. The median was 0.82 s at 1 search a second and 1.07 s at 20 a second, and the 95th percentile stayed between 1.09 and 1.73 s. One account can send up to 8,800 searches a minute; a call over that gets a 429 with Retry-After and is not charged.
You decide what is kept, on each key
Give LibreChat a key with zero_retention and a search made with it keeps no request text and no answer after the reply. It is not in the history and its log lines carry neither. The charge keeps the account, the key, the request ID, the price and the time. 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 at $0.80 per 1,000 pages, and a page with no text is not charged. Deep Search takes a request in plain words and returns every match on the live web as structured rows, at 5¢, 15¢ or $1 a row, with a source URL on every value.
The other providers in LibreChat, and what each costs
Serper
Search sold in credit packs: $1.00 per 1,000 in the pack of 50,000, with credits valid for 6 months and 2,500 free queries to start. LibreChat fixes Serper's search address in its code. SpecStream searches the live web at $5 per 1,000 with credit that never expires, and reads the pages too.
Tavily
Search and extract billed in credits at $0.008 each on pay as you go, with 1,000 free credits a month. A basic extract costs 1 credit for every 5 successful URLs. SpecStream answers Tavily's own search call at https://api.specstream.ai/tavily/search at $0.005 a search.
Firecrawl
The scraper LibreChat names first. The free plan reads 1,000 pages a month and the Hobby plan costs $19 a month. Set FIRECRAWL_API_URL to https://api.specstream.ai/firecrawl and each page costs $0.0008, from the same key as your searches.
Keenable
A keyless search and fetch service. Its public endpoints are rate limited, and a key lifts the cap. SpecStream has no shared public limit: one account sends up to 8,800 searches a minute, and the search scores 97.9 F-score on all 1,000 SimpleQA Verified questions.
How SpecStream scores
The same numbers as the benchmarks page, from the official tasks and scorers.
How to set SpecStream as LibreChat's web search
1. Create a key under Agents & API in the SpecStream workspace. A new account gets $10 of credit, no card, which covers 2,000 searches.
2. Add the two addresses and the key to .env.
SEARXNG_INSTANCE_URL=https://api.specstream.ai/searxng/YOUR_SPECSTREAM_KEY
FIRECRAWL_API_URL=https://api.specstream.ai/firecrawl
FIRECRAWL_API_KEY=<YOUR_SPECSTREAM_KEY>3. In librechat.yaml, under webSearch, set searchProvider: searxng and scraperProvider: firecrawl, and keep your reranker key.
4. Restart LibreChat, turn on web search in a chat and ask a question. Each search and each page shows up in your SpecStream request log with its price.
Frequently asked questions
Something we didn't answer? Talk to a human
How do I enable web search in LibreChat?
.env cover the first two: SEARXNG_INSTANCE_URL=https://api.specstream.ai/searxng/YOUR_KEY and FIRECRAWL_API_URL=https://api.specstream.ai/firecrawl, with the key in FIRECRAWL_API_KEY.What is the LibreChat web search config in librechat.yaml?
searchProvider: searxng and scraperProvider: firecrawl under webSearch. The URLs come from ${SEARXNG_INSTANCE_URL} and ${FIRECRAWL_API_URL} in .env.Why is LibreChat web search not working?
FIRECRAWL_API_KEY is the same key; a wrong key gets a 401.Is there a free web search for LibreChat?
Which web search API is best for LibreChat?
Do I need to self-host SearXNG for LibreChat?
SEARXNG_INSTANCE_URL to https://api.specstream.ai/searxng/YOUR_KEY and SpecStream answers in SearXNG's JSON at $0.005 a search, with no instance to run and no allowedAddresses entry.Sources
SpecStream wrote this page. LibreChat's settings come from its source on GitHub, and each provider's figure from that company's own page.
- LibreChat librechat.example.yamlgithub.com/danny-avila/LibreChat/blob/main/librechat.example.yaml, read Nov 10, 2026
- LibreChat .env.examplegithub.com/danny-avila/LibreChat/blob/main/.env.example, read Nov 10, 2026
- LibreChat data provider config.tsgithub.com/danny-avila/LibreChat/blob/main/packages/data-provider/src/config.ts, read Nov 10, 2026
- LibreChat web.tsgithub.com/danny-avila/LibreChat/blob/main/packages/api/src/web/web.ts, read Nov 10, 2026
- LibreChat agents, search.tsgithub.com/danny-avila/agents/blob/main/src/tools/search/search.ts, read Nov 10, 2026
- LibreChat agents, firecrawl.tsgithub.com/danny-avila/agents/blob/main/src/tools/search/firecrawl.ts, read Nov 10, 2026
- LibreChat web search docslibrechat.ai/docs/configuration/librechat_yaml/object_structure/web_search, read Nov 10, 2026
- Serperserper.dev/, read Nov 10, 2026
- Tavily API creditsdocs.tavily.com/documentation/api-credits.md, read Nov 10, 2026
- Tavily pricingtavily.com/pricing, read Nov 10, 2026
- Firecrawl pricingfirecrawl.dev/pricing, read Nov 10, 2026
- SpecStream benchmarksspecstream.ai/benchmarks, read Nov 10, 2026
- SpecStream pricingspecstream.ai/pricing, read Nov 10, 2026
- SpecStream for agentsspecstream.ai/agents.md, read Nov 10, 2026




