Skip to the page

Google's Custom Search API ends January 1, 2027: 16 open-source AI apps still call it

SpecStream

Search API · · 6 min read

On November 11, 2026, 51 days before Google discontinues the Custom Search JSON API, we read the 16 open-source AI apps that call it at their default branch, and all 16 still hold Google's address in the code. None has merged a change that removes or re-points the call, and only 4 have an issue or pull request about the ending opened by anyone outside SpecStream.

Together the 16 have 649,530 GitHub stars. They include Open WebUI, LobeHub, LiteLLM, AutoGen, LlamaIndex, and Discourse.

Google's overview page says the API is closed to new customers and that "Existing Custom Search JSON API customers have until January 1, 2027 to transition to an alternative solution." A self-hoster who installs one of these apps today cannot turn on its Google search: the same page says "This API is not available for new customers." An install that works now, on a key made before the API closed, calls an API that Google has ended from January 1. The shutdown page has the dates and Google's wording.

The 16 apps, by stars on November 11, 2026

Stars are GitHub's count on November 11, 2026. The file and line are on each project's default branch that day. The full table quotes every line of code.

Project Stars on Nov 11, 2026 Where Google's address sits Setting or code In public about the ending
Open WebUI 158,326 backend/open_webui/retrieval/web/google_pse.py line 24 A line of code (guide) #20961, issue, closed, opened Jan 27, 2026; #8124, issue, closed, opened Dec 27, 2024
OmniRoute 86,301 src/lib/providers/validation/searchProviders.ts line 119 A line of code #1984, issue, closed, opened May 5, 2026
LobeHub 84,873 apps/server/src/services/search/impls/google/index.ts line 37 A line of code (guide) #19801, pull request, open, opened Sep 21, 2026
LiteLLM 63,067 litellm/llms/google_pse/search/transformation.py line 64 A setting: GOOGLE_PSE_API_BASE (guide) Nothing found
AutoGen 61,778 python/packages/autogen-studio/autogenstudio/gallery/tools/google_search.py line 103 A line of code Nothing found
LlamaIndex 52,869 llama-index-integrations/tools/llama-index-tools-google/llama_index/tools/google/search/base.py line 11 A line of code Nothing found
Discourse AI 48,074 plugins/discourse-ai/lib/agents/tools/google.rb line 47 A line of code #45934, our pull request, open, opened Nov 10, 2026
Khoj 38,104 src/khoj/processor/tools/online_search.py line 362 A line of code (guide) Nothing found
GPT Researcher 30,621 gpt_researcher/retrievers/google/google.py line 79 A line of code (guide) Nothing found
Marvin 6,204 examples/deepseek_chat.py line 55 A line of code Nothing found
ScriptCat 5,846 src/app/service/agent/core/tools/web_search.ts line 145 A line of code Nothing found
OpenAgent 5,742 tool/web_search.go line 113 A setting: ProviderUrl (guide) Nothing found
OpenManus-RL 4,176 openmanus_rl/tools/google_search/tool.py line 54 A line of code Nothing found
Swirl 3,049 docs/SP-Guide.md line 228 A setting: url in the SearchProvider JSON (guide) Nothing found
Mattermost Agents 257 websearch/google.go line 19 A setting: "API URL (optional)" (guide) #1058, pull request, open, opened Sep 27, 2026
aimux 243 aimux-providers/src/google_pse.rs line 60 A setting: baseUrl (guide) Nothing found

The lines do different jobs. In Open WebUI, Khoj, and GPT Researcher the line 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. In the five apps with a setting, the line is the default the app uses when the setting is empty.

What the projects have in public

Three issues asked what replaces the API, and all three are closed. In Open WebUI, #8124 reported the API's move to Vertex Search in December 2024, and #20961 quoted Google's note that the API is closed to new customers in January 2026. In OmniRoute, #1984 reported a 403 PERMISSION_DENIED for new Google projects in May 2026 (what that 403 means) and asked for documentation or another provider.

Two open pull requests, LobeHub #19801 and Mattermost Agents #1058, add another paid search provider beside Google. Both keep the Google provider, and neither changes where the Google call goes.

We opened discourse/discourse#45934 on November 10, 2026. It makes the address of the Discourse AI Google tool a site setting, so an admin can point the tool at another service that serves the same API.

For the other 11 projects, the search found nothing about the ending.

The change in each app

Five of the 16 read Google's address from a setting: LiteLLM (GOOGLE_PSE_API_BASE), OpenAgent (ProviderUrl), Swirl (url in the SearchProvider JSON), Mattermost Agents ("API URL (optional)"), and aimux (baseUrl). Set it to https://api.specstream.ai/customsearch/v1 and put a SpecStream key where the Google key went.

The other 11 hold https://www.googleapis.com in the line the table names, and that one line becomes https://api.specstream.ai. A maintainer who changes it, or reads the address from a setting, moves every user of the project with the next release.

The call is the same call with a new host and key:

# 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 reply has kind customsearch#search, items[] with title, link, snippet, and displayLink, searchInformation.totalResults, and queries.nextPage. The route honors nine parameters: q, num, start, hq, exactTerms, orTerms, excludeTerms, siteSearch, and siteSearchFilter. siteSearch keeps a search to one site, and the route also answers the call of Google's Site Restricted JSON API, which stopped on January 8, 2025. cx is accepted and not used, and the key goes in key=, in X-Goog-Api-Key, or as a Bearer token.

For code that builds the call itself, the Python and JavaScript pages show the changed request, and the migration guide covers the move step by step.

A search of up to 10 results costs $0.005, which is $5 per 1,000 searches, the rate Google charges existing customers (Google's pricing). There is no limit per key and no daily limit (Google's limits). The SpecStream Search API is the most accurate web search API in the world: it scores 97.9 F-score on all 1,000 official SimpleQA Verified questions.

How we read the code

On November 10, 2026 we read 74 open-source projects at their source, checked 28 at their latest commit, and kept the 16 AI apps that call the API. On November 11 we read each of the 16 at its default branch and searched its GitHub issues and pull requests for six phrases about the ending; discussions were not searched. The 16 rows and a script that reads each file again are on GitHub, so anyone can run the check on a later day.

Get a key

Get an API key. New accounts get $10 of credit, no card, which covers 2,000 searches.

More from the blog

Every post