<!-- twin of https://specstream.ai/migrate/google-image-search -->
# Google Custom Search images (searchType=image): change the address

Compared on Nov 10, 2026. The page: https://specstream.ai/migrate/google-image-search

Google discontinues the Custom Search JSON API, and its `searchType=image` call with it, on January 1, 2027. The API is already closed to new customers. SpecStream answers the same image call today, in Google's JSON.

The switch is one line: `https://api.specstream.ai` in place of `https://www.googleapis.com`, and a SpecStream key in `key=`. `searchType=image`, `q`, `num` and `start` stay, and `items[].link` is still the image.

An image search of up to 10 results costs $0.005, which is $5 per 1,000, the price of a web search, with no plan and no daily limit. The same key runs web search scoring 97.9 F-score on all 1,000 SimpleQA Verified questions.

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

## Custom Search image search to SpecStream, parameter by parameter and field by field

| | SpecStream | Google Custom Search JSON API, searchType=image |
|---|---|---|
| Address | `GET https://api.specstream.ai/customsearch/v1` with `searchType=image` | `GET https://www.googleapis.com/customsearch/v1`. Closed to new customers, and discontinued on January 1, 2027 |
| The key | A SpecStream key in `key=`, in the `X-Goog-Api-Key` header or as a Bearer token | An API key, and a Programmable Search Engine you configured |
| `searchType` | `image` returns image results. Any other value gets `400` in Google's error form, and a call without it returns web results | `image` for custom image search. Left out, results are limited to webpages |
| `cx` | Accepted and not used. The results come from the image search of several engines at once | The ID of the Programmable Search Engine to use for the request |
| `num` | 1 to 10, and 10 when you send none. A value outside that range gets `400` | Integers between 1 and 10, inclusive |
| `start` | From 1. `queries.nextPage[0].startIndex` gives the next page | Never more than 100 results for a query: `start` plus `num` above 100 returns an error |
| `items[].link` | The image itself. `displayLink` is the site of the page it is on, and `snippet` is the image's title | The URL of each result |
| `items[].image` | `contextLink`, the page the image is on, with `width`, `height`, `thumbnailLink`, `thumbnailWidth` and `thumbnailHeight` when the search engines give them. `byteSize` is left out | `contextLink`, a URL pointing to the webpage hosting the image, with `height`, `width`, `byteSize` (the size of the image, in bytes), `thumbnailLink`, `thumbnailHeight` and `thumbnailWidth` |
| `mime` and `fileFormat` | The image's media type, such as `image/jpeg`, when the search engines give it | The MIME type and the file format of the search result |
| Errors | Google's error body: `error.code`, `message`, `errors[]` and `status`. A `429` comes with `Retry-After` and charges nothing | Its terms say you may be charged for each successful request |
| Price per 1,000 searches | $5. An image search of up to 10 results is one search at $0.005, the price of a web search | $5 per 1,000 queries after 100 free queries a day, for existing customers |
| Daily limit | None. Calls spend from your balance, inside the spending limit you set on the account or the key | 10,000 queries a day |

## Google's image search call, on SpecStream

### The call, before and after

```
# Before
curl "https://www.googleapis.com/customsearch/v1?key=$GOOGLE_KEY&cx=$CX&searchType=image&q=red+running+shoes&num=10"

# After
curl "https://api.specstream.ai/customsearch/v1?key=$SPECSTREAM_KEY&cx=$CX&searchType=image&q=red+running+shoes&num=10"
```

The path, the parameters and the parser stay. The address changes, and the key. Your code reads `items[].link` for the image and `items[].image.contextLink` for the page it is on, as it did on Google.

### The parameters the route reads

Read and used: `q`, `searchType=image`, `num` (1 to 10), `start` (from 1), and `siteSearch`, `exactTerms`, `orTerms` and `hq`, which are added to the query as search operators. `fields` cuts the reply to your selection, such as `fields=items(link,image/contextLink)`, and a selection that does not parse gets `400`.

`cx` is accepted and not used, so a call that sends it works unchanged. `searchType` takes one value, `image`: any other value gets `400` with the message "Invalid value '<value>'. Values must match: searchType=image."

