# Google Custom Search JSON API is shutting down: a web search API to move to before 1 January 2027

> Source: <https://nestdaddy.com/blog/google-custom-search-api-alternative>
> Published: 2026-11-15 00:00:00+00:00

# 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 is closed to new customers and existing customers must move off it by 1 January 2027. Here is what Google offers instead, when it fits, and how to move whole-web search to NestDaddy with a drop-in Python adapter.

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](https://developers.google.com/custom-search/v1/overview) 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.

```
Press Run to call the API.
```

[Get your free API key](https://nestdaddy.com/mcp)

## What Google offers instead

Google points to two options:

1. **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.
2. **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`siteSearch` or 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`start` paging parameter yet, so ask for the number you need with`limit` .

## 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:

``` python
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:

``` python
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:

``` python
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](https://nestdaddy.com/blog/add-live-web-search-to-claude-mcp).

## A migration checklist for the next six weeks

1. **List what you use.** Whole-web search, site search, image search, news? Each may need a different replacement.
2. **Export 20 to 50 real queries** from your logs, the ones your users actually run.
3. **Run them through NestDaddy** (the Free plan is enough) and check that the results people click on are there.
4. **Swap the function** with the adapter above, behind a flag, so you can switch back.
5. **Watch usage.** Every NestDaddy response includes a`quota` object (`used` ,`limit` ,`remaining` ).
6. **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](https://nestdaddy.com/pricing).

Working examples in Python, JavaScript and curl are on GitHub: [nestdaddy/nestdaddy-examples](https://github.com/nestdaddy/nestdaddy-examples). If you are migrating and something you need is missing, write to [\[email protected\]](https://nestdaddy.com/cdn-cgi/l/email-protection). Paging and site filters are the kind of request that moves up our list.
