SWIRL
Google search stops on January 1, 2027. The setting to change.
SWIRL's "Web - Google PSE" SearchProvider calls Google's Custom Search JSON API with your key in credentials and your engine ID in query_mappings. Google closed that API to new customers and ends it on January 1, 2027.
The SearchProvider's url field holds Google's address. Set it to https://api.specstream.ai/customsearch/v1 and put key= and a SpecStream key in credentials. The same request goes out and the same JSON comes back; our test passed by this address.
SpecStream scores 97.9 F-score on all 1,000 SimpleQA Verified questions and costs $5 per 1,000 searches, with no daily limit. 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.
SWIRL Google search and what replaces it, from each company's own pages on Nov 10, 2026
| SpecStream | Google Custom Search | Vertex AI Search | Tavily | |
|---|---|---|---|---|
| SWIRL setting | "url": "https://api.specstream.ai/customsearch/v1", the key in credentials | "url": "https://www.googleapis.com/customsearch/v1", credentials and cx in query_mappings | Its own POST request at discoveryengine.googleapis.com | Not a provider in SWIRL; it needs new code and a new reply shape |
| Open to a new account | Yes. Create a key and start with $10 of credit, no card | No. Closed to new customers, and existing customers have until January 1, 2027 | Yes, with a free trial of 10,000 queries per account a month | Yes, with 1,000 free credits every month |
| Price per 1,000 searches | $5, with up to 10 results a search | $5 per 1,000 queries after 100 free queries a day, for existing customers only | $1.50 on Standard, $4.00 on Enterprise | $0.008 a credit on pay as you go. A basic search is 1 credit |
| Limit | No daily limit. Up to 8,800 searches a minute on one account | 10,000 queries a day | Full web search only on request: Google asks you to contact it | On a monthly plan, requests stop when the month's credits run out |
| How long it lasts | Credit you buy never expires | Until January 1, 2027, when Google ends the API | Pay as you go, for search queries and data storage | Credits reset on the first day of each month |
| What answers the search | The whole live web, read at the moment of the call, in Google's JSON. 97.9 F-score on all 1,000 SimpleQA Verified questions | The Programmable Search Engine you configured | Up to 50 domains you name | Tavily's search. Its own post reports 97.6% on SimpleQA |
Why SWIRL users point Google search at SpecStream
The change is one field in the SearchProvider
SWIRL builds the call from query_template, {url}?cx={cx}&key={key}&q={query_string}, and fills {url} from the SearchProvider's url field and {key} from credentials. Change those two and leave the rest of the provider as it is.
{
"name": "Web - Google PSE",
"active": true,
"connector": "RequestsGet",
"url": "https://api.specstream.ai/customsearch/v1",
"query_template": "{url}?cx={cx}&key={key}&q={query_string}",
"query_mappings": "cx=<keep your current value>,DATE_SORT=sort=date,PAGE=start=RESULT_INDEX,NOT_CHAR=-",
"credentials": "key=<YOUR_SPECSTREAM_KEY>"
}SpecStream accepts cx with any value and does not use it. start for paging is read; sort is accepted and not used. This is the call SWIRL then sends:
curl "https://api.specstream.ai/customsearch/v1?cx=any&key=$SPECSTREAM_API_KEY&q=open+source+vector+databases"The same JSON, so SWIRL's mappings read it
SWIRL's Google provider maps FOUND to searchInformation.totalResults, RETRIEVED to queries.request[0].count and RESULTS to items, then each result's url to link, body to snippet and author to displayLink. SpecStream returns every one of those fields in Google's shape. It does not return pagemap or cacheId, so the payload fields SWIRL fills from them stay empty. The same call from Python:
import os, requests
reply = requests.get(
"https://api.specstream.ai/customsearch/v1",
params={"cx": "any", "key": os.environ["SPECSTREAM_API_KEY"], "q": "open source vector databases"},
).json()
print(reply["searchInformation"]["totalResults"], reply["queries"]["request"][0]["count"])
for item in reply["items"]:
print(item["link"], item["snippet"], item["displayLink"])$5 per 1,000 searches, with no daily limit
A search of up to 10 results costs $0.005, and SWIRL never asks for more than 10 in one call. There is no monthly plan and no daily limit. Credit you buy never expires, and a new account starts with $10 of credit, which covers 2,000 searches.
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
The Google route runs on the fast search. On November 9, 2026 production took 1, 5, 10 and 20 fast searches a second 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 is answered with Retry-After and is not charged.
You decide what is kept, on each key
Give SWIRL a key with zero_retention and a search made with it keeps no request text and no answer after the reply. 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 most a run can cost is quoted before it starts.
Other Google search alternatives for SWIRL
Google Custom Search, until January 1, 2027
Existing customers can keep Google's default address until Google ends the API: $5 per 1,000 queries after 100 free a day, up to 10,000 a day. A new project gets no key. SpecStream costs the same $5 per 1,000, with no daily limit, behind the same SWIRL setting.
Vertex AI Search
Google's named alternative, for searching up to 50 domains, at $1.50 per 1,000 queries on Standard and $4.00 on Enterprise, called by POST at discoveryengine.googleapis.com with its own request. For full web search Google asks you to contact it. SpecStream searches the whole live web and answers the GET request SWIRL already sends.
Tavily
Search billed in credits at $0.008 each on pay as you go, with 1,000 free credits a month that reset on the first day of each month. SWIRL has no Tavily provider, so moving to it means new code and a new reply shape. SpecStream keeps your Google setup and charges $0.005 a search.
How SpecStream scores
The same numbers as the benchmarks page, from the official tasks and scorers.
How to move SWIRL's Google search to SpecStream
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. Check the key with the call the app will send. A 200 with items means the app gets the same.
curl "https://api.specstream.ai/customsearch/v1?key=$SPECSTREAM_API_KEY&cx=any&q=test&num=10"3. In SWIRL, edit the "Web - Google PSE" SearchProvider: set url and credentials, keep cx in query_mappings, and set active to true.
"url": "https://api.specstream.ai/customsearch/v1",
"credentials": "key=<YOUR_SPECSTREAM_KEY>"4. Run a search in SWIRL. Each Google PSE search shows up in your SpecStream request log with its price.
Frequently asked questions
Something we didn't answer? Talk to a human
Why is Google PSE not working in SWIRL?
url to https://api.specstream.ai/customsearch/v1 with key= and a SpecStream key in credentials, and the provider works again.What is the best Google search alternative for SWIRL?
url field moves it.Which SWIRL SearchProvider field holds Google's address?
url field, by default https://www.googleapis.com/customsearch/v1. query_template puts it in front of the query string, so set it to https://api.specstream.ai/customsearch/v1.How much does SWIRL web search cost with SpecStream?
Is Google Custom Search shutting down?
Do I still need the cx value in query_mappings?
cx with any value and does not use it, and searches the whole live web.Sources
SpecStream wrote this page. SWIRL's settings come from its source and guide on GitHub, and each provider's figure from that company's own page.
- SWIRL Google SearchProvider, google.jsongithub.com/swirlai/swirl-search/blob/main/SearchProviders/google.json, read Nov 10, 2026
- SWIRL SearchProvider guidegithub.com/swirlai/swirl-search/blob/main/docs/SP-Guide.md, read Nov 10, 2026
- Google Custom Search JSON API overviewdevelopers.google.com/custom-search/v1/overview, read Nov 10, 2026
- Vertex AI Search pricingcloud.google.com/generative-ai-app-builder/pricing, read Nov 10, 2026
- Vertex AI Search REST reference, search methodcloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/projects.locations.collections.engines.servingConfigs/search, 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
- Tavily, SealQA and SimpleQA posttavily.com/blog/tavily-ranks-1-on-sealqa-and-simpleqa, 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