### Every field that comes back

The reply has `kind` `customsearch#search`, `url.template`, `queries` (`request`, and `nextPage` and `previousPage` when there is one), `context`, `searchInformation` with `searchTime`, `formattedSearchTime`, `totalResults` and `formattedTotalResults`, and `items`. `items` is left out of a reply with no result, as on Google.

Each image item has `kind` `customsearch#result`, `title`, `htmlTitle`, `link` (the image), `displayLink` (the site of the page it is on), `snippet` and `htmlSnippet` (the title), and `image` with `contextLink`. `image.width`, `image.height`, `image.thumbnailLink`, `image.thumbnailWidth`, `image.thumbnailHeight`, `mime` and `fileFormat` are there when the search engines give them, and a reply never makes one up.

Left out: `image.byteSize`, because no engine gives it. Image items carry no `pagemap`, `cacheId` or `labels`. One field is added: `specstream`, on the reply and on each item, with the call's `price_usd` and `request_id`. A parser that reads Google's fields never sees it.

### $5 per 1,000 image searches, with no daily limit

An image search of up to 10 results is one search at $0.005, the same price as a web search, and a call that names no `num` gets 10 results. There is no plan to buy and no daily limit, where Google stops at 10,000 queries a day. A busy call answers `429` in Google's error form with `Retry-After` and is not charged. Credit you buy never expires.

### You decide what is kept, on each key

Create the key with `zero_retention` and a search made with it keeps no request text and no answer after the reply. `spend_cap_cents` is the most the key can spend.

```
curl -X POST https://api.specstream.ai/v1/account/keys \
  -H "Authorization: Bearer $SPECSTREAM_API_KEY" -H "Content-Type: application/json" \
  -d '{"name": "production", "scopes": ["account:read", "finds:spend"], "spend_cap_cents": 500000, "zero_retention": true}'
```

### Images, web, news and pages on one key

SpecStream is the live web data engine. The key that answers `searchType=image` also answers Google's web call on the same path: the [Custom Search migration guide](https://specstream.ai/migrate/google-custom-search?utm_source=alternatives&utm_campaign=migrate-google-image-search) covers it parameter by parameter. Web search scores 97.9 F-score on all 1,000 SimpleQA Verified questions and 64.0 item F1 on all 200 WideSearch tasks; the method is on the [benchmarks](https://specstream.ai/benchmarks?utm_source=alternatives&utm_campaign=migrate-google-image-search) page.

The same key reads pages with the [Extract API](https://specstream.ai/extract-api?utm_source=alternatives&utm_campaign=migrate-google-image-search) at $0.80 per 1,000 pages, and [Deep Search](https://specstream.ai/deep-search?utm_source=alternatives&utm_campaign=migrate-google-image-search) returns every match for a request in plain words as structured rows at 5¢, 15¢ or $1 a row. Code written for Bing's image API moves the same way: see [Bing Image Search API](https://specstream.ai/migrate/bing-image-search?utm_source=alternatives&utm_campaign=migrate-google-image-search), and every image API SpecStream answers is on the [image search API](https://specstream.ai/image-search-api?utm_source=alternatives&utm_campaign=migrate-google-image-search) page.

## What else Custom Search image customers can use

### Vertex AI Search (Agent Search)

Google's named alternative, for searching up to 50 domains. Search Standard Edition costs $1.50 per 1,000 queries and Enterprise Edition $4.00 per 1,000, on a different API with a serving config you set up. SpecStream searches images across the web on the path your code already calls, in the JSON it already reads.

### Grounding with Google Search in the Gemini API

Gemini 3 and newer models bill each search query the model runs, at $14 per 1,000 search requests after 5,000 free a month. It returns a grounded answer, not a list of images with their pages. SpecStream returns the image list your code reads, at $5 per 1,000.

### Brave Search API

Brave sells complete search results, images included, at $5 per 1,000 requests with $5 in free credits every month, in Brave's own reply shape. SpecStream answers in Google's shape, so the `items[].link` loop you wrote stays, and the same key also answers Brave's image call if you need it.

## How to migrate, step by step

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` or `https://customsearch.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",
    params={"key": SPECSTREAM_KEY, "cx": CX, "searchType": "image", "q": "red running shoes", "num": 10},
    timeout=30,
)
reply.raise_for_status()
for item in reply.json().get("items", []):
    image = item["image"]
    print(item["link"], image["contextLink"], image.get("width"), image.get("height"))
