---
title: "Google広告APIをAIにつなぐ｜認証で詰まる2つの罠と6種類の認証情報"
excerpt: "AIから自然言語でGoogle広告のデータを引ける状態をMCPサーバーで作りました。ただし最大の壁は実装ではなく認証です。必要な認証情報は6種類、取得場所はGCPと広告管理画面に分散。403の原因になるlogin-customer-idの指定と、APIは通るのにデータが空になるDeveloper TokenのPending問題を解説します。"
author: "AI活編集部"
author_username: ai-katsu-editorial
published_at: 2026-04-05T00:00:00+00:00
verified_at: 2026-04-05T00:00:00+00:00
models: ["Claude"]
tools: ["Google Ads", "MCP"]
tasks: ["開発・エンジニアリング", "ツール検証"]
domain: "マーケティング"
canonical_url: https://ai-katsu.jp/articles/google-ads-mcp-auth
---
# Google広告APIをAIにつなぐ｜認証で詰まる2つの罠と6種類の認証情報

Google広告を運用していると、毎日のように管理画面へログインしてデータを確認する作業が発生します。「過去30日のキャンペーンパフォーマンスはどうだったか」「先週CPAが高かったキャンペーンはどれか」——そのたびにブラウザを開き、フィルタをかけ、期間を設定する。

この検証では、**AIから自然言語でGoogle広告APIを叩ける状態**をMCPサーバーで実現しました。ただし最大の壁は実装ではありません。**認証を通すほうが、MCPサーバーのコードを書くより10倍大変でした。**

> 本記事は3回シリーズの第1回です。第2回でローカルMCPサーバーの構築、第3回でリモートMCPサーバーの構築を扱います。

## この検証の概要

| 項目 | 内容 |
| --- | --- |
| 検証時期 | 2026年4月5日 |
| やりたかったこと | AIに「過去30日のキャンペーンパフォーマンスを見せて」と聞くだけで、Google広告APIからデータが返る状態をつくる |
| 使用技術 | MCP（Model Context Protocol）／Google Ads API v19／OAuth 2.0 |
| 本記事の範囲 | **認証まわりのセットアップ**（最初にして最大の壁） |
| 必要な認証情報 | **6種類** |

## 結論：詰まるのは実装ではなく認証

Google広告APIの認証は、必要なものが多く、手順も長く、**エラーメッセージが分かりにくい**という三重苦があります。

特に厄介なのが次の2点です。どちらも「設定は正しいのに動かない」ように見えます。

-   **`login-customer-id` に何を指定するか**——間違えると403
-   **Developer Tokenの Pending 状態**——APIは通るのにデータが空で返る

後述しますが、この2つを知っているかどうかで所要時間がまったく変わります。

## MCPとは

MCP（Model Context Protocol）は、Anthropic社が提唱したオープン標準プロトコルです。よく**「AIアプリケーションのためのUSB-Cポート」**と表現されます。

USB-Cがどんなデバイスでも同じポートで接続できるように、**MCPはどんな外部サービスでも同じプロトコルでAIにつなげられる**という思想です。

```
Claude / Cursor（AIクライアント）
      ↕ MCP プロトコル
   MCPサーバー
      ↕
   外部API（Google広告 API など）
```

2026年現在、MCPのエコシステムは急速に広がっています。Web版のClaudeからもMCPサーバーに接続でき、VS Codeとの統合も進んでいます。パッケージマネージャで公開されたMCPサーバーを1クリックでインストールできる環境も整いつつあります。

## 必要な認証情報は6種類

| # | 必要なもの | 取得場所 |
| --- | --- | --- |
| 1 | GCPプロジェクト | Google Cloud Console |
| 2 | Google Ads APIの有効化 | GCPのAPIライブラリ |
| 3 | OAuth同意画面の設定 | GCPの認証情報 |
| 4 | OAuthクライアントID（client\_id + client\_secret） | GCPの認証情報 |
| 5 | **デベロッパートークン** | **Google広告管理画面**（GCPではない） |
| 6 | リフレッシュトークン | OAuth認証フロー |

