Google Custom Search JSON API is shutting down: a web search API to move to before 1 January 2027
Google's Custom Search JSON API, the customsearch/v1 endpoint that many apps, scripts and AI agents use to get Google results as JSON, is on its way out. Google's overview page now says two things plainly: The API is c
Google's Custom Search JSON API, the customsearch/v1 endpoint that many apps, scripts and AI agents use to get Google results as JSON, is on its way out. Google's overview page now says two things plainly:
- The API is closed to new customers.
- Existing customers have until 1 January 2027 to move to another solution.
If your code calls https://www.googleapis.com/customsearch/v1, you have a few weeks left. This guide explains what Google offers instead, which projects that fits, and how to move whole-web search to the NestDaddy API with a small adapter so the rest of your code does not change.
What Google offers instead
Google points to two options:
- Vertex AI Search, which Google describes as a good fit "for searching up to 50 domains". This is site search: you choose the sites, and it searches only those.
- A full web search solution, which you request through a contact form. There is no public sign-up or price list for it on the page.
So the answer depends on how you used Custom Search:
| How you used Custom Search | Good next step |
|---|---|
| Search box for your own website or a handful of sites | Vertex AI Search, or a site search tool you host yourself |
| Whole-web results for an app, a data pipeline or an AI agent | A web search API with its own index, such as NestDaddy |
| News for a topic or a country | A news API (NestDaddy includes one) |
The rest of this guide is about the second and third rows.
What NestDaddy is, and what it is not
NestDaddy is an independent search engine with its own crawler and web index, plus its own real-time news collection from around the world. It is not a reseller of Google or Bing results, so it will not disappear because one of them changes its API.
To be clear about the fit before you spend time on it:
- It searches the whole web, not a list of sites you pick. If you need site-restricted search (Custom Search's
siteSearchor a CSE limited to your domains), this is the wrong tool; use Vertex AI Search or a self-hosted site search. - Results come from NestDaddy's own index, so they will differ from Google's. Test your real queries first (see the checklist below).
- One call returns up to 50 results. There is no
startpaging parameter yet, so ask for the number you need withlimit.
Map your Custom Search calls to NestDaddy
| Custom Search JSON API | NestDaddy | Notes |
|---|---|---|
GET /customsearch/v1?q= |
GET /api/v1/search?q= |
Results from NestDaddy's own index |
key=YOUR_KEY and cx=ENGINE_ID
|
Header X-API-Key: YOUR_KEY
|
No engine ID needed |
num=10 (max 10 per page) |
limit=10 (up to 50 in one call) |
|
start=11 (paging) |
Not available | Request more results with limit instead |
items[].title |
results[].title |
|
items[].link |
results[].url |
|
items[].snippet |
results[].snippet |
|
items[].displayLink |
results[].domain |
|
News with q + dateRestrict
|
GET /api/v1/news/search?q=&days= |
Worldwide news, up to 120 days back, filter by country
|
| Reading the page behind a result | GET /api/v1/extract?url= |
Clean article text, without menus or ads |
Before and after
The Custom Search call you have today:
import requests
r = requests.get(
"https://www.googleapis.com/customsearch/v1",
params={"key": GOOGLE_KEY, "cx": ENGINE_ID, "q": "fastapi tutorial", "num": 10},
)
for item in r.json().get("items", []):
print(item["title"], item["link"], item["snippet"])
The same search on NestDaddy:
import requests
r = requests.get(
"https://nestdaddy.com/api/v1/search",
headers={"X-API-Key": NESTDADDY_KEY},
params={"q": "fastapi tutorial", "limit": 10},
)
for item in r.json()["results"]:
print(item["title"], item["url"], item["snippet"])
The URL, the key and two field names change. Each result also carries domain, language, published_date and type, which Custom Search did not give you.
Keep your old code: a drop-in adapter
If many parts of your code read Google's response shape (items, link, displayLink), wrap the new API once:
import requests
NESTDADDY = "https://nestdaddy.com/api/v1"
def google_like_search(q, num=10, key=None):
"""Return a dict shaped like Custom Search JSON API's response, using NestDaddy."""
r = requests.get(f"{NESTDADDY}/search", headers={"X-API-Key": key},
params={"q": q, "limit": min(num, 50)}, timeout=30)
r.raise_for_status()
results = r.json().get("results", [])
return {
"searchInformation": {"totalResults": str(len(results))},
"items": [
{"title": x["title"], "link": x["url"], "snippet": x.get("snippet", ""),
"displayLink": x.get("domain", "")}
for x in results
],
}
Replace your Custom Search function with this one and most callers will keep working. If you relied on siteSearch, filter on displayLink yourself, but remember the index is the whole web, so results from one small site may be few.
For AI agents: skip the API and use MCP
Many Custom Search keys exist only to give an AI agent web access. If that is your case, there is a shorter path: NestDaddy runs a remote MCP server at https://mcp.nestdaddy.com/mcp. Claude, Cursor, VS Code, n8n and other MCP clients connect to it, and the model calls web search, news search and page reading by itself. Setup: How to give Claude live web search and news with one MCP server.
A migration checklist for the next six weeks
- List what you use. Whole-web search, site search, image search, news? Each may need a different replacement.
- Export 20 to 50 real queries from your logs, the ones your users actually run.
- Run them through NestDaddy (the Free plan is enough) and check that the results people click on are there.
- Swap the function with the adapter above, behind a flag, so you can switch back.
-
Watch usage. Every NestDaddy response includes a
quotaobject (used,limit,remaining). - Switch before late December. Do not leave it to the last week of the year.
Pricing and the Free plan
Custom Search gave existing customers 100 free queries a day, then $5 per 1,000 queries, up to 10,000 a day. NestDaddy's Free plan gives 1,000 credits every month with no card, and one key covers web search, news, page reading, research papers and the MCP server. Paid plans are on the pricing page.
Working examples in Python, JavaScript and curl are on GitHub: nestdaddy/nestdaddy-examples. If you are migrating and something you need is missing, write to [email protected]. Paging and site filters are the kind of request that moves up our list.
Originally published on the NestDaddy blog. NestDaddy gives your AI today's internet: live web search and real-time breaking news from its own index. nestdaddy.com/mcp
Originally published by Dev.to WebDev. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.