```

3. In JavaScript, with the key in the `X-Goog-Api-Key` header:

```
const params = new URLSearchParams({ searchType: "image", q: "red running shoes", num: "10" });
const res = await fetch(`https://api.specstream.ai/customsearch/v1?${params}`, {
  headers: { "X-Goog-Api-Key": process.env.SPECSTREAM_KEY },
});
const data = await res.json();
for (const item of data.items ?? []) console.log(item.link, item.image.contextLink);
```

4. If your code uses Google's Python client, change the line that builds it: `build("customsearch", "v1", developerKey=SPECSTREAM_KEY, client_options={"api_endpoint": "https://api.specstream.ai"})`. `cse().list(q=..., cx=..., searchType="image")` stays as it is. Tested on November 10, 2026 with `google-api-python-client` 2.202.0.

Read `image.width`, `image.height` and the thumbnail fields with a default, as above: they are there when the search engines give them. Drop any read of `image.byteSize`.

5. 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

### Is Google's image search API shutting down?

Yes. Google discontinues the Custom Search JSON API, which serves `searchType=image`, on January 1, 2027, and it is closed to new customers. SpecStream answers the same image call at `https://api.specstream.ai/customsearch/v1` today.

### What is the best Google Images API alternative?

SpecStream, at $5 per 1,000 image searches with no daily limit. It answers Google's own `searchType=image` call in Google's JSON, so the code you have keeps working after one changed line.

### How do I search images with the Custom Search API in Python?

Send `searchType=image` with `q` and `num` (1 to 10) to `/customsearch/v1`, and read `items[].link` for the image and `items[].image.contextLink` for its page. On SpecStream the call is the same with `https://api.specstream.ai` as the address and a SpecStream key in `key=`.

### Which image fields does SpecStream not return?

One: `image.byteSize`, because no engine gives it. `image.width`, `image.height`, `thumbnailLink`, `thumbnailWidth`, `thumbnailHeight`, `mime` and `fileFormat` come back when the search engines give them.

### Do I still need a search engine ID (cx) for image search?

No. `cx` is accepted and not used, so a call that sends it works unchanged. The results come from the image search of several engines at once.

### How much does an image search cost?

$0.005 for up to 10 results, which is $5 per 1,000, the same as a web search. Google charges existing customers $5 per 1,000 after 100 free queries a day and stops at 10,000 a day; SpecStream has no daily limit.

### Does SpecStream do reverse image search?

No. SpecStream searches images by words: `q` is the query, as on Google's `searchType=image` call.

## Sources

SpecStream wrote this page. Each Google figure comes from Google's own pages, and each other provider's figure from that company's own page. The route's behavior is taken from its code.

- [Google Custom Search JSON API overview](https://developers.google.com/custom-search/v1/overview), read Nov 10, 2026
- [Google Custom Search JSON API reference, cse.list](https://developers.google.com/custom-search/v1/reference/rest/v1/cse/list), read Nov 10, 2026
- [Google Custom Search JSON API reference, Search](https://developers.google.com/custom-search/v1/reference/rest/v1/Search), read Nov 10, 2026
- [Google Custom Search terms of service](https://developers.google.com/custom-search/terms), read Nov 10, 2026
- [Google Cloud, Agent Search pricing](https://cloud.google.com/generative-ai-app-builder/pricing), read Nov 10, 2026
- [Gemini API, grounding with Google Search](https://ai.google.dev/gemini-api/docs/google-search), read Nov 10, 2026
- [Brave Search API](https://brave.com/search/api/), read Nov 10, 2026
- [SpecStream benchmarks](https://specstream.ai/benchmarks), read Nov 10, 2026
- [SpecStream for agents](https://specstream.ai/agents.md), read Nov 10, 2026