取得場所が**GCPとGoogle広告管理画面の2箇所に分かれている**点が、最初の混乱ポイントです。

```
GCPプロジェクト作成
  ↓
Google Ads API有効化
  ↓
OAuth同意画面設定
  ↓
OAuthクライアントID作成 → client_id + client_secret取得
  ↓
Developer Token取得（Google広告管理画面のAPIセンター）
  ↓
認可コード取得（ブラウザでOAuth認証）
  ↓
リフレッシュトークン発行（curlでトークン交換）
  ↓
API動作確認（curlで直叩き）
```

## Step 1〜3：GCP側の設定

Google Cloud Consoleで新規プロジェクトを作成し、「APIとサービス」→「ライブラリ」から **Google Ads API を有効化**します。

次にOAuth同意画面を設定します。ポイントは3つです。

-   **ユーザータイプ**: 「外部」を選択
-   **スコープ**: `https://www.googleapis.com/auth/adwords` を追加
-   **テストユーザー**: 自分のGoogleアカウントのメールアドレスを追加

**テストユーザーの追加を忘れると、認証時に「このアプリはアクセスできません」というエラーが出ます。**見落としやすい項目です。

続いて「認証情報を作成」→「OAuthクライアントID」で、アプリケーションの種類に**「デスクトップアプリ」**を選択します。作成すると client\_id と client\_secret が表示されるので控えておきます（JSONでダウンロードも可能）。

## Step 4：Developer Tokenの取得

ここが特殊です。**Developer TokenはGCPではなく、Google広告の管理画面から取得します。**

Google広告にログインし、「ツールと設定」→「APIセンター」に進むと、**22文字の英数字トークン**が表示されます。

そして重要な注意点があります。

-   **最初に発行されるDeveloper Tokenは Pending（テスト）状態**
-   **Pending状態では、テストMCCアカウント配下でしか動作しない**
-   本番のGoogle広告アカウントにアクセスするには**本番承認（Standard Access）が必要**
-   **承認には通常1〜3営業日かかる**

**承認待ちの時間が発生するため、早めに申請しておくことが重要です。**実装が終わってから申請すると、そこで足止めされます。

## Step 5：リフレッシュトークンの発行

### ① 認可コードの取得

次のURLをブラウザで開きます（`your-client-id` は取得した client\_id に置き換え）。

```
https://accounts.google.com/o/oauth2/auth?client_id=your-client-id.apps.googleusercontent.com&redirect_uri=http://localhost&scope=https://www.googleapis.com/auth/adwords&access_type=offline&response_type=code
```

ログインしてアクセスを許可すると `http://localhost` にリダイレクトされます。

ここで戸惑いやすい点があります。**localhostにサーバーが立っていないため、ブラウザには「サイトに到達できません」と表示されます。**しかし問題ありません。**アドレスバーのURLに含まれる `code=` の値が認可コードです。**

```
http://localhost/?code=4/0Axxxxxxxxxxxxxxxxxxxxxxxx&scope=...
```

### ② トークン交換

```
curl \
  --data "grant_type=authorization_code" \
  --data "client_id=your-client-id.apps.googleusercontent.com" \
  --data "client_secret=your-client-secret" \
  --data "redirect_uri=http://localhost" \
  --data "code=取得した認可コード" \
  https://www.googleapis.com/oauth2/v3/token
```

成功すると次のようなレスポンスが返ります。

```
{
  "access_token": "ya29.xxxxx...",
  "expires_in": 3599,
  "refresh_token": "1//0exxxxx...",
  "scope": "https://www.googleapis.com/auth/adwords",
  "token_type": "Bearer"
}
```

**`refresh_token` の値を必ず保存してください。**access\_tokenは1時間で期限切れになりますが、refresh\_tokenがあれば何度でも再発行できます。

## Step 6：curlで動作確認

アカウント一覧の取得で疎通を確認します。

```
curl -f --request GET \
  "https://googleads.googleapis.com/v19/customers:listAccessibleCustomers" \
  --header "Content-Type: application/json" \
  --header "developer-token: your-developer-token" \
  --header "Authorization: Bearer your-access-token"
```

