Blog ブログ

FIVE

Google広告スクリプトを使って自動レポートを作成

2023.06.16



最終更新日:2024年10月7日
Google広告スクリプトを使って自動レポートを作成

Google広告の運用で日々の分析をする際には、


・簡単な確認であれば広告管理画面を見る。
・より詳細に見る際はExcelでCSVデータを出力した後レポート化して確認する


等が基本だと思います。

弊社は設立1年目という所もあり、今までは全てマンパワーで賄っていたのですが、「自動化」に動いていかないと分析・改善に辿りつく前にレポーティング作業で力尽きる事も発生するようになってしまいました。(ありがたい悲鳴ではありますが)

有料のBIツールや、Googleデータポータルの活用もしてきたいとは考えているところですが、費用面や初期の設定部分を考えたときにまずは「Google広告スクリプト」を利用してデータ集計と管理を自動化する事にしました。

 

Google広告の自動出力に必要な物

・Google広告アカウント
・スプレッドシート

以上です!

 

Google広告管理画面上の操作

Google広告の管理画面上で、「ツールと設定」から「一括操作」のスクリプトをクリックし、スクリプト画面に移動します。

 

作成済のスクリプトが一覧表示される画面になるので、「+」ボタンから新規スクリプトをクリックし、スクリプトの作成画面に移動します。

 

 

その後は実際にスクリプトのコードを設定する画面になるので、出力したい情報をコードに記載し、実行・保存します。
※コードの詳細は後述します。

 

設定したスクリプトのコードに基づいて、下記のような形でスプレッドシート上にCSVデータが出力されるようになります。

スクリプトコードの詳細

では、どのようにスクリプトのコードを作成すればいいか?について、サンプルのスクリプトコードを説明していきながら作成します。
私はエンジニアではない為、細かいコードの部分は理解していないまま使ってる部分もありますが、ほぼ問題なく実行できています。

レポート内容

出力期間:2023年1月1日-2023年12月1日
行部分:月単位・デバイス単位・キャンペーン名
列部分:表示回数・クリック数・クリック率・消化金額・クリック単価・コンバージョン数・コンバージョン単価・コンバージョン率・すべてのコンバージョン・平均インプレッションシェア・コンバージョン値

サンプルコード

function main() {
  const ID1 = '●●●●●●●●●●●●●●●';
  const SHEET_NAME1 = '●●●●';
  const sheet1 = SpreadsheetApp.openById(ID1).getSheetByName(SHEET_NAME1);
  const query1 = "SELECT segments.month, segments.device, campaign.name, metrics.impressions, metrics.clicks, metrics.ctr, metrics.cost_micros, metrics.average_cpc, metrics.conversions, metrics.conversions_from_interactions_rate, metrics.cost_per_conversion, metrics.all_conversions, metrics.search_impression_share, metrics.conversions_value " +
  "FROM campaign WHERE segments.month BETWEEN '2023-01-01' AND '2023-12-01' ORDER BY segments.month";
  var report = AdsApp.report(query1);
  report.exportToSheet(sheet1) 
}

サンプルコードの詳細

