◀ 5.

Google Custom Search JSON API の終了と移行先|2027年1月1日・Vertex AI Search・料金

この記事の要点
  • Custom Search JSON API は新規受付を終了している。これから使い始めることはできない
  • 既存ユーザーも 2027 年 1 月 1 日までに別の仕組みへ移行が必要(それ以降は動かなくなる)
  • Programmable Search Engine は 2026 年 1 月 20 日以降、新規エンジンは「検索するサイト」(最大 50 ドメイン)だけ。既存エンジンの「ウェブ全体を検索」も 2027 年 1 月 1 日まで
  • Custom Search Site Restricted JSON API は 2025 年 1 月 8 日に提供終了済み
  • Google の案内する移行先は Vertex AI Search(50 ドメインまでのサイト検索)。ウェブ全体の検索が必要な場合は Google に問い合わせる形
  • 既存ユーザーの料金は 100 クエリ/日まで無料、超過分は 1,000 クエリあたり 5 ドル(1 日 1 万クエリまで)

Google Custom Search JSON API とは(2026 年時点の状況)

Custom Search JSON API は、Programmable Search Engine(旧 Custom Search Engine、CSE)で作った検索エンジンに対して、プログラムから検索をかけて結果を JSON で受け取るための API です。エンドポイントは https://www.googleapis.com/customsearch/v1 で、API キーと検索エンジン ID(cx)を付けて呼び出します。

長く「Google の検索結果をプログラムから取得する正規の手段」として使われてきましたが、2026 年時点では次のように終了に向かっています。これから検索機能を作る場合は、この API を前提にしないでください。

対象状況日付
Custom Search Site Restricted JSON API提供終了(トラフィックの受付を停止)2025 年 1 月 8 日
Custom Search JSON API(新規)新規の利用受付を終了受付終了済み
Programmable Search Engine(新規エンジン)「検索するサイト」の設定が必須。指定できるのは最大 50 ドメイン。ウェブ全体の検索は不可2026 年 1 月 20 日から
既存エンジンの「ウェブ全体を検索」2027 年 1 月 1 日まで現状の動作を維持。一度オフにすると再びオンにはできない2027 年 1 月 1 日まで
Custom Search JSON API(既存ユーザー)この日までに別の仕組みへ移行が必要2027 年 1 月 1 日

出典: Custom Search JSON API(Google for Developers)、Custom Search Site Restricted JSON API、Programmable Search Engine ヘルプ

今からどうすればいいか(用途別の結論)

やりたいこと2026 年時点の選択肢
自社サイト(50 ドメイン以内)の検索をサイトに埋め込みたい(プログラムからの取得は不要)Programmable Search Engine の「検索するサイト」で検索エンジンを作り、検索ボックス(Search Element)を貼る
自社サイトや特定サイト群(50 ドメイン以内)の検索結果を API で取得したいVertex AI Search のウェブサイト検索アプリへ移行(Google 公式の移行先)
ウェブ全体の検索結果を API で取得したいGoogle は「より高度なウェブ全体検索のソリューション」への問い合わせを案内している(一般公開の後継 API が案内されているわけではない)
すでに Custom Search JSON API を使っている2027 年 1 月 1 日までは従来どおり動く。期限までに上の移行先へ切り替える計画を立てる

Programmable Search Engine 自体がなくなるわけではありません。変わるのは「ウェブ全体を検索する」使い方と、JSON で結果を取得する API の部分です。

移行先: Vertex AI Search(ウェブサイト検索)

Google は Custom Search JSON API の代わりとして、50 ドメインまでの検索には Vertex AI Search を案内しています。Google Cloud の生成 AI アプリ(AI Applications)の一機能で、Google Cloud のドキュメントでは Agent Search への名称変更も告知されています。コンソールやドキュメントでどちらの名前でも出てくる可能性があります。

