Skip to content

New Official SDKs for TypeScript, Python and Go

SerpKite
Get API key

GET /customsearch/v1

CSE-compatible /customsearch/v1 endpoint

The endpoint reference: SerpKite's /customsearch/v1 accepts the Custom Search JSON API's query parameters and returns the same items[], searchInformation and queries objects. Moving an app before the January 1, 2027 shutdown? Follow the Google Custom Search JSON API alternative guide.

Get a free API key Try in playground
1 credit per request (up to 10 items) 2,500 free credits, no card Failed calls are free

Overview

What the CSE-compatible /customsearch/v1 endpoint does

Google closed the Custom Search JSON API to new customers on January 20, 2026 and will shut it down on January 1, 2027. Thousands of apps, plugins and automations still call https://www.googleapis.com/customsearch/v1.

SerpKite's endpoint mirrors that contract: GET /customsearch/v1 with key, cx, q, start and num (plus gl, hl, lr, safe, dateRestrict, siteSearch and searchType=image), returning kind: "customsearch#search" with items[] (title, htmlTitle, link, displayLink, snippet, htmlSnippet, formattedUrl, pagemap) and searchInformation. Existing parsers keep working.

What you get

kind string
Always customsearch#search, as in Google's API.
items[] array
kind, title, htmlTitle, link, displayLink, snippet, htmlSnippet, formattedUrl, htmlFormattedUrl, pagemap, image.
searchInformation object
searchTime, formattedSearchTime, totalResults, formattedTotalResults.
queries object
request[] and nextPage[] with searchTerms, count and startIndex, for pagination code that reads them.

Request

curl "https://api.serpkite.com/customsearch/v1?key=$SERPKITE_API_KEY&cx=any&q=site:docs.python.org+asyncio&start=1&num=10"

Response (illustrative, placeholder domains)

200 OK · application/json (CSE shape)
{
  "kind": "customsearch#search",
  "searchInformation": {
    "searchTime": 0.94,
    "formattedSearchTime": "0.94",
    "totalResults": "1240000",
    "formattedTotalResults": "1,240,000"
  },
  "items": [
    {
      "kind": "customsearch#result",
      "title": "asyncio — Asynchronous I/O",
      "htmlTitle": "<b>asyncio</b> — Asynchronous I/O",
      "link": "https://docs.python.org/3/library/asyncio.html",
      "displayLink": "docs.python.org",
      "snippet": "asyncio is a library to write concurrent code using the async/await syntax.",
      "formattedUrl": "https://docs.python.org/3/library/asyncio.html"
    }
  ],
  "queries": {
    "request": [
      {
        "searchTerms": "site:docs.python.org asyncio",
        "count": 10,
        "startIndex": 1
      }
    ],
    "nextPage": [
      {
        "searchTerms": "site:docs.python.org asyncio",
        "count": 10,
        "startIndex": 11
      }
    ]
  }
}

Every response also carries X-Credits-Used, X-Credits-Remaining, X-Cache and X-Tokens-Estimate headers. Run this query in the playground

Google Custom Search JSON API shuts down on January 1, 2027

It closed to new customers on January 20, 2026. After the shutdown, requests to googleapis.com/customsearch/v1 stop working. See the full CSE migration guide or paste a URL into the CSE migration helper.

Parameter mapping

Google CSE and SerpKite, side by side

Same path, same parameters, same response keys. The only behavioral difference is cx: SerpKite searches the whole web.

Google Custom Search JSON API parameters mapped to SerpKite
Google Custom Search SerpKite Notes
https://www.googleapis.com/customsearch/v1 https://api.serpkite.com/customsearch/v1 Only the host changes.
key (Google API key) key (skt_live_…) or Authorization: Bearer Create a key in the dashboard.
cx cx (accepted, ignored) Whole-web results. Use siteSearch or site: to restrict.
q q Operators like site:, filetype: and quotes work.
start (1–91) start (1–91) Same pagination.
num (1–10) num (1–10) For 100 at once, use POST /v1/search with num=100.
gl, hl, lr gl, hl, lr Country and language (Google CSE names).
safe safe active or off.
dateRestrict dateRestrict d7, w2, m6, y1…
siteSearch siteSearch Restrict to one site.
searchType=image searchType=image Image items in CSE shape.
items[], searchInformation, queries items[], searchInformation, queries Same keys; parsers keep working.

The whole migration, as a diff

Most codebases change two lines. The response still has items[], searchInformation.totalResults and queries.nextPage, so pagination and parsing code is untouched.

When you're ready for more, move to POST /v1/search for People Also Ask, knowledge graph, Markdown output and top-100 results.

app.js
- const BASE = "https://www.googleapis.com/customsearch/v1";
- const KEY  = process.env.GOOGLE_API_KEY;
+ const BASE = "https://api.serpkite.com/customsearch/v1";
+ const KEY  = process.env.SERPKITE_API_KEY; // skt_live_…

  const url = `${BASE}?key=${KEY}&cx=${CX}&q=${encodeURIComponent(q)}&start=${start}`;
  const { items, searchInformation } = await (await fetch(url)).json();

Reference

Parameters

The parameters /customsearch/v1 accepts, in the JSON body or the query string.

CSE-compatible /customsearch/v1 endpoint parameters
Name Type Default Description
key required string – Your SerpKite API key (skt_live_…). Or send it as an Authorization: Bearer header.
cx string – Accepted and ignored, so existing URLs don't break. Results are from the whole web.
q required string – The search query, including operators like site:.
start integer 1 Index of the first result, 1–91, as in CSE.
num integer 10 Results to return, 1–10.
gl string – Country code.
hl string – Interface language.
lr string – Language restrict, e.g. lang_de.
safe string off active or off.
dateRestrict string – d7, w2, m6, y1…
siteSearch string – Restrict results to one site.
searchType string – image for image results.

Full reference, error codes and headers are in the API docs. Send a JSON array of up to 100 request objects to run them in one call.

Use cases

What people build with the CSE-compatible /customsearch/v1 endpoint

01

Beat the shutdown

Keep apps that call customsearch/v1 running after January 1, 2027.

02

Plugins and CMS search

WordPress plugins, internal tools and Zapier flows built on CSE keep their parser.

03

Site search via site:

Use siteSearch or site: operators to recreate a site-restricted engine.

04

Upgrade later

Move to POST /v1/search or the official SDKs when you want Markdown, SERP features or top-100 results.

Pricing

CSE-compatible /customsearch/v1 endpoint pricing

Cost per call

1 credit

per request (up to 10 items)

  • From $0.60 per 1,000 calls at volume.
  • Credits never expire. No subscription.
  • Failed, empty and blocked calls are refunded.
  • 2,500 free credits = 2,500 calls, then 1,000 credits a month.

For reference: Serper lists Google searches at $1.00 per 1k on its entry tier and $0.30 at its best tier, and its credits expire after 6 months. SerpKite credits cost $1.00 to $0.60 per 1k.

See all pricing
CSE-compatible /customsearch/v1 endpoint cost per pack
Pack Price Per 1k credits Per 1k calls Calls per pack
Starter $10 $1.00 $1.00 10,000
Growth $50 $0.80 $0.80 62,500
Pro $300 $0.60 $0.60 500,000

FAQ

CSE-compatible /customsearch/v1 endpoint: common questions

Start building

Start with the CSE-compatible /customsearch/v1 endpoint

2,500 free credits, then 1,000 every month. No credit card.