function main() {

スクリプトに命令を出す何か。とりあえず頭に必要なので絶対に入れます。

 const ID1 = '●●●●●●●●●●●●●●●';

スプレッドシートのIDを入力する箇所になります。
const ID1 = '●●●●●●●●●●●●●●●';  の意味は、「ID1」が以降で使われるときは●●●の部分を引用してもらう。といったイメージになります。 予めの定義づけ。
※注意点
スプレッドシートのIDは赤塗してる部分になります。
スプレッドシート全体のURLをコピペしたり間違えやすいので注意してください。

const SHEET_NAME1 = '●●●●';   
const sheet1 = SpreadsheetApp.openById(ID1).getSheetByName(SHEET_NAME1);

const SHEET_NAME1 = '●●●●'; にスプレッドシート内の実際にデータを出力するタブ名を入力します。
名前自体は自由なので、自分がいつも使うCSV名やタブ名でご利用ください。
その下のコードは、前述した「ID1」と同様に定義づけのコードとなるので、特に編集する点はありません。

const query1 = "SELECT 
segments.month, segments.device, campaign.name, 
metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions, metrics.all_conversions, metrics.conversions_value " 
+   "FROM campaign WHERE segments.month BETWEEN '2023-01-01' AND '2023-12-01' ORDER BY segments.month";

ここがデータの出力項目を決める箇所になります※重要
const query1 = "SELECT 移行の部分から実際に出力項目を設定していきます。

segments

行の部分の値設定。日付・キャンペーン・デバイス等、出力したい定義内容を入力していきます。
作成するにあたって、一番悩んだのが、同時に選択できないsegmentsが結構な量あるところでした。
基本的にはGoogle広告の管理画面レポートと出力できる内容・同時に出力できない内容は同じですが、スクリプト上だと若干違う点もあります。
例①:年齢と性別は同時に出せない。
例②:P-maxキャンペーンを含む場合、キャンペーン単位までのsegmentsにしないとP-maxのデータは出力されない(P-maxには広告グループの概念がないので)   等

segments例:日付

segments.month:月単位のディメンション。
segments.date:日単位
segments.hour:時間単位 
等はレポーティングする上で頻出するものだと思います。

segments例:ユーザー属性

segments.device:デバイス単位のディメンション。
age_range_view.resource_name:年齢単位
gender_view.resource_name:性別単位
等は頻出だと思いますが、resource_nameは出力のされ方がそのまま●●歳や、男性/女性 のような形では出力されない為、CSV出力後に変換が必要になります。また、ユーザー属性部分のセグメントに関しては同時出力不可な物が多数あります。※理由は後述

metrics

出力する数字指標(列部分)を設定してきます。
metrics.impressions:表示回数
metrics.clicks:クリック数
metrics.cost_micros:利用金額
metrics.conversions:コンバージョン数
metrics.conversions_value:コンバージョン値
metrics.all_conversions:すべてのコンバージョン数

基本的にはそのまま出力された数字を利用できるのですが、利用金額だけ出力後変換が必要になります。

仮に利用金額が177792円と60019円だった場合にmetrics.cos_microsで出力すると、

177792574963
60019993159

上記のような莫大な金額に見える数値が出力されます。
私のやった限りだと、予めこの数値を日本円(正しい数値?)に変換するコードをスクリプトに記載するのは難しかった為、10の6乗で割る事で正しい数値を出すフローをとっています。

177792574963/10^6=177792.575
60019993159/10^6=60019.99316

上記の形で実際の金額と一致する数値が出すことができます。

+   "FROM campaign WHERE segments.month BETWEEN '2023-01-01' AND '2023-12-01' ORDER BY segments.month";

次は出力する大枠単位と出力する期間を指定していく箇所になります。

FROM
FROM campaign: 短い場所ですが、ここを間違えると大体エラーになってしまう為、注意してください。
今回のサンプルレポートだと、キャンペーンを軸において計測する為 FROM campaign
これが広告グループならFROM ad_group
性別単位を計測する時はFROM gender_view
等の変更が必要となります。前述した同時に出せないsegmentsがあると言ったのは大体この部分が原因になっています。

WHERE
segments.month BETWEEN '2023-01-01' AND '2023-12-01' ORDER BY segments.month";
見た目的にわかりやすいですが、1/1-12/1までの期間のデータを出力するというコードになっています。
最初がsegments.month になっているのは今回の出力が月単位だからです。
これを日単位で出す場合は、segments.dateに変更してからでないとエラーになってしまうのでご注意ください。

WHERE期間指定詳細

YESTERDAY:昨日
THIS_MONTH:今月(当日を含む
LAST_MONTH:先月
LAST_30_DAYS:過去30日  

あたりは頻出だと思います。また、これらを使う場合は、
sgments.month DURING LAST_MONTH
のような記載になるので、 BetweenとDURINGは可変で使うことになります。

  var report = AdsApp.report(query1);
  report.exportToSheet(sheet1) 
}

最後ですが、この部分は query1(数値や行などの出力定義)を
sheet1に出力する。みたいなコードなので、特に編集する箇所はありません。最後の閉じカッコも必須なので特に考えず、これで終了です。

Google広告スクリプトを使ってみて

実際にスプレッドシートへの出力をするにあたって、正しく数字が出力されているかどうかの確認や、データの成型等で約1か月は今まで手動でレポーティング作業をするよりも時間がかかってしまったものの、現在は手動でやるよりも明らかに工数は削減する事ができました。

一番苦戦したのは、指標の定義や行部分の名称や条件を調べる事で、現状Google公式のリファレンスから検索して当てはめていくしかなく、英語が苦手な私はかなり時間を要してしまいました。

GoogleAdsAPIのリファレンス

自分のコードの整合性・単語について予め大枠を確認する時は、
ChatGPTに自分の書いたコードや単語を送って返信をしてもらってから実行するフローを取っていました。
正しい情報が出てくる確率はそこまで高くありませんが、考え方の候補出しとして使う分は使い勝手が良かったです。

スクリプトに関する指標については、一覧で日本語で確認できるよう後日載せたいと思います!

 

この記事を書いた人

Five Blog編集部
Five Blog編集部
新宿でWeb広告全般の運用代行をしているFiveの編集部です!
実際の広告運用で得た知見を基に、Google広告やInstagram広告といった各媒体の最新情報やプロの運用担当が書いたノウハウを発信します。