Google広告APIをPythonで動かす手順と初回の壁

Meta広告のレポート自動化に続いて、Google広告もPythonでデータを引きたい運用者は多い。だが公式ドキュメントどおりにコードを書いても、最初のAPIコールでほぼ全員が同じ場所でつまずく。原因は認証コードでも書き方でもなく、発行されたばかりの開発者トークンの「アクセスレベル」にある。この記事では、Google広告APIをPythonで動かすまでの実装手順と、初回に必ず当たる壁の回避法を、そのまま試せる形でまとめる。

初回の壁はアクセスレベルにある

Google広告APIの利用登録を済ませると、開発者トークン(developer token)が発行される。これは22文字の英数字で、アプリをAPIサーバーに識別させる鍵だ。ここで見落としやすいのが、発行直後のトークンは「テストアカウントアクセス」という最も制限された段階から始まる点である。

この段階のトークンで本番の広告アカウントにクエリを投げると、認証は通るのにデータが返らず、次のエラーが出る。「The developer token is only approved for use with test accounts. To access non-test accounts, apply for Basic or Standard access.」つまり本番アカウントを触るには、API Centerから「Basicアクセス」を申請して承認を得る必要がある。Basicは本番・テスト両方に使え、1日15,000オペレーションまで実行できる。アクセスレベルの区分は公式のAccess Levelsに明記されている。

実運用で詰まったのはまさにここだった。ローカルで認証まで成功し、コードは正しいのにデータがゼロで返る。半日ほど認証周りを疑った末、原因がトークンのアクセスレベルだと判明した。申請フォームには利用目的の記述が必要で、承認までは数営業日かかる。先に申請を出しておくのが最短ルートだ。

認証に必要な4つの情報

Pythonクライアントライブラリは公式ページとPyPIで配布され、Python 3.8以上で動く。認証には、次の4つの情報を1つの設定ファイルにまとめる。

  • developer_token(22文字。ads.google.com/aw/apicenterで確認)
  • client_id と client_secret(Google Cloudで作るOAuthクライアント)
  • refresh_token(OAuth同意フローで一度だけ取得する更新トークン)
  • login_customer_id(MCC=上位の管理アカウントID。ハイフンなし)

これらをGitHubのサンプルにある google-ads.yaml にコピーし、自分の値で置き換える。login_customer_id の入れ忘れは、複数アカウントを管理している場合に権限エラーの元になりやすい。ここまで正しく埋まれば、client = GoogleAdsClient.load_from_storage("google-ads.yaml") の1行でクライアントが立ち上がる。

GAQLでレポートを取得する骨格

データ取得はGAQL(Google Ads Query Language)というSQLに似た言語で書く。SELECTで欲しい指標、FROMでリソース、WHEREで期間を指定する考え方だ。取得の仕組みはReporting概要にまとまっている。

ここで再利用できる最小の取得骨格を置いておく。ブックマークして、自分のアカウントIDと指標名に書き換えて使ってほしい。手順はこうだ。(1)service = client.get_service("GoogleAdsService") でサービスを取得する。(2)query = "SELECT campaign.name, metrics.cost_micros, metrics.conversions FROM campaign WHERE segments.date DURING LAST_7_DAYS" とクエリ文字列を組む。(3)response = service.search_stream(customer_id="1234567890", query=query) でストリーム取得する。(4)for batch in response: for row in batch.results: と二重ループで1行ずつ読む。

注意点が1つある。費用は cost_micros という単位で返り、実際の金額はこれを100万で割る。1,000,000なら1通貨単位だ。この変換を忘れると、レポート上の金額が実額の100万倍になる。日予算やpacingの計算に流す前に、必ず割り算を挟む。

3媒体横断への発展と運用の注意

Google広告のデータが取れるようになると、次に効いてくるのが媒体横断だ。取得フローの設計思想はMeta・Yahooとほぼ同じで、認証情報の管理とレスポンスの整形さえ揃えれば、3媒体を1つのレポートに統合できる。Metaの実装はMeta広告レポートをPythonで自動化する実装手順に、Yahooでつまずいた罠はYahoo広告APIをPythonで自動化して詰まった5つの罠にまとめた。3媒体で共通化する際は、各APIの単位差(Googleはmicros、媒体ごとに指標名が違う)を吸収する変換層を1枚かませるのが安全だ。

運用でもう1つ気をつけたいのが、1日15,000オペレーションの上限である。全キャンペーンを高頻度でポーリングすると、意外と早く枠を使い切る。取得は1日数回のバッチにまとめ、期間はDURINGで絞る。この統合レポートの完全版はnoteの実践ガイドにコード付きでまとめている。

ここで紹介した手順を土台に、資料化やクライアント共有まで一気に進めたいなら、AIツールを併用すると速い:

AIスライド作成ツール「イルシル」を試してみる

まとめ

Google広告APIをPythonで動かす最短ルートは、コードより先に開発者トークンのBasicアクセスを申請することだ。承認を待つ間に認証情報4点を揃え、GAQLの取得骨格を組んでおけば、承認後すぐに本番データが引ける。micros単位の変換とオペレーション上限だけ押さえれば、Meta・Yahooと並べて3媒体の統合レポートへ発展できる。まずはテストアカウントで骨格を通し、申請を出すところから始めたい。

実務でそのまま使いたい人へ

本記事の手法の完全版(実際のコード・テンプレート・つまずき対処つき)は、運営者のnote(note.com/ryo_ai_hack)で公開している。実データに基づく実践ガイドをまとめて読める。

DMM 生成AI CAMP

コメント

このブログの人気の投稿

Claude Skills販売で月5万稼ぐ3ステップ実践

Difyの使い方|初心者でも10分で作れるAIアプリ入門

Claude CodeでExcel自動化副業を月5万にする手順