GAQLの書き方を実際に使ってわかった5つのコツ
Google広告APIを触り始めると、最初の壁が認証、次の壁がGAQL(Google Ads Query Language)の書き方だ。SQLに似ているのに微妙に違い、公式リファレンスは英語で量も多い。数千万円規模の広告をAPIで自動集計する中で、つまずいた点と、そのままコピペで動く形が見えてきた。この記事は、GAQLを「読める」から「自分で書ける」に変えるための実践ガイドだ。3要素、コピペ用クエリ5本、落とし穴3つ、日付指定までまとめる。認証段階でつまずくなら、先にGoogle広告APIをPythonで動かす手順と初回の壁を読むと早い。
GAQLはSQLに似た「3要素」でできている
GAQLはSQLに似ているが、GROUP BYもJOINも書かない。1つのresource(主リソース)を選び、そこにmetrics(数値指標)とsegments(分割軸)を足すだけの構造だ。公式ドキュメント(developers.google.com/google-ads/api/docs/query/structure)でも、この3要素の組み合わせがクエリの中心だと説明されている。
ざっくり役割はこうだ。(1)resource=何を主軸に見るか。campaign、ad_group、keyword_view、search_term_viewなど。(2)metrics=clicksやcost_micros、conversionsといった集計済みの数値。(3)segments=segments.dateやsegments.deviceなど、行を分割する軸。この3つをSELECTに並べ、FROMでresourceを1つ指定し、WHEREで絞り込む。基本形は「SELECT 項目 FROM リソース WHERE 条件」だけだ。
SQLとの一番の違いは、集計とグルーピングが暗黙で走る点だ。segmentsをSELECTに足すと、そのままGROUP BYを書いたように行が自動で分割される。この挙動を知らないと、後述する「行が勝手に増える」罠に必ずぶつかる。
そのままコピペで使えるGAQLクエリ5本
まずは動くものを手元に置くのが最短だ。以下の5本は、実運用でそのまま叩いている頻出クエリだ。ブックマークして、campaign.statusや日付範囲を自分の環境に書き換えて使ってほしい。すべてsearch_streamに渡せばそのまま結果が返る。
(1)キャンペーン別コスト・CV:SELECT campaign.name, metrics.cost_micros, metrics.conversions FROM campaign WHERE segments.date DURING LAST_30_DAYS ORDER BY metrics.cost_micros DESC
(2)キーワード別実績(配信中のみ):SELECT ad_group_criterion.keyword.text, metrics.clicks, metrics.cost_micros, metrics.conversions FROM keyword_view WHERE segments.date DURING LAST_30_DAYS AND campaign.status = 'ENABLED' ORDER BY metrics.cost_micros DESC LIMIT 500
(3)検索語句レポート:SELECT search_term_view.search_term, metrics.impressions, metrics.clicks, metrics.conversions FROM search_term_view WHERE segments.date DURING LAST_7_DAYS ORDER BY metrics.impressions DESC
(4)曜日別の消化:SELECT segments.day_of_week, metrics.cost_micros, metrics.conversions FROM campaign WHERE segments.date DURING LAST_30_DAYS
(5)デバイス別の実績:SELECT campaign.name, segments.device, metrics.cost_micros, metrics.conversions FROM campaign WHERE segments.date DURING LAST_30_DAYS
ポイントは、resourceごとに使えるmetricsとsegmentsが決まっていることだ。keyword_viewでしか取れない属性、search_term_viewでしか取れない属性がある。迷ったら公式のQuery Builderで候補を確認すると速い。曜日・時間帯の集計を深掘りしたい場合はGoogle広告の曜日・時間帯別CPAをPythonで集計にクエリと後処理の実例をまとめてある。
実運用でハマった落とし穴3つ
クエリが通っても、返ってきた値の扱いで事故る。実際にやらかした3つを共有する。
落とし穴1:cost_microsは円ではない。metrics.cost_microsは「100万分の1通貨単位(micros)」で返る。生値が「1500000000」だったとき、そのまま15億円と読むと桁を3つ間違える。正しくは1,500,000,000÷1,000,000=¥1,500だ。円に直すコツは単純で、cost_microsは必ず÷1,000,000(1e6)してから表示する。CPAを出すなら「cost_micros ÷ 1e6 ÷ conversions」だ。この換算を挟まずレポート化して、桁違いの数字をそのまま出しかけたことがある。
落とし穴2:segmentsを足すと行が増える。segments.deviceをSELECTに入れると、キャンペーン1件が「モバイル・PC・タブレット」の複数行に割れる。行数が2〜3倍になり、単純にcost_microsを合計すると当然正しい総額になるが、キャンペーン単位で見たいのに行が割れて混乱する。さらに注意すべきは、segments.conversion_actionを足したときだ。conversionsはCVアクション別に割れるが、clicksとimpressionsは各行に同値が繰り返される。行方向に安易にSUMすると多重計上される。segmentsは必要な分割軸だけを足すのが鉄則だ。
落とし穴3:大量行はページングかストリームで取る。行数が多いクエリを通常のsearchで叩くと、next_page_tokenで分割取得する必要がある。トークン処理を書き忘れて先頭ページしか取れていないのに「全件取った」と誤認しやすい。search_streamを使えばページング不要で全行がストリームで返るので、レポート用途ならこちらが安全だ。連続で叩きすぎるとRESOURCE_EXHAUSTED(レート上限)が返るので、リトライとスリープも入れておく。
日付範囲はDURINGとBETWEENを使い分ける
GAQLの日付指定は2通りある。公式のDate Rangesガイド(developers.google.com/google-ads/api/docs/query/date-ranges)に沿うと、定型の期間はDURING、任意の期間はBETWEENだ。
定型期間:WHERE segments.date DURING LAST_30_DAYS。ほかにLAST_7_DAYS、THIS_MONTH、LAST_MONTH、LAST_QUARTERなどが使える。日次バッチで「直近30日」を回すならこれが一番楽だ。
任意期間:WHERE segments.date BETWEEN '2026-08-01' AND '2026-08-31'。ここでハマりやすいのが、日付はシングルクォートで囲む必要がある点だ。クォートを外すとクエリが弾かれる。月次の締めや、特定キャンペーン期間だけを切り出すときはBETWEENを使う。
日付を1本のクエリで複数条件と組むときは、ANDでつなぐだけでいい。例:WHERE campaign.status = 'ENABLED' AND segments.date DURING LAST_7_DAYS。文字列(statusやdevice)はシングルクォート、数値(impressionsやcost_micros)はクォートなし、が基本ルールだ。
ここまでのクエリをつなげば、日次で「配信中キャンペーンのコストとCPA」を無人で吐き出せる。取得データを報告資料に落とす工程は、AIツールで一気に短くできる。
[PR] 取得したデータをそのまま報告資料・スライドに整えるなら、以下のAIツールが使える。AIスライド作成ツール「イルシル」を試してみる
まとめ
GAQLは「resource・metrics・segmentsの3要素」と割り切れば怖くない。まずはコピペ5本を動かし、cost_microsは÷1e6、segmentsは必要な軸だけ、日付はDURINGとBETWEENの使い分け、この3点を押さえれば実運用に耐える。次のアクションは、手元のアカウントIDでクエリ(1)を1本流してみることだ。値が返れば、あとは書き換えるだけで自分のレポートが作れる。
実務でそのまま使いたい人へ
本記事のクエリの完全版(Pythonからの実行コード・search_streamの雛形・レポート整形つき)は、運営者のnote(note.com/ryo_ai_hack)で公開している。実データに基づく広告API自動化の実践ガイドをまとめて読める。

コメント
コメントを投稿