Google Custom Search JSON API shuts down Jan 1, 2027: what to do
Google closed the Custom Search JSON API to new customers in January 2026 and turns it off on January 1, 2027. Here is the timeline, your options, and a two-line migration.
SerpKite team 3 min read
On this page
If your app calls https://www.googleapis.com/customsearch/v1, it has a hard deadline. Google closed the Custom Search JSON API to new customers on January 20, 2026, and the API shuts down on January 1, 2027. After that, requests fail.
This post covers the timeline, what your options are, and how to migrate with the smallest possible diff.
The timeline
| Date | What happened |
|---|---|
| 2026-01-20 | Custom Search JSON API closed to new customers; shutdown date set for 2027-01-01 |
| Aug–Sep 2026 | Docs for a partner-only “Web Search Service API” appear, then get pulled |
| 2027-01-01 | The JSON API stops serving requests |
The partner-only API matters because it was the only hint of an official successor. As of today there is no self-serve official Google web search API you can sign up for after the shutdown.
Who is affected
Anything that reads items[] from the CSE JSON API:
- SaaS features that “search the web” behind the scenes (research assistants, fact-checking, content tools).
- Internal tools and scripts, often years old, that nobody remembers owning.
- No-code flows in n8n, Make and Zapier that call the endpoint through an HTTP node.
- Agent tools that wrap CSE because it was the official, cheap option.
Find them with a code search for googleapis.com/customsearch across your repos, and check your Google Cloud console for projects with the Custom Search API enabled.
Your options
- Drop the feature. Sometimes right for internal scripts. Rarely right for customer-facing features.
- Move to a different kind of search. AI-native search APIs (Tavily, Exa, Brave) run their own index. Results and response shapes differ, so you rewrite the integration and re-test relevance.
- Use a SERP API that speaks CSE. You keep the same request and response, and the results are Google’s public results page.
We built SerpKite’s /customsearch/v1 endpoint for option 3. It accepts key, cx, q, start, num, gl, hl, lr, safe, dateRestrict, siteSearch and searchType=image, and returns kind, searchInformation, items[] and queries.
The migration
res = requests.get(
"https://www.googleapis.com/customsearch/v1",
params={"key": GOOGLE_API_KEY, "cx": CX, "q": query, "start": 1},
)
items = res.json().get("items", [])res = requests.get(
"https://api.serpkite.com/customsearch/v1",
params={"key": SERPKITE_API_KEY, "cx": CX, "q": query, "start": 1},
)
items = res.json().get("items", [])Two lines: the hostname and the key. Your parsing code doesn’t change.
The one real difference: cx is ignored
SerpKite searches the public Google results page, so settings from the Programmable Search console (site lists, promotions, custom ranking) are not applied. If your engine was restricted to your own domains, add siteSearch=example.com or site:a.com OR site:b.com to the query.
A checklist before January
- Inventory every caller of the CSE endpoint, including no-code flows.
- Swap the hostname and key. Prefer sending the key as an
Authorization: Bearerheader so it stays out of URLs and logs. - Recreate site restrictions with
siteSearchorsite:operators. - Update error handling. SerpKite errors look like
{"error":{"code","message","request_id"}}. Failed calls (503) are not billed and are safe to retry. - Run a few dozen real queries through both endpoints and compare
items[].link. - Set a spend cap in the dashboard so a runaway loop can’t surprise you.
- Deploy well before the holidays. December 31 is a bad day to find a forgotten cron job.
Cost
Google charged $5 per 1,000 queries after 100 free queries a day, with a cap of 10,000 queries a day. On SerpKite each /customsearch/v1 call is 1 credit, packs run from $1.00 per 1,000 down to $0.60, there’s no daily cap, and credits never expire. You get 2,500 free credits on signup and 1,000 a month after that. Details are on the pricing page.
Next steps
- The full parameter mapping and gotchas: Migrate from the Google Custom Search JSON API.
- Paste an existing CSE URL into the CSE migration helper to get the SerpKite equivalent.
- Need more than
items[]? The Google Search API returns the knowledge graph, People Also Ask and Markdown output.