Google広告の品質スコアをPythonで一括監視する実装

Google広告の品質スコアは、クリック単価に直結する指標だ。だが管理画面で列を足して1件ずつ眺める運用は、キーワードが増えるほど回らなくなる。運用中のアカウントで試したところ、PythonとGoogle Ads APIを使えば、全キーワードの品質スコアを数秒で一括取得できた。この記事では、実際に使ったGAQLクエリと、スコアがnullで返るキーワードへの対処、週1で変化を検知する運用手順まで、そのまま真似できる形でまとめる。

なぜ品質スコアは手作業で追いきれないのか

品質スコアは推定CTR・広告の関連性・ランディングページの利便性の3要素から、1〜10で決まる(検索キャンペーンの品質スコアについて)。スコアが上がればクリック単価は下がる。逆に低いキーワードを放置すると、同じ順位でも余計な費用を払う。

問題は確認のコストだ。管理画面ではキーワードタブに列を追加すれば見えるが、キャンペーンをまたいだ横断比較や、先週との差分は取りにくい。運用しているアカウントではキーワードが約1,200件あり、目視の棚卸しに毎週30分近くかかっていた。ここを自動化する。

keyword_viewから3要素を一括取得するGAQL

品質スコアはキーワード単位の指標なので、GAQLではkeyword_viewから引く。総合スコアはad_group_criterion.quality_info.quality_score、内訳は同じquality_info配下のcreative_quality_score・post_click_quality_score・search_predicted_ctrに入っている(AdGroupCriterionリファレンス)。

ブックマークして、自分のアカウントに合わせて書き換えて使ってほしい。次の1行がそのまま動く土台になる。

SELECT campaign.name, ad_group.name, ad_group_criterion.keyword.text, ad_group_criterion.quality_info.quality_score, ad_group_criterion.quality_info.creative_quality_score, ad_group_criterion.quality_info.post_click_quality_score, ad_group_criterion.quality_info.search_predicted_ctr, metrics.cost_micros, metrics.conversions FROM keyword_view WHERE segments.date DURING LAST_30_DAYS

GAQLの書き方そのものに不安があるなら、GAQLの書き方を実際に使ってわかった5つのコツを先に読むと詰まりにくい。APIの初期設定でつまずくなら、Google広告APIをPythonで動かす手順と初回の壁も参考になる。この手順の完全版はnoteの実践ガイドにまとめている。

実測でつまずいた点:スコアがnullで返るキーワード

クエリを流して最初に戸惑ったのが、品質スコアが空で返る行だ。約1,200件のうち2割ほどで、quality_scoreが取得できなかった。原因は、直近のインプレッションが少なくGoogleがスコアを算出していないキーワードだった。

APIではこの値がnullになる、あるいはenumがUNSPECIFIED / UNKNOWNで返る。ここをそのまま集計に混ぜると、平均品質スコアが実態より低く出る。対策はシンプルで、Python側でquality_scoreがNoneの行を除外してから平均を取る。除外した件数は別途カウントし「スコア未算出◯件」と併記すると、判断を誤らない。

もう1点、creative_quality_scoreなどの内訳はBELOW_AVERAGE / AVERAGE / ABOVE_AVERAGEというenum文字列で返る。数値ではないので、改善対象を機械的に抜き出すならBELOW_AVERAGEだけをフィルタするとよい。

週1で品質スコアの変化を検知する運用

取得を自動化したら、次は「下がったキーワードだけ」を拾う運用にする。毎週同じクエリを実行し、前回のCSVと突き合わせて品質スコアが2以上下がったキーワードを抜き出すだけでよい。これで目視30分が3分になった。

運用に落とすときのチェック項目を、保存アセットとして置く。ブックマークして自分の環境に合わせて使ってほしい。(1)quality_scoreがNoneの行を除外してから平均を出す(2)BELOW_AVERAGEの内訳を持つキーワードを改善候補として抜き出す(3)前週比でスコアが2以上下落したものをアラート対象にする(4)cost_microsは100万で割って円換算してから費用と並べる(5)実行はインプレッションの多い平日午前に固定し、日次のブレを避ける。

抽出した品質スコアの低いキーワードを、改善提案としてクライアント向け資料に落とすなら、AIスライド作成ツールを使うと図解化が速い。

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

まとめ

品質スコアはkeyword_viewから3要素まとめて取得でき、あとはnull除外と前週比の差分検知を足すだけで運用に乗る。管理画面での目視を週1の自動抽出に置き換えれば、クリック単価の無駄を早く見つけられる。まずは今日、手元のアカウントで上のクエリを1回流すところから始めてほしい。

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

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

DMM 生成AI CAMP

コメント

このブログの人気の投稿

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

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

Yahoo広告APIをPythonで自動化して詰まった5つの罠