新しいLPを作ったら広告を出す。キャンペーン作成、キーワード設定、広告文入稿、除外設定。管理画面で毎回手間がかかっていた作業が、ターミナルで5行打つだけで2分で終わる。
これを、エンジニアなしで作りました。
株式会社プロリクの橋崎です。弊社は弊社はAHR(AI and Human Resources)という考え方のもと、生成AI導入支援や、独自の生成AIを用いた採用代行を提供しており、複数のLPにGoogle広告を出稿しています。以前の記事「Claude Codeで喋る端末を作ってみた」に続く、Claude Codeの実践記録です。
先日、Claude Codeを使って、Google Ads APIに繋ぎこみLPに適した広告作成を自動化する仕組みを構築しました。この記事では、なぜそれをやろうと思ったのか、どう作ったのか、そして構築過程で踏んだ落とし穴を全て共有させていただきます。
AHRとは?
AHR(AI and Human Resources)とは、企業の経営課題に向き合う組織能力を充足させるため、AI資源と人的資源を経営資源として設計・運用・再配分する、株式会社プロリクが2025年6月に提唱した実践フレームです。従来のHRが人的資源のみを扱ったのに対し、AHRはAIを人と並ぶ「経営のコア資源」と捉え、組織能力獲得を目指す考え方です。
📄 詳細記事: 【決定版】AHRとは?-人とAIの働き方をリデザインする
この記事の要点(TL;DR)
- Google広告のキャンペーン作成・キーワード設定・広告文入稿・予算変更を、Claude CodeからPythonスクリプトで自動化した
- 管理画面で数十分かかっていた一連のGoogle広告作成作業が、数分で完了するように
- 既存のMCPサーバーは全て「読み取り専用」。広告の「書き込み」操作は自前で構築する必要があった
- OAuth認証、テストアカウントの仕様、API v23の変更など6つの落とし穴を共有
- 非エンジニアがClaude Codeと半日で構築
「読み取り」の自動化と「書き込み」の自動化は別物
「AIでマーケティングを自動化した」という話は最近よく目にします。
「Claude Codeでレポートを自動生成しました」——この手の記事は色々ありますが、内容を見ると全て「読んで整理する」側の自動化です。
整理された結果を見て、人間が管理画面を開いて手で入力する部分は残ったまま。
今回やったのは「書き込み」の自動化です。Google Ads APIに対して、実際にキャンペーンを作り、キーワードを設定し、広告文を入稿し、予算を変更する。売上に直結する広告操作そのものをClaude Codeで開発をしました。
なぜ「書き込み」の自動化が必要だったのか
広告運用で最も時間がかかるのは、分析だけではありません。分析は「次に何をすべきか」を教えてくれますが、実際にそれを実行する作業が残ります。
キャンペーンの新規作成、広告グループの設計、キーワードの追加と除外。見出し15個、説明文4個の広告文の入稿。予算の調整。これらを管理画面で1つずつ手作業で行う。
新しいLPを立ち上げるたびに、同じことを繰り返しています。分析したら改善業務でも同じようなことが必要です。
小さい会社で、外部マーケターに依頼するほどでもない業務量。かといって自分で回すにはそれなりに工数がかかってくる。これらの業務はある種「苦痛」でした。
Claude Codeで自社のプロセスの自動化に挑戦をしており、マーケティング業務プロセスではこれまでLPのA/B作成やテスト自動化、SEO戦略の立案自動化(検索ボリューム×競合状況→ホワイトスペース探し)といった自動化を進めてきました。そんな中で、この「苦痛」を解消できるのではと思い、Claude CodeによるGoogle広告操作の自動化を思い立ったわけです。
どのような構成で作ったのか?
この仕組みがどういったもので構成されているのかを整理します。
登場するのは3つの要素です。① Claude Code(作業環境)、② Google Cloud Console(認証基盤。Google広告の操作を外部から許可するための設定場所)、③ Google Ads / Google Ads API(操作対象。開発者トークンもここで発行)。
構築の流れとしては、Google Cloud ConsoleでGoogle Ads APIを有効化し、OAuthクライアントIDを作成、Google Adsで開発者トークンを取得、認証スクリプトでリフレッシュトークンを取得、そして各操作スクリプトをClaude Codeで作成・実行——という5ステップです。
実際にはステップ1〜4の「認証を通す」部分に全体の6割以上の時間がかかりました。コードを書く部分は、Claude Codeがほぼ自動で処理してくれます。
[あなた] → [Claude Code] → [Pythonスクリプト] → [Google Ads API] → [Google広告アカウント]
↑
OAuth認証(Google Cloud Console経由)実際に作ったもの
まずMCPを試した
Claude Codeには「MCP(Model Context Protocol)」という仕組みがあります。AIが外部サービスのAPIに接続するための標準規格です。
Google Ads向けのMCPサーバーがいくつかGitHubで公開されており、まずはこれを試しました。
結果としては、いずれも読み取り専用でした。
Google公式版(googleads/google-ads-mcp)もコミュニティ版(cohnen/mcp-google-ads)も、キャンペーン情報の取得やパフォーマンス分析はできますが、キャンペーンの作成や入札変更はできません。書き込み操作に一部対応したMCPサーバー(bjorndavidhansen版)も見つけましたが、キャンペーン作成とRSA作成には未対応でした。
既存のツールでは「書き込み」ができない。Claude Codeの提案で、Google Ads APIのPythonクライアントを直接使う方針に切り替えました。
完成した4つのスクリプト
スクリプト | できること |
campaign.py | キャンペーンの一覧 / 作成 / 有効化・停止 / 予算変更 |
ad_group.py | 広告グループの一覧 / 作成 / 有効化・停止 |
keywords.py | キーワードの一覧 / 追加(完全一致・フレーズ一致・部分一致)/ 除外キーワード追加 / 削除 / 検索語句レポート |
ads.py | RSAの一覧 / 作成(見出し最大15個・説明文最大4個) |
これらのPythonコードの中で、全部で16の操作を関数化しました。
使い方はシンプルです。
これらによって、「キャンペーン作成 → 広告グループ作成 → キーワード設定 → 除外キーワード設定 → 広告文入稿」が完了します。管理画面で数十分かかっていた作業が約2分になりました。
なお、全ての作成操作はデフォルトでPAUSED(停止状態)で作成されるようになっています。意図的に --status ENABLED を指定しない限り、広告は配信されず課金も発生しません。まずは停止状態でAIに作ってもらい、人間が最終確認してGOサインを出すような運用です。
構築過程で踏んだ6つの落とし穴
実際に自動化しようと思い立って、作りきるまでその日中に終わりましたが、正直に書くと予想よりまあまあ工数がかかりました。Claude Codeでコードを書く時間よりも、前述の認証フロー(ステップ1〜4)の試行錯誤に費やした時間の方がはるかに長かったです。
本職マーケターではない私がAIに聞きながら進めた記録なので、技術的に不正確な部分もあるかもしれませんが、同じことをやろうとする方がこのリストをClaude Codeに渡していただければ、同じ誤案内は避けられるのではないかと思いますので共有させていただきます。
落とし穴1:テストアカウントの定義を誤解する
発生箇所:③ Google Ads(開発者トークン)
Google Ads APIの開発者トークンは、取得直後は「テストアカウント専用」です。本番アカウントを操作するには「Basic Access」の申請(通常3営業日)が必要です。
ここで重要なのは、「テストアカウント」の定義です。通常のMCC(マネージャーアカウント)配下に「テスト用」としてアカウントを作っても、APIからはテストアカウントとして認識されません。
テストアカウントとは、テスト専用のMCCを別途作成し、その配下に作ったアカウントのみを指します。テスト専用MCCは https://ads.google.com/nav/selectaccount?sf=mt から作成できます。
この仕様はドキュメントを読んでもすぐには分かりませんでした。これを知らずに本番MCCの配下で検証しようとすると、権限エラーで一切先に進めなくなります。
落とし穴2:OOBフローは廃止済み
発生箇所:② Google Cloud Console(OAuth認証)
Googleの「Out-of-Band」認証フローは2025年に廃止されています。ネット上の多くの記事やStack Overflowの回答がこの方式を案内していますが、今は使えません。ローカルにHTTPサーバーを立ててコールバックを受ける方式が必要です。
落とし穴3:OAuthクライアントは「ウェブアプリケーション」型で作る
発生箇所:② Google Cloud Console(OAuthクライアント作成)
Google Cloud ConsoleでOAuthクライアントIDを作成する際、「デスクトップ アプリ」を選びたくなりますが、これだとリダイレクトURIが登録できませんでした。一度つくってうまく進まず、またクライアントを作り直すのもやや手間がかかるものでした。結局「ウェブ アプリケーション」型で作成し、承認済みのリダイレクト URIを追加する必要があります。
落とし穴4:日本で日本語広告を出すのにEU政治広告フラグが必要
発生箇所:③ Google Ads API(キャンペーン作成時)
日本語の広告を日本で出すだけであっても、キャンペーン作成時に contains_eu_political_advertising フィールドの設定が必須です。値は 3(DOES_NOT_CONTAIN)を指定します。このフィールドを省略すると「必須フィールドがありません」というエラーで弾かれます。
日本のマーケターがこのエラーに遭遇したとき、まさかEUの政治広告フラグが原因だとは思わないのではないでしょうか。
落とし穴5:API v23のFieldMask
発生箇所:③ Google Ads API(更新操作時)
Google Ads APIのv23では、client.get_type("FieldMask") が動作しません。google.protobuf.field_mask_pb2.FieldMask を直接インポートして使う必要があります。v22以前の記事のコードをそのまま使うとエラーになります。
落とし穴6:WSL環境でのブラウザ問題
発生箇所:① Claude Code(OAuth認証実行時)
WSL(Windows Subsystem for Linux)でClaude Codeを使っている場合、OAuth認証時にブラウザが自動で開きません。認証スクリプトで open_browser=False を設定し、表示されたURLを手動でWindowsブラウザにコピーする設計にする必要があります。
なお、落とし穴ではありませんが、もしGitHubにアップするのであれば、認証情報(リフレッシュトークン等)のような重要な情報は、GitHubに公開しないよう注意してください。
工数の変化
作業 | Before | After |
キャンペーン新規作成(一連の設定込み) | 数十分 | 約2分 |
キーワード追加 | 数十分 | 数秒 |
除外キーワード設定 | 約10分 | 数秒 |
広告作成(見出し15個+説明文4個) | 数十分 | 数秒 |
個別の工数削減も大きいですが、最も変わったのは新しいLPに広告を出す際の立ち上げ速度です。キャンペーン設計→キーワード設定→広告文入稿→除外キーワード設定が一連のコマンドで完了するため、「今日Claude Codeで作ったLPに、今日最適化された広告をすぐに出す」ことが現実的になりました。
思い立ったらClaude Codeに相談が近道
Claude Codeとのやり取りは、具体的にはこんな流れでした。
「Google Ads APIのPythonクライアントを使って、キャンペーンを作成するスクリプトを書いて。認証はOAuth2で、作成時のステータスはPAUSEDにして」
コードが出力される。実行する。エラーが出る。「このエラーが出た。修正して」と伝える。修正される。実行する。
この繰り返しです。ある意味工夫はありません。一番長くかかったのは認証周り(落とし穴1〜3)でした。コーディングではありません。Claude Codeに頼りつつ、なんとか16の操作が全て動くツールができました。
思い立ったらまずClaude Code、AIに聞きつつ、少し自分でも調べながら実現できそうなら軽いものを作ってみる。大丈夫そうならちゃんと作る。そんなフットワークの軽さが重要になってきているという改めての実感があります。
興味のある方は、まずClaude Codeに「Google Ads APIで広告を自動作成したいんだけど、どう進めたらいい?」と相談するところから始めてみてください。本記事の落とし穴リストも一緒に渡していただければ、かなりスムーズに進むのではないかと思います。
弊社お問い合わせ窓口
著者について
橋崎 良哉(株式会社プロリク )
Webサイト制作事業にて在学中に起業。家業に入り、鉄鋼加工会社で取締役として業績回復を牽引。その後グローバルに特化したデジタルマーケティング支援会社にてマーケター、データ解析などを担当した後、AIスタートアップであるエッジテクノロジー株式会社の取締役COOとして、機械学習実装支援や、機械学習を用いた営業自動化SaaSを立ち上げ、6年で0から社員70名程度までグロースさせる。2020年2月株式会社プロリクを設立。