{"slug": "google-custom-search-json-api-is-shutting-down-a-web-search-api-to-move-to-1", "title": "Google Custom Search JSON API is shutting down: a web search API to move to before 1 January 2027", "summary": "Google has closed its Custom Search JSON API to new customers and given existing customers until 1 January 2027 to migrate off the customsearch/v1 endpoint, according to Google's API overview page. Google points users to Vertex AI Search, which it says fits \"searching up to 50 domains,\" or a full web search solution available only through a contact form with no public sign-up or price list. The guide recommends NestDaddy, an independent search engine with its own crawler and index, for whole-web results, noting its results will differ from Google's and that it returns up to 50 results per call with no start paging parameter.", "body_md": "# Google Custom Search JSON API is shutting down: a web search API to move to before 1 January 2027\n\nGoogle'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.\n\nGoogle'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:\n\n- The API **is closed to new customers.**\n- Existing customers **have until 1 January 2027** to move to another solution.\n\nIf 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.\n\n```\nPress Run to call the API.\n```\n\n[Get your free API key](https://nestdaddy.com/mcp)\n\n## What Google offers instead\n\nGoogle points to two options:\n\n1. **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.\n2. **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.\n\nSo the answer depends on how you used Custom Search:\n\n| How you used Custom Search | Good next step | \n|---|---|\n| Search box for your own website or a handful of sites | Vertex AI Search, or a site search tool you host yourself | \n| Whole-web results for an app, a data pipeline or an AI agent | A web search API with its own index, such as NestDaddy | \n| News for a topic or a country | A news API (NestDaddy includes one) | \n\nThe rest of this guide is about the second and third rows.\n\n## What NestDaddy is, and what it is not\n\nNestDaddy 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.\n\nTo be clear about the fit before you spend time on it:\n\n- 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.\n- Results come from NestDaddy's own index, so they **will differ from Google's** . Test your real queries first (see the checklist below).\n- One call returns up to **50 results** . There is no`start` paging parameter yet, so ask for the number you need with`limit` .\n\n## Map your Custom Search calls to NestDaddy\n\n| Custom Search JSON API | NestDaddy | Notes | \n|---|---|---|\n| `GET /customsearch/v1?q=` | `GET /api/v1/search?q=` | Results from NestDaddy's own index | \n| `key=YOUR_KEY` and`cx=ENGINE_ID` | Header `X-API-Key: YOUR_KEY` | No engine ID needed | \n| `num=10` (max 10 per page) | `limit=10` (up to 50 in one call) |  | \n| `start=11` (paging) | Not available | Request more results with `limit` instead | \n| `items[].title` | `results[].title` |  | \n| `items[].link` | `results[].url` |  | \n| `items[].snippet` | `results[].snippet` |  | \n| `items[].displayLink` | `results[].domain` |  | \n| News with `q` +`dateRestrict` | `GET /api/v1/news/search?q=&days=` | Worldwide news, up to 120 days back, filter by `country` | \n| Reading the page behind a result | `GET /api/v1/extract?url=` | Clean article text, without menus or ads | \n\n## Before and after\n\nThe Custom Search call you have today:\n\n``` python\nimport requests\n\nr = requests.get(\n    \"https://www.googleapis.com/customsearch/v1\",\n    params={\"key\": GOOGLE_KEY, \"cx\": ENGINE_ID, \"q\": \"fastapi tutorial\", \"num\": 10},\n)\nfor item in r.json().get(\"items\", []):\n    print(item[\"title\"], item[\"link\"], item[\"snippet\"])\n```\n\nThe same search on NestDaddy:\n\n``` python\nimport requests\n\nr = requests.get(\n    \"https://nestdaddy.com/api/v1/search\",\n    headers={\"X-API-Key\": NESTDADDY_KEY},\n    params={\"q\": \"fastapi tutorial\", \"limit\": 10},\n)\nfor item in r.json()[\"results\"]:\n    print(item[\"title\"], item[\"url\"], item[\"snippet\"])\n```\n\nThe 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.\n\n## Keep your old code: a drop-in adapter\n\nIf many parts of your code read Google's response shape (`items`, `link`, `displayLink`), wrap the new API once:\n\n``` python\nimport requests\n\nNESTDADDY = \"https://nestdaddy.com/api/v1\"\n\ndef google_like_search(q, num=10, key=None):\n    \"\"\"Return a dict shaped like Custom Search JSON API's response, using NestDaddy.\"\"\"\n    r = requests.get(f\"{NESTDADDY}/search\", headers={\"X-API-Key\": key},\n                     params={\"q\": q, \"limit\": min(num, 50)}, timeout=30)\n    r.raise_for_status()\n    results = r.json().get(\"results\", [])\n    return {\n        \"searchInformation\": {\"totalResults\": str(len(results))},\n        \"items\": [\n            {\"title\": x[\"title\"], \"link\": x[\"url\"], \"snippet\": x.get(\"snippet\", \"\"),\n             \"displayLink\": x.get(\"domain\", \"\")}\n            for x in results\n        ],\n    }\n```\n\nReplace 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.\n\n## For AI agents: skip the API and use MCP\n\nMany 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).\n\n## A migration checklist for the next six weeks\n\n1. **List what you use.** Whole-web search, site search, image search, news? Each may need a different replacement.\n2. **Export 20 to 50 real queries** from your logs, the ones your users actually run.\n3. **Run them through NestDaddy** (the Free plan is enough) and check that the results people click on are there.\n4. **Swap the function** with the adapter above, behind a flag, so you can switch back.\n5. **Watch usage.** Every NestDaddy response includes a`quota` object (`used` ,`limit` ,`remaining` ).\n6. **Switch before late December.** Do not leave it to the last week of the year.\n\n## Pricing and the Free plan\n\nCustom 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).\n\nWorking 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.", "url": "https://wpnews.pro/news/google-custom-search-json-api-is-shutting-down-a-web-search-api-to-move-to-1", "canonical_source": "https://nestdaddy.com/blog/google-custom-search-api-alternative", "published_at": "2026-11-15 00:00:00+00:00", "updated_at": "2026-11-15 13:22:51.300640+00:00", "lang": "en", "topics": ["ai-search", "developer-tools", "ai-agents"], "entities": ["Google", "Custom Search JSON API", "Vertex AI Search", "NestDaddy"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/google-custom-search-json-api-is-shutting-down-a-web-search-api-to-move-to-1", "markdown": "https://wpnews.pro/news/google-custom-search-json-api-is-shutting-down-a-web-search-api-to-move-to-1.md", "text": "https://wpnews.pro/news/google-custom-search-json-api-is-shutting-down-a-web-search-api-to-move-to-1.txt", "jsonld": "https://wpnews.pro/news/google-custom-search-json-api-is-shutting-down-a-web-search-api-to-move-to-1.jsonld"}}