Google’s Custom Search JSON API is going away. It is closed to new customers, and Google lists January 1, 2027 as the date the service is discontinued. If your app calls it today, you need a new source of search results before then.
Google suggests Vertex AI Search for site search and a request form for whole-web search. If your app needs the real google.com page, a SERP API is the closest match, and the code change is small.
What is happening to the Custom Search JSON API?
Google has closed the Custom Search JSON API to new customers and lists January 1, 2027 as its discontinuation date. Google explains this on its Custom Search JSON API overview page, last updated February 18, 2026.
The change was first announced on January 20, 2026, on the Programmable Search Engine blog. That post says your move “needs to be completed by January 1, 2027.”
| Date | What changed |
|---|---|
| January 20, 2026 | Google announces the change. All new search engines must use “Sites to search” (50 domains at most). |
| By February 18, 2026 | The API page says it is closed to new customers. |
| Now until January 1, 2027 | Existing customers keep access. 100 free queries a day, then $5 per 1,000, up to 10,000 a day. |
| January 1, 2027 | Google’s stated discontinuation date for the API and for “Search the entire web” engines. |
We checked these pages on October 9, 2026. Google has not said what the API will return after the cutoff, such as an error code. Treat the date as a hard stop.
Who is affected?
Three groups need to act.
- Apps that call the Custom Search JSON API. This is anyone with a key and a search engine ID (the
cxvalue) who sends requests tocustomsearch/v1. - Search boxes set to “Search the entire web.” These engines keep working only until January 1, 2027.
- Search boxes that cover more than 50 domains. Google asks these users to contact it about a full web search product.
One group is fine. If you use Google’s free search box on your own site and it covers 50 domains or fewer, Google says that option stays.
Why your Custom Search results were never quite Google
Some teams used this API as a cheap stand-in for google.com. It never matched.
Google’s own help page, Programmable Search Engine vs Google.com, lists the reasons. An engine favors your own sites. Whole-web engines search only part of Google’s index. And they leave out answer boxes, real-time results and personalized results.
The API also had hard limits. Each call returned at most 10 results. A single query could never go past result 100, says the API reference. There were no ads, maps, People Also Ask boxes or AI Overviews. A real results page holds all of those, as we show in SERP features explained.
So the shutdown is also a chance to fix a data problem you may not have noticed.
What Google suggests instead
Google names two paths.
- Vertex AI Search, for up to 50 domains. This is Google Cloud’s search product for your own sites and files. Google’s docs say it is being renamed Agent Search. It searches the content you give it, not the whole web.
- A “full web search solution”, by request. For whole-web search, Google asks you to fill in an interest form. It has not posted a public price.
Neither one returns the page a person sees on google.com. If that is what your app needs, you need a different kind of tool.
Other options: SERP APIs and independent search APIs
A SERP API fetches the real Google results page for a keyword, country and device. It returns that page as JSON. Rank trackers, SEO tools and AI agents use them. For agents, our guide on how to give an AI agent live Google search shows a full setup.
An independent search API runs its own index of the web. Brave Search is one example. Its results come from Brave’s index, not Google’s.
Bing is no longer an option. Microsoft retired the Bing Search APIs on August 11, 2025. Our post on what replaced the Bing Search API covers that change.
Custom Search API alternatives compared
Prices below come from each provider’s own pricing page, checked on October 9, 2026.
| Option | Where results come from | Price (October 2026) | Status |
|---|---|---|---|
| Custom Search JSON API | Part of Google’s index, filtered by your engine | $5 per 1,000 queries after 100 free a day | Closed to new customers; ends January 1, 2027 |
| Vertex AI Search (Agent Search) | Your own sites and data | $1.50 per 1,000 queries (Standard), $4 (Enterprise); 10,000 free a month | Available |
| Google full web search | Google’s full index | Not published | By request |
| Serplify | Live google.com results page, up to 100 results | $0.005 per successful SERP; $1 free credit | Available |
| SerpApi | Live google.com results page | $25 a month for 1,000 searches; 250 free a month | Available |
| DataForSEO | Live google.com results page | $0.002 per 10 results (live), $0.0006 (queued) | Available |
| Brave Search API | Brave’s own index | $5 per 1,000 requests; $5 free credit a month | Available |
| Bing Search API | Bing | No longer sold | Retired August 11, 2025 |
A fair note on our own row: Serplify, which publishes this blog, only bills a search that succeeds and has no monthly plan. For a wider field, see our comparison of SerpApi alternatives.
How to move a Custom Search request to a SERP API
Often the change fits inside one function. Here is a typical Custom Search call in Python:
import os, requests
res = requests.get(
"https://customsearch.googleapis.com/customsearch/v1",
params={
"key": os.environ["GOOGLE_API_KEY"],
"cx": os.environ["SEARCH_ENGINE_ID"],
"q": "best running shoes",
"gl": "us",
"num": 10,
},
)
for item in res.json().get("items", []):
print(item["title"], item["link"], item["snippet"])
Here is the same search sent to our SERP API, using the request from the quickstart. The standard format keeps organic results, ads and featured snippets:
import os, requests
res = requests.post(
"https://api.serplify.io/v1/serp/search",
headers={"Authorization": f"Bearer {os.environ['SERPLIFY_KEY']}"},
json={
"keyword": "best running shoes",
"location": {"code": 2840},
"language": {"code": "en"},
"format": "standard",
},
)
res.raise_for_status()
for item in res.json()["data"]["items"]:
if item["type"] == "organic":
print(item["title"], item["url"], item["description"])
The fields map like this:
| Custom Search | SERP API request or response |
|---|---|
q | keyword |
gl=us | location: {"code": 2840} (a location code for the country or city) |
hl, lr | language: {"code": "en"} |
num, start | One call returns up to 100 results, so no paging |
cx (your engine) | No engine. Add site:example.com to the keyword to stay on one site. |
items[].link | items[].url |
items[].snippet | items[].description |
items[].displayLink | items[].domain |
Three things change for the better. You get the real page, not a filtered copy. You can pick a city and a device, as well as a country. And each item has a type, so you can keep or skip ads, maps and question boxes.
Two things to watch. Results will differ from what your engine returned, so check any tests that expect exact URLs. And if you used Custom Search to search your own site, Vertex AI Search may fit better than a SERP API.
Which option should you pick?
| If your app needs | Use |
|---|---|
| Search across your own site or docs (50 domains or fewer) | Google’s free site search box, or Vertex AI Search |
| The same results a person sees on google.com | A SERP API |
| Web results for an AI agent that do not have to be Google | Brave Search API, or a SERP API |
| Google’s full index, from Google itself | Google’s full web search interest form |
If you were thinking of scraping Google yourself instead, read that post first. Google blocks plain scripts within a few dozen searches. If you want the same results page your users see, a Google SERP API is the most direct swap.
Whatever you pick, start now. Run the new source next to the old one for a few weeks, compare the output, and switch well before January 1, 2027.
Frequently asked questions
Is the Google Custom Search API discontinued?
It is closed to new customers now. Existing customers can keep using it until January 1, 2027, which Google calls the discontinuation date. After that you need another option.
Is the Google Custom Search API free?
Only for existing customers, and only for the first 100 queries each day. More queries cost $5 per 1,000, with a cap of 10,000 queries a day. New sign-ups are not accepted.
Is there an API for Google search?
Google no longer offers a public, self-serve API for whole-web results. It suggests Vertex AI Search for searching up to 50 of your own domains and runs an interest form for a full web search product. Third-party SERP APIs return the live google.com results page as JSON.
Will my existing Custom Search API key keep working until 2027?
Google says existing customers have until January 1, 2027 to move to another solution. It has not said what error requests will return after that date. Plan to switch before the cutoff, not on it.
Why are Custom Search results different from Google.com?
Google says a Programmable Search Engine favors your own sites, searches only part of Google's index, and leaves out features like answer boxes and personalized results. So the list your app got was never the same as a real google.com page.
Sources and further reading
- Google for Developers: Custom Search JSON API overview (closure notice and pricing) developers.google.com
- Programmable Search Engine Blog: Updates to our Web Search Products (January 20, 2026) programmablesearchengine.googleblog.com
- Google for Developers: cse.list reference (num and start limits) developers.google.com
- Programmable Search Engine Help: Programmable Search Engine vs Google.com support.google.com
- Google Cloud: Vertex AI Search (Agent Search) pricing cloud.google.com
- SerpApi pricing serpapi.com
- DataForSEO Google Organic SERP API pricing dataforseo.com
- Brave Search API pricing brave.com
- Microsoft Learn: Bing Search APIs retiring on August 11, 2025 learn.microsoft.com