<!-- twin of https://specstream.ai/google-custom-search-site-restricted-api -->
# Custom Search Site Restricted JSON API: it stopped on January 8, 2025. The same call works again

Compared on Nov 10, 2026. The page: https://specstream.ai/google-custom-search-site-restricted-api

Google's Custom Search Site Restricted JSON API stopped serving traffic on January 8, 2025, and Google sent its customers to Vertex AI Search. A GitHub code search on November 10, 2026 finds 2,196 public files that still hold its address.

Since November 10, 2026, SpecStream answers that call. Change `https://www.googleapis.com` to `https://api.specstream.ai` and put a SpecStream key in `key=`. `GET /customsearch/v1/siterestrict` replies in Google's JSON, and `siteSearch` keeps the search to one site.

It is the most accurate web search API in the world: 97.9 F-score on all 1,000 SimpleQA Verified questions, shown on the [benchmarks](https://specstream.ai/benchmarks?utm_source=alternatives&utm_campaign=google-custom-search-site-restricted-api) page. A call of up to 10 results costs $0.005, with no daily limit.

[Get an API key](https://specstream.ai/signup?src=alternatives-google-custom-search-site-restricted-api&utm_source=alternatives-md&utm_campaign=google-custom-search-site-restricted-api&returnTo=%2Fworkspace%2Fsearch%3Froute%3Dgoogle) New accounts get $10 of credit, no card. It covers 2,000 searches.

## SpecStream, the retired Site Restricted JSON API and Vertex AI Search, from Google's own pages on Nov 10, 2026

| | SpecStream | Site Restricted JSON API (retired) | Vertex AI Search (Agent Search) |
|---|---|---|---|
| Status | Answers since November 10, 2026 at `https://api.specstream.ai/customsearch/v1/siterestrict` | Stopped serving traffic on January 8, 2025 | Google's named replacement. Its pricing page is titled Agent Search pricing |
| What you change | The base address and the key. The path, the parameters and the parser stay | Google's notice says every customer must move to Google Cloud's Agent Search | The endpoint and the request, to a `POST` in a Google Cloud project. Google's migration guide covers Site Restricted JSON API users |
| The request | `GET /customsearch/v1/siterestrict?key=...&q=...&siteSearch=...`, as your code sends it. `cx` is accepted and not used | `https://www.googleapis.com/customsearch/v1/siterestrict?[parameters]`, with the same parameters as the Custom Search JSON API | `POST https://discoveryengine.googleapis.com/v1/{servingConfig}:search`, with a serving config under a project, location, collection and engine |
| Which sites | One site with `siteSearch=<site>`, or the whole live web without it | 10 or fewer sites in the engine, with Search the entire web set to off | Up to 50 domains |
| The reply | Google's JSON: `kind` `customsearch#search`, `items[]` with `title`, `link`, `snippet` and `displayLink`, `searchInformation.totalResults` and `queries.nextPage` | The Custom Search JSON API's reply: `items[]` with the URL, title and text snippets of each result | The reply of the `servingConfigs.search` method |
| Price per 1,000 | $5 per 1,000 searches of up to 10 results, $0.005 a call. A busy call gets `429` with `Retry-After` and is not charged | $5 per 1,000 queries | $1.50 per 1,000 queries on Standard and $4.00 on Enterprise, plus data storage |
| Daily limit and free use | No daily limit. A new account gets $10 of credit, no card, which covers 2,000 searches | No daily query limit | A free trial of 10,000 queries per account a month |

## Why the call works again on SpecStream

### The same call, at a new address

```
# Before: answered by Google until January 8, 2025
curl "https://www.googleapis.com/customsearch/v1/siterestrict?key=$GOOGLE_KEY&cx=$CX&q=rate+limits&siteSearch=docs.github.com"

# After
curl "https://api.specstream.ai/customsearch/v1/siterestrict?key=$SPECSTREAM_KEY&cx=$CX&q=rate+limits&siteSearch=docs.github.com"
```

The path, the parameters and the parser stay as they are. The address changes, and the key.

### How a site restricted search works here

Google kept a search to your sites through the engine you set up under `cx`. SpecStream accepts `cx` and does not use it. Send `siteSearch=<site>` and the search stays on that site; leave it out and the call searches the whole live web. `q`, `num`, `start`, `siteSearch`, `exactTerms`, `orTerms` and `hq` shape the search as they did on Google.

### Google's client libraries work with one changed line

`cse.siterestrict.list` answers in `google-api-python-client` 2.201.0 and in `googleapis` 189.0.0 for Node, tested on production on November 10, 2026. In Python, pass `client_options={"api_endpoint": "https://api.specstream.ai"}` to `build`. In Node, pass `rootUrl: "https://api.specstream.ai/"` to `google.customsearch`. The SpecStream key goes where Google's key went.

### The same $5 per 1,000, with no daily limit

Google charged $5 per 1,000 queries on the Site Restricted JSON API, with no daily limit. SpecStream charges $5 per 1,000 searches of up to 10 results, with no daily limit. A busy call gets a `429` with `Retry-After` and is not charged. Every rate is on the [pricing](https://specstream.ai/pricing?utm_source=alternatives&utm_campaign=google-custom-search-site-restricted-api) page.

### The most accurate web search API, in under a second

The Search API scores 97.9 F-score on all 1,000 SimpleQA Verified questions, 978 of them correct, and 64.0 item F1 on all 200 WideSearch tasks. Measured on production on November 9, 2026, the median call took 0.82 seconds at one search a second and 1.07 seconds at 20 a second, and one account can send 8,800 searches a minute.

### Pages and rows on the same key

The same key reads up to 20 pages or documents a call with the [Extract API](https://specstream.ai/extract-api?utm_source=alternatives&utm_campaign=google-custom-search-site-restricted-api) at $0.80 per 1,000 pages, and runs [Deep Search](https://specstream.ai/deep-search?utm_source=alternatives&utm_campaign=google-custom-search-site-restricted-api), which returns every match on the live web as structured rows at 5¢, 15¢ or $1 a row. A key made with `zero_retention` keeps nothing of your calls.

## Other Site Restricted JSON API replacements

### Vertex AI Search

The replacement Google's notice names, now priced as Agent Search: $1.50 per 1,000 queries on Standard and $4.00 on Enterprise, plus data storage, for up to 50 domains. The call becomes a `POST` to a serving config in a Google Cloud project. SpecStream answers the `GET` your code already sends.

### Custom Search JSON API

The sibling API, at `/customsearch/v1`. It is closed to new customers, and existing customers have until January 1, 2027. SpecStream answers `/customsearch/v1` too, at the same $5 per 1,000.

### Brave Search API

A search API on Brave's own index at $5 per 1,000 requests, with $5 in free credits every month. Its guide describes the move as "swapping the endpoint and updating how you read the response". On SpecStream the reply is Google's JSON, so the code that reads it stays.

## How to bring a siterestrict call back

1. Create a key under Agents & API in the workspace. A new account gets $10 of credit, no card, which covers 2,000 searches.

2. Set the base address to `https://api.specstream.ai` where your code has `https://www.googleapis.com`, and send the SpecStream key in `key=`. In Python:

```
import requests

BASE = "https://api.specstream.ai"  # was https://www.googleapis.com

reply = requests.get(
    f"{BASE}/customsearch/v1/siterestrict",
    params={"key": SPECSTREAM_KEY, "cx": CX, "q": "rate limits", "siteSearch": "docs.github.com", "num": 10},
    timeout=30,
)
reply.raise_for_status()
for item in reply.json().get("items", []):
    print(item["title"], item["link"], item["snippet"])
```

3. In JavaScript:

```
const params = new URLSearchParams({ key: process.env.SPECSTREAM_KEY, q: "rate limits", siteSearch: "docs.github.com", num: "10" });
const res = await fetch(`https://api.specstream.ai/customsearch/v1/siterestrict?${params}`);
const data = await res.json();
for (const item of data.items ?? []) console.log(item.title, item.link);
```

4. Put the site your engine searched in `siteSearch`. To page, send the `startIndex` from `queries.nextPage[0]` as `start`. On a `429`, wait the seconds in `Retry-After` and send the call again; nothing was charged.

## Frequently asked questions

### When did the Custom Search Site Restricted JSON API stop working?

On January 8, 2025. Google's notice says the endpoints ceased to serve traffic that day, and sends its customers to Google Cloud's Vertex AI Search.

### Can I still call customsearch/v1/siterestrict?

Yes, at SpecStream since November 10, 2026. Send `GET https://api.specstream.ai/customsearch/v1/siterestrict` with a SpecStream key in `key=`, and the reply comes back in Google's JSON.

### How do I restrict a search to one site?

Send `siteSearch=<site>`, for example `siteSearch=docs.github.com`. `cx` is accepted and not used, so the engine ID in your code can stay.

### Does cse.siterestrict.list still work in Google's client library?

Yes, in `google-api-python-client` 2.201.0 and `googleapis` 189.0.0, tested on November 10, 2026. Set the address to `https://api.specstream.ai` where the client is built and put the SpecStream key where Google's key went.

### How much does it cost?

$5 per 1,000 searches, $0.005 a call of up to 10 results, with no daily limit. A busy call gets a `429` with `Retry-After` and is not charged, and a new account gets $10 of credit, no card.

### What did Google replace the Site Restricted JSON API with?

Vertex AI Search, now priced as Agent Search at $1.50 per 1,000 queries on Standard and $4.00 on Enterprise, plus data storage. It takes a `POST` to a serving config in a Google Cloud project. SpecStream answers the `GET` your code sends today.

## Sources

SpecStream wrote this page. Each Google figure comes from Google's own page. The file count is a GitHub code search for customsearch/v1/siterestrict on Nov 10, 2026: files that hold the address.

- [Google, Custom Search Site Restricted JSON API](https://developers.google.com/custom-search/v1/site_restricted_api), read Nov 10, 2026
- [Google Custom Search JSON API overview](https://developers.google.com/custom-search/v1/overview), read Nov 10, 2026
- [Google Custom Search JSON API, using REST](https://developers.google.com/custom-search/v1/using_rest), read Nov 10, 2026
- [Google Cloud, Agent Search pricing](https://cloud.google.com/generative-ai-app-builder/pricing), read Nov 10, 2026
- [Google Cloud, migrate from Custom Search](https://docs.cloud.google.com/generative-ai-app-builder/docs/migrate-from-cse?hl=en), read Nov 10, 2026
- [Google Cloud, servingConfigs.search](https://cloud.google.com/generative-ai-app-builder/docs/reference/rest/v1/projects.locations.collections.engines.servingConfigs/search), read Nov 10, 2026
- [Brave Search API](https://brave.com/search/api/), read Nov 10, 2026
- [Brave, alternatives to the Google Search API](https://brave.com/learn/google-api-shutdown/), read Nov 10, 2026
- [GitHub code search, customsearch/v1/siterestrict](https://github.com/search?q=%22customsearch%2Fv1%2Fsiterestrict%22&type=code), read Nov 10, 2026
- [SpecStream benchmarks](https://specstream.ai/benchmarks), read Nov 10, 2026
- [SpecStream pricing](https://specstream.ai/pricing), read Nov 10, 2026
- [SpecStream for agents](https://specstream.ai/agents.md), read Nov 10, 2026
