Google Custom Search JSON APIの代替:
GoogleはCustom Search JSON APIの新規受付を終了し、2027年1月1日にすべてのユーザーへの提供を終了します。Semscraperは、実際のブラウザでレンダリングしたGoogleの検索結果ページをそのまま取得します。1キーワードにつき最大10ページ、クエリにより約100件の結果を、サブスクリプションなしのプリペイドクレジットによる従量課金で利用できます。
- 縮小されたインデックスではなく実際のGoogle SERP
- 1キーワードにつき最大10ページ
- 1ページの検索1,000件で€0.30
- 1,000件の無料SERP
- クレジットカードなし
Googleの発表内容と
Googleのドキュメント(developers.google.com/custom-search/v1/overview およびProgrammable Search Engineのヘルプセンター)に基づく内容です。2026年10月10日に確認しました。
2026年1月20日以降
新しいProgrammable Search Engineは、指定した50ドメインまでに制限されます。「ウェブ全体を検索」オプションは提供されなくなりました。このオプションを使っている既存の検索エンジンは、2027年1月1日まで引き続き利用できます。
新規受付の終了
新しいプロジェクトでCustom Search JSON APIを有効にすることはできなくなりました。50ドメインまでの検索には、GoogleはVertex AI Searchを案内しています。ウェブ全体の検索はGoogleへの申請が必要です。
2027年1月1日
既存ユーザー向けのCustom Search JSON APIも終了します。まだこのAPIを呼び出しているアプリケーションは、それまでに移行を済ませる必要があります。
Semscraperが
SemscraperはCustom Searchをそのまま置き換える互換品ではありません。検索ユーザーが見るGoogleのページを取得するAPIです。置き換えに向いている用途もあれば、向いていない用途もあります。
向いている:Googleの監視
順位追跡、競合調査、SERP分析、AI Overviews。google.co.jp、google.comをはじめ、あらゆる国の実際の検索結果を、都市やデバイスを指定して取得できます。
向いている:ツールやエージェントへのデータ供給
Googleが実際に表示する内容を必要とするデータセット、データ拡充、エージェント、RAGパイプライン。処理は非同期のため、即時の応答ではなく、1回の検索につき収集時間として約20秒をお見込みください。
向いていない:自社サイト内の検索
自社ページを対象に一瞬で応答する必要がある検索ボックスには、サイト内検索エンジン、またはGoogleが50ドメインまで提供するVertex AI Searchが適しています。
Custom Search JSON APIとSemscraperの
| 項目 | Custom Search JSON API | Semscraper |
|---|---|---|
| 結果の取得元 | ご自身のProgrammable Search Engineです。ウェブ全体を対象に設定しても、Googleのインデックスの一部しか対象にならず、ご自身のサイトが優先されるとGoogleは説明しています。 | 実際のブラウザでレンダリングした、Googleの実際の検索結果ページです。 |
| 内容 | ウェブ検索結果のリストです。Google検索の機能(Onebox、ユニバーサル検索)は含まれません。 | ページ上のすべてのブロック:自然検索結果、広告、ローカルパック、People Also Ask、ソース付きのAI Overviewsなど。 |
| 結果の件数 | 1リクエストにつき10件、ページ送りで最大100件です(start + num は100を超えられません)。 | 1回の呼び出しで最大10ページ、クエリにより約100件です。 |
| 国、言語、都市、デバイス | glは特定の国の結果を優先し、hlはインターフェースの言語を設定し、lrとcrはドキュメントを絞り込みます。 | Googleのバージョン(国と言語)、都市またはGPS座標、デスクトップまたはモバイルを指定できます。 |
| 処理方式 | 同期型:呼び出しの中で応答が返ります。 | 非同期型:検索を作成し(1回の呼び出しで最大1,000件)、その後IDで結果を取得するか、コールバックURLで受け取ります。収集時間の中央値は1ページで約20秒、10ページで約50秒で、これにアカウントのキュー待ち時間が加わります(2026年9月12日から10月10日までの1,200万件のSERPで測定、うち1ページ530万件、10ページ26万件)。 |
| 料金 | 1日100クエリまで無料、それ以降は1,000件あたり5ドル、1日10,000件までです。 | 1ページの検索1,000件で€0.30、10ページの検索1,000件で€2.10です。サブスクリプションも1日の上限もなく、残高に有効期限はありません。 |
| 特定ドメインの検索 | 対応しています。新しい検索エンジンではこれが唯一のモードです(50ドメインまで)。 | ドメインのリストを保存する機能はありません。キーワードにsite:演算子を入れると、1つのドメインに絞って検索できます。 |
| 画像検索 | 対応しています(searchType=image)。 | 対応していません。Googleが検索結果ページに画像ブロックを表示した場合に、そのブロックのみが返されます。 |
の置き換え
パラメータはそのまま入れ替えられるわけではありません。呼び出しの置き換え方を以下にまとめます。Googleの検索演算子は、キーワードに含めればそのまま使えます。
| Custom Search | Semscraper |
|---|---|
q | keyword |
gl | location:国コードではなくGoogleのバージョンです。gl=jpはlocation=jpでgoogle.co.jp、gl=usはlocation=enでgoogle.comになります |
hl | language:locationと有効な組み合わせにします(jp/ja、en/en、fr/frなど) |
num, start | depth:Googleの1〜10ページを指定し、同じ呼び出しですべて返されます |
siteSearch | キーワードにsite:example.com |
exactTerms | キーワードを引用符で囲む |
excludeTerms | キーワードに-単語 |
fileType | キーワードにfiletype:pdf |
lr, cr | 直接の対応はありません。Googleのバージョンと言語を選んでください |
searchType=image | 対応なし |
key, cx | APIキー1つを、Authorization: Bearerヘッダーで送信します |
呼び出しの移行を
同じ処理をPythonで書いた例です。google.co.jpでのクエリについて、自然検索の上位10件を取得します。主な違いは、作成してから取得する2段階の流れです。
import requests
r = requests.get("https://www.googleapis.com/customsearch/v1", params={
"key": "GOOGLE_API_KEY",
"cx": "SEARCH_ENGINE_ID",
"q": "ランニングシューズ",
"gl": "jp",
"hl": "ja",
"num": 10,
})
for item in r.json().get("items", []):
print(item["link"], item["title"], item["snippet"])
import time
import requests
API = "https://api.semscraper.com/v1/serp"
HEADERS = {"Authorization": "Bearer API_KEY"}
# 1. create the search (up to 1,000 keywords per call)
r = requests.post(API, headers=HEADERS, timeout=60, json=[{
"search_engine": "google_search",
"keyword": "ランニングシューズ",
"location": "jp",
"language": "ja",
"device": "desktop",
"depth": 1,
}])
r.raise_for_status()
ids = [row["id"] for row in r.json()["data"]]
# 2. fetch the results once ready (about 20 s of collection for a depth-1 search,
# plus queue time), 10 minutes at most
deadline = time.time() + 600
while ids and time.time() < deadline:
time.sleep(10)
r = requests.get(API, headers=HEADERS, timeout=60,
params={"ids": ",".join(ids[:100]), "output": "json"}) # 100 IDs per call
r.raise_for_status()
for row in r.json()["data"]:
if row["status"] != "done":
continue
ids.remove(row["id"])
for block in row["results"]:
if block["type"] == "organic":
for item in block["items"]:
print(item["url"], item["title"], item["description"])
if ids:
print("Still pending, fetch them later by ID:", ids)
linkフィールドはurlに、snippetはdescriptionになります。各結果には、ブロック内の順位(rank_type)、ページ内の順位(rank_serp)、Googleのページ番号、ピクセル位置も含まれます。数千件のキーワードを扱う場合は、1,000件ずつ作成し、100件のIDごとに結果を取得するか、コールバックURLで受け取ってください。詳しくはBulk SERP APIをご覧ください。
で切り替え
移行には準備が必要です。旧APIを停止する前に、数日間のテスト期間を設けてください。
1. テスト
登録時に付与される無料の1,000 SERPで、代表的なクエリを実行します。
2. 置き換え
パラメータ(glはlocationに)、非同期呼び出しへの移行、レスポンスのフィールド(linkはurlに、snippetはdescriptionに)を置き換えます。
3. 比較
実際のクエリのサンプルで、関連性、結果の網羅性、処理時間、消費量を比較します。
4. 切り替え
結果を確認できたら、2027年1月1日より十分前にアプリケーションをSemscraperへ切り替えます。
同じ量での
公開料金に基づく比較です。Googleは2026年10月10日に確認した料金、Semscraperはチャージ割引前の標準料金です。
| 用途 | Custom Search JSON API | Semscraper |
|---|---|---|
| 1,000キーワード、1ページ(約10件) | 5ドル(1日の無料枠を除く有料クエリ1,000件) | €0.30 |
| 1,000キーワード、10ページ(約100件) | 50ドル(1キーワードにつき有料クエリ10件、1日の無料枠を除く) | €2.10 |
| 1日10,000クエリを超える場合 | 不可:1日10,000件が上限 | 1日の上限なし |
その日の無料枠100クエリをまだ使っていない場合は、4.50ドルと49.50ドルになります。Custom Search JSON APIは新規ユーザーには提供されていないため、これらの料金は2027年1月1日までの既存アカウントにのみ適用されます。Semscraperの料金の詳細。
よくある質問
Custom Search JSON APIはいつ終了しますか?
SemscraperはCustom Searchと同じ結果を返しますか?
検索を自社ドメインに限定できますか?
応答はすぐに返りますか?
移行後のSemscraperの料金は?
さらに詳しく
Googleをスクレイピングする方法(2026年版)
Googleの検索結果を大規模に収集する難しさは、かつてないほど増しています。1ページ100件表示は廃止され、AI Overviewsは遅れて読み込まれ、SERPは都市ごとに変わります。選択肢と注意点をまとめました。
ガイドを読む →地域別SERP:特定の都市から見たGoogle検索結果
同じ検索語を別々の都市で入力した2人は、同じページを見ていません。ローカルSEOを計測するには、正しい地点からSERPを収集する必要があります。
ガイドを読む →SerpApiの代替サービス:公平な比較
SerpApiは最もよく知られたSERP APIの1つです。Google検索とGoogleマップ向けに代わりのサービスを探しているなら、2つのサービスの違いを、SerpApiが優れている点も含めて紹介します。
ガイドを読む →