Google ends the Custom Search JSON API on January 1, 2027. Its overview page says: "Existing Custom Search JSON API customers have until January 1, 2027 to transition to an alternative solution." The same page says "This API is not available for new customers," so a person who installs one of these apps today cannot turn its Google search on.
On November 11, 2026, 51 days before the end, we read the 16 open-source AI apps whose code calls the API, each at its default branch. All 16 still hold Google's address. None has merged a change that removes or re-points the call. Together they have 649,530 GitHub stars. We build SpecStream, and its Search API answers this call on Google's own path. The full account has the file and line for each app and how we read the code.
The 16 apps
Stars are GitHub's count on November 11, 2026.
| Project | Stars | Setting or code | In public about the ending |
|---|---|---|---|
| Open WebUI (guide) | 158,326 | One line of code | #20961 and #8124, closed issues |
| OmniRoute | 86,301 | One line of code | #1984, closed issue |
| LobeHub (guide) | 84,873 | One line of code | #19801, open pull request |
| LiteLLM (guide) | 63,067 | Setting: GOOGLE_PSE_API_BASE
|
Nothing found |
| AutoGen | 61,778 | One line of code | Nothing found |
| LlamaIndex | 52,869 | One line of code | Nothing found |
| Discourse AI | 48,074 | One line of code | #45934, our open pull request |
| Khoj (guide) | 38,104 | One line of code | Nothing found |
| GPT Researcher (guide) | 30,621 | One line of code | Nothing found |
| Marvin | 6,204 | One line of code | Nothing found |
| ScriptCat | 5,846 | One line of code | Nothing found |
| OpenAgent (guide) | 5,742 | Setting: ProviderUrl
|
Nothing found |
| OpenManus-RL | 4,176 | One line of code | Nothing found |
| Swirl (guide) | 3,049 | Setting: url in the SearchProvider JSON |
Nothing found |
| Mattermost Agents (guide) | 257 | Setting: "API URL (optional)" | #1058, open pull request |
| aimux (guide) | 243 | Setting: baseUrl
|
Nothing found |
4 of the 16 have an issue or pull request about the ending from someone outside SpecStream. The three issues in Open WebUI and OmniRoute asked what replaces the API, and all three are closed. The open pull requests in LobeHub and Mattermost Agents add another paid search provider beside Google. Both keep the Google provider, and neither changes where the Google call goes. Discourse #45934 is our pull request: it makes the address of the Discourse AI Google tool a site setting, so an admin can point it at another service that serves the same API. For the other 11 projects, the search found nothing about the ending.
If you self-host one of them
Five of the apps read Google's address from a setting: LiteLLM, OpenAgent, Swirl, Mattermost Agents and aimux. Set it to https://api.specstream.ai/customsearch/v1 and put a SpecStream key where the Google key went. For LiteLLM:
export GOOGLE_PSE_API_BASE=https://api.specstream.ai/customsearch/v1
export GOOGLE_PSE_API_KEY=$SPECSTREAM_KEY
# keep GOOGLE_PSE_ENGINE_ID as it is; cx is accepted and not used
In the other 11, the address is in one line of code, so the change comes with a release from the maintainer or from your own edit of that line.
If you maintain one of them
Change that one line, so https://www.googleapis.com becomes https://api.specstream.ai, or read the address from a setting so each self-hoster chooses it. Either change reaches every user with your next release. The line does different jobs from app to app. In Open WebUI, Khoj and GPT Researcher it is the web search call itself. In OmniRoute it is the check that runs when a user saves a Google key, in AutoGen it is the tool in the AutoGen Studio gallery, and in Marvin it is an example file.
The call, before and after
# Before
curl "https://www.googleapis.com/customsearch/v1?key=$GOOGLE_KEY&cx=$CX&q=open+source+vector+databases"
# After
curl "https://api.specstream.ai/customsearch/v1?key=$SPECSTREAM_KEY&cx=$CX&q=open+source+vector+databases"
The path, the parameters and the parser stay the same. The reply has kind customsearch#search, items[] with title, link, snippet and displayLink, searchInformation.totalResults and queries.nextPage. The key goes in key=, in the X-Goog-Api-Key header or as a Bearer token. A search of up to 10 results costs $0.005, which is $5 per 1,000 searches, the rate Google charges existing customers, with no limit per key and no daily limit. The SpecStream Search API scores 97.9 F-score on all 1,000 official SimpleQA Verified questions. The migration guide covers the move step by step, and the page on the 16 apps quotes every line of code.
Check it yourself
The 16 rows and a script that reads each file again are in the tracker on GitHub. check.py needs Python 3 and nothing else, no packages and no GitHub token. It fetches each file at its default branch and prints whether the address is still there, has moved, or is gone.
git clone https://github.com/specstream/google-custom-search-api-shutdown
cd google-custom-search-api-shutdown
python3 check.py
Its last line on November 11, 2026:
16 of 16 projects still hold Google's address. Checked 2026-11-11 (UTC).
Make the change now, while your Google key still works: get an API key. New accounts get $10 of credit, no card, which covers 2,000 searches.
Top comments (0)