さらにGAQL（Google Ads Query Language）でキャンペーン一覧も取得できます。

```
curl -i -X POST \
  "https://googleads.googleapis.com/v19/customers/your-customer-id/googleAds:searchStream" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-access-token" \
  -H "developer-token: your-developer-token" \
  -H "login-customer-id: your-mcc-id" \
  --data '{
    "query": "SELECT campaign.id, campaign.name FROM campaign ORDER BY campaign.id"
  }'
```

## ハマりポイント①：`login-customer-id` の罠

GAQLクエリを投げる際、ヘッダーに `login-customer-id` を指定します。MCC（マネージャーアカウント）配下のクライアントアカウントを操作する場合です。

ここで**クライアントアカウントのIDを指定すると `403 Forbidden` になります。**

| 指定箇所 | 入れるID |
| --- | --- |
| **`login-customer-id` ヘッダー** | **MCCのID** |
| URLパスの `customers/{customer-id}` | 操作対象のクライアントアカウントID |

**`login-customer-id` は「どのMCCとしてログインするか」を示すヘッダー**です。操作対象を指定するものではありません。

## ハマりポイント②：Pending Developer Tokenの壁

こちらのほうが厄介です。**APIは正常に通るのに、データが空で返ります。**

原因はDeveloper TokenのPending状態です。

-   Pending状態では**テストMCCアカウント配下でしか動作しない**
-   **テストMCCと本番MCCは完全に分離されている。**テストMCCに本番のクライアントアカウントを紐づけることはできない
-   **テストMCC自体にキャンペーン等のデータが存在しない**

つまり**「APIは通っているのにデータが返ってこない」状態は、何も間違っていません。**テストMCCにデータがないだけです。

ここで実装を疑い始めると、原因のない場所を延々と探すことになります。

### 本番承認後の切り替え

本番承認（Standard Access）が下りたら、以下を切り替えます。

-   `login-customer-id` → **本番MCCのID**
-   URLの `customers/{id}` → **本番クライアントアカウントのID**

## よくある質問

### MCPとは何ですか？

**AIと外部APIをつなぐオープン標準プロトコルです。**「AIアプリケーションのためのUSB-Cポート」と表現されます。どんな外部サービスでも同じプロトコルでAIに接続できます。

### Developer Tokenはどこで取得しますか？

**GCPではなく、Google広告の管理画面（ツールと設定 → APIセンター）です。**22文字の英数字が表示されます。

### APIは成功するのにデータが空です

**Developer TokenがPending状態の可能性が高いです。**Pending状態ではテストMCC配下でしか動作せず、テストMCCにはデータが存在しません。実装は正しい可能性があります。本番承認には1〜3営業日かかります。

### 403エラーが出ます

**`login-customer-id` にクライアントアカウントのIDを指定していないか確認してください。**ここにはMCCのIDを入れ、操作対象はURLパスの `customers/{id}` で指定します。

## まとめ

-   MCPサーバーは**コードを書くより認証を通すほうが大変**だった
-   必要な認証情報は**6種類**。取得場所がGCPとGoogle広告管理画面に分かれている
-   **Developer TokenはGoogle広告管理画面から取得**（22文字）。最初はPending状態
-   **Pending状態ではテストMCC配下のみ。データが空で返るのは正常**
-   **本番承認には1〜3営業日。**実装前に申請しておく
-   **`login-customer-id` にはMCCのIDを入れる。**クライアントIDを入れると403
-   認可コードは**リダイレクト先がエラー表示でもURLから取得できる**

外部APIとの連携では、認証の設計と承認フローが実装より重くなることがあります。承認待ちが発生する要素は、先に申請してから開発に入ると止まりません。

次回は、この認証情報を使って **Python + FastMCP でMCPサーバーを実装**します。

株式会社AI棒では、こうしたAI活用の検証を日々行い、企業の広告運用・マーケティング業務へのAI導入を支援しています。ご相談は[お問い合わせフォーム](/contact)から、継続的な伴走支援については[AI参謀](/ai-sanbo)をご覧ください。