Google Cloud のドキュメントには、Custom Search からの移行手順(Migrate from Custom Search)が用意されています。流れは次のとおりです。

  1. Google Cloud コンソールでプロジェクトを選び、Vertex AI Search(Agent Search)を有効にする
  2. 「AI Applications」のページで「アプリを作成」から、サイト検索のアプリを作成する
  3. ウェブサイト検索には Enterprise エディションの機能が必要なので有効にする。従来の API と同じ「検索結果だけ」を返す使い方なら、生成 AI による回答(Generative Responses)はオフにする
  4. ロケーションは global を選ぶ
  5. データストアを作成し、データソースに「ウェブサイトのコンテンツ」を選ぶ
  6. 「高度なウェブサイト インデックス登録」をオフにすると、旧 Site Restricted JSON API に近い動作になる(オンにすると要約などの機能が使えるが、ドメインの所有権確認と追加のインデックス費用が必要)
  7. 「含めるサイト」に検索対象の URL パターンを入力して作成する

API キーのまま呼びたい場合は searchLite

Vertex AI Search の通常の検索メソッド(search)は OAuth 2.0 による認証が必要です。Custom Search JSON API のように API キーで呼びたい場合は searchLite メソッドを使います。searchLite が扱えるのは公開ウェブサイトの検索だけで、Google はセキュリティ上、可能なら OAuth 2.0 と IAM を使う search を推奨しています。

公式ドキュメントにある呼び出し例は次の形です(PROJECT_ID・APP_ID・API_KEY・QUERY は自分の値に置き換えます)。

curl -X POST -H "Content-Type: application/json" \
  "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:searchLite?key=API_KEY" \
  -d '{
    "servingConfig": "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search",
    "query": "QUERY",
    "userPseudoId": "USER_PSEUDO_ID"
  }'

Custom Search JSON API とはエンドポイント・リクエストの形(GET のクエリ文字列から POST の JSON へ)・レスポンスの構造がすべて異なります。呼び出し部分だけでなく、結果を表示するコードも作り直しが必要です。API キーを使う場合は、移行手順にあるとおりキーの API 制限を https://discoveryengine.googleapis.com/* 向けに設定します。料金は Custom Search JSON API とは別体系なので、Google Cloud の料金ページで確認してください。

既存ユーザー向け: Custom Search JSON API の使い方(2027 年 1 月 1 日まで)

以下は、すでに Custom Search JSON API を使っているシステムを保守するための情報です。新規には使えません。

必要なもの

  • API キー: Custom Search API を有効にした Google Cloud プロジェクトで発行したもの
  • 検索エンジン ID(cx): Programmable Search Engine のコントロールパネルで確認できる
  • 課金設定: 1 日 100 クエリを超えて使う場合のみ、Google Cloud の請求先アカウントを紐付ける

基本的な呼び出し

curl "https://www.googleapis.com/customsearch/v1?key=API_KEY&cx=CX_ID&q=Laravel+tutorial"

レスポンスは JSON で、検索結果は items 配列に入ります。各要素の title・link・snippet・displayLink を使うのが基本です。次ページがある場合は queries.nextPage が含まれます。

{
  "kind": "customsearch#search",
  "queries": {
    "request": [{ "searchTerms": "Laravel tutorial", "count": 10, "startIndex": 1 }],
    "nextPage": [{ "startIndex": 11 }]
  },
  "searchInformation": { "searchTime": 0.42, "totalResults": "12300000" },
  "items": [
    {
      "kind": "customsearch#result",
      "title": "Laravel Tutorial - 初心者向け",
      "link": "https://example.com/laravel",
      "displayLink": "example.com",
      "snippet": "Laravel は PHP のフレームワーク..."
    }
  ]
}

主なクエリパラメータ

パラメータ説明例
keyAPI キーAIza...
cx検索エンジン IDコントロールパネルの値
q検索キーワードLaravel tutorial
num1 回で返す件数(1〜10)10
start取得開始位置(1 始まり)。取得できるのは先頭 100 件まで11(2 ページ目)
lr結果の言語を絞るlang_ja
gl地域(国コード)で結果を寄せるjp
searchTypeimage で画像検索image
siteSearch特定サイトに限定、または除外(siteSearchFilter と併用)example.com
dateRestrict期間で絞る(d=日、w=週、m=月、y=年)m6
fileTypeファイル形式で絞るpdf
safeセーフサーチactive

検索対象の範囲は、パラメータではなく検索エンジン(cx)側の設定で決まります。2026 年 1 月 20 日以降に作られたエンジンは「検索するサイト」で指定したドメインだけが対象です。

Python での呼び出し例

import os
import requests

API_KEY = os.environ["GCS_API_KEY"]
CX = os.environ["GCS_CX"]

def google_search(query, start=1, num=10, **kwargs):
    params = {"key": API_KEY, "cx": CX, "q": query, "num": num, "start": start, **kwargs}
    r = requests.get("https://www.googleapis.com/customsearch/v1", params=params, timeout=10)
    r.raise_for_status()
    return r.json()

res = google_search("Laravel tutorial", lr="lang_ja", gl="jp")
for item in res.get("items", []):
    print(item["title"], "-", item["link"])

# 最大 100 件まで(10 件 x 10 ページ)
all_items = []
for page in range(10):
    res = google_search("Python", start=page * 10 + 1)
    all_items.extend(res.get("items", []))
    if "nextPage" not in res.get("queries", {}):
        break

API キーはコードに直接書かず、環境変数などから読み込みます。キーには Google Cloud コンソールで API の制限(Custom Search API のみ)と、サーバーの IP アドレスなどのアプリケーション制限を付けておくと、漏えい時の被害を抑えられます。

料金と上限(既存ユーザーのみ)

項目内容
無料枠1 日 100 クエリ
有料1,000 クエリあたり 5 ドル
1 日の上限10,000 クエリ
1 リクエストで返る件数最大 10 件
1 つの検索語で取得できる件数最大 100 件

公式ページでは、この料金は「既存ユーザーに対して 2027 年 1 月 1 日の提供終了まで適用される」と明記されています。

よくあるつまずき

  • 新しいプロジェクトで Custom Search API を有効にしても使えない: 新規受付を終了しているためです。新規の検索機能は Vertex AI Search で作ります。
  • 新しく作った検索エンジンでウェブ全体を検索できない: 2026 年 1 月 20 日以降の新規エンジンは「検索するサイト」(最大 50 ドメイン)しか設定できません。
  • 既存エンジンの「ウェブ全体を検索」をオフにしたら戻せない: 一度オフにすると再びオンにはできません。検証目的で切り替えないよう注意します。
  • Site Restricted JSON API の呼び出しがエラーになる: 2025 年 1 月 8 日に提供終了しています。Vertex AI Search のウェブサイト検索(高度なインデックス登録オフ)が移行先です。
  • start を大きくするとエラーになる: 取得できるのは先頭 100 件までです。それ以上はキーワードや条件を分けて検索します。
  • クォータ超過のエラー: 1 日の無料枠や設定した上限を超えると、リクエストがエラーで返ります。Google Cloud コンソールの「API とサービス」でクォータと使用量を確認します。

よくある質問

Q: 2027 年 1 月 1 日以降も Custom Search JSON API は使える?
A: 使えません。公式ページで、既存ユーザーはこの日までに別の解決策へ移行するよう告知されています。

Q: Google 検索の結果そのものを API で取得する公式の手段は?
A: 2026 年時点で、ウェブ全体の検索結果を誰でも申し込める形で提供する公式 API は案内されていません。Custom Search JSON API の公式ページは、ウェブ全体の検索が必要な場合は Google に問い合わせるよう案内しています。なお、google.com の検索結果ページを自動で取得(スクレイピング)するのは Google の利用規約で認められていません。

Q: Bing Search API に乗り換えられる?
A: Microsoft の Bing Search API は 2025 年 8 月 11 日に提供を終了しており、代わりにはなりません。

Q: サイト内検索の検索ボックスを置きたいだけなら?
A: Programmable Search Engine で「検索するサイト」を指定してエンジンを作り、発行される検索ボックスのコードを貼れば足ります。API は不要です。

関連

子ページ
  1. JSON API
同階層のページ
  1. YouTube Data API (v3)
  2. Twitter API
  3. Facebook API
  4. Google Trends
  5. Google Custom Search API
  6. App Store Connect API