P-MAXの検索語句をPythonで取得する実装手順
P-MAX(パフォーマンスマックス)を回すと必ず突き当たるのが「検索語句が見えない」という壁だ。管理画面のインサイトはカテゴリ単位で丸められ、生の検索語句まで降りられない。Google広告APIを使えば語句レベルに近いデータを引ける。ただし通常の検索語句レポートとは取得口が違い、そこを知らないと空の結果を返し続けて時間を溶かす。実際に詰まった罠と、そのまま流用できる取得クエリを配置表つきでまとめた。
なぜP-MAXの検索語句は普通のレポートで取れないのか
検索広告なら search_term_view リソースに投げれば検索語句が返る。だがP-MAXにこのビューは効かない。campaign_idで絞っても該当行がゼロで返り、権限エラーも出ないため「データが無い」と誤読しやすい。実際、最初の実装ではsearch_term_viewに対してP-MAXのcampaign_idを渡し、30分ほど「配信はあるのに0件」の原因を追った。答えは単純で、P-MAX専用の campaign_search_term_insight という別リソースを使う必要がある。公式のフィールド定義(developers.google.com/google-ads/api/fields/v22/campaign_search_term_insight)にこの分離が明記されている。取得口を1つ間違えるだけで詰まる、典型的なAPIの落とし穴だ。
campaign_search_term_insight の構造を押さえる
このリソースは2階層で考えると理解が早い。上位が category_label(管理画面で見えるカテゴリ名)、その下に segments.search_term で実際の検索語句がぶら下がる。つまりGoogleは生の語句を「カテゴリ」で束ねて返す設計だ。指標は metrics.impressions・metrics.conversions・metrics.conversions_value が取れる。注意点は3つ。(1)campaign_search_term_insight.campaign_id での絞り込みが必須で、無指定だと全キャンペーンが混ざる。(2)語句単位のクリック数やコストは提供されず、取れるのはインパクション・CV・CV値まで。(3)データは一定のプライバシー閾値を超えた語句のみ表示され、少量配信の語句は出てこない。ここを期待値として持っておかないと「取得漏れ」と誤診する。
そのまま使えるGAQLクエリ
ブックマークして、自分のcampaign_idに書き換えて使ってほしい。GAQLは1行で書ける:SELECT campaign_search_term_insight.category_label, segments.search_term, metrics.impressions, metrics.conversions, metrics.conversions_value FROM campaign_search_term_insight WHERE campaign_search_term_insight.campaign_id = 123456789 AND segments.date DURING LAST_30_DAYS
実装手順は次の4ステップに落ちる。(1)google-ads の公式Pythonクライアントを google-ads.yaml の認証情報で初期化する。(2)GoogleAdsService の search_stream にcustomer_idと上記クエリを渡す。(3)返ってきた行を category_label ごとにまとめ、search_term を配下に格納する。(4)conversions で降順ソートし、CVの多い語句カテゴリから予算配分やアセット改善の判断材料にする。認証まわりの初回セットアップでつまずく場合は、Google広告APIをPythonで動かす手順と初回の壁に開発者トークンとOAuthの通し方をまとめてある。この取得手順の完全版はnoteの実践ガイドにまとめている。
取得後にやるべき運用アクション
語句が取れて終わりでは意味がない。CVが付いている語句カテゴリは、対応する検索テーマのアセット(見出し・説明文)を厚くする。逆にインプレッションだけ多くCVゼロが続くカテゴリは、アカウント単位の除外キーワードで削る判断に使う。除外の自動抽出ロジックは除外キーワード自動抽出をPythonで実装と組み合わせると、P-MAXの語句インサイトをそのまま除外候補リストに流し込める。週次でこのクエリを回し、前週比でCV語句カテゴリの増減を見るだけでも、ブラックボックスと言われるP-MAXの中身がかなり見えるようになる。
実装前の確認チェックリスト
- 使うリソースは search_term_view ではなく campaign_search_term_insight か
- WHERE句に campaign_search_term_insight.campaign_id を入れたか
- 取得指標をimpression・CV・CV値に限定しているか(クリック/コストは非提供)
- 0件時に「配信なし」と即断せず、プライバシー閾値と絞り込み条件を先に疑ったか
- API versionは v22 など有効なバージョンを指定しているか
抽出した語句カテゴリを提案資料やレポートに落とすなら、以下のツールが図解化を早めてくれる:
まとめ
P-MAXの検索語句は「取れない」のではなく「取得口が別」なだけだ。campaign_search_term_insight にcampaign_idで絞ったGAQLを投げれば、カテゴリと語句、CV指標まで降りられる。まず今週の配信キャンペーン1本で上のクエリを回し、CV語句カテゴリを3つ書き出すところから始めるとよい。
実務でそのまま使いたい人へ
本記事の手法の完全版(実際のコード・テンプレート・つまずき対処つき)は、運営者のnote(note.com/ryo_ai_hack)で公開している。実データに基づく実践ガイドをまとめて読める。

コメント
コメントを投稿