Google広告スクリプトを使って、デイリーレポート作成を自動化する方法
業務効率化公開日:2024年9月2日 更新日:2024年9月3日
私が以前働いていたGMO NIKKOではレポート基盤が用意されており、毎朝出勤後に広告の運用レポートを確認すると、自動的に昨日のデータが反映されたものを見ることができました。
しかし多くの広告代理店はこのようなレポート基盤はなく、有料のレポートツールを利用するか、毎日csvでレポート結果をダウンロードして貼り付ける等の作業をしているのではないでしょうか。
今回は業務効率化のために、Google広告が用意しているスクリプト機能を使って、自動的に毎朝スプレッドシートにレポートが反映される仕組みの作り方を紹介します。
この記事では、以下2つのコードを紹介します。
- 日別 × キャンペーン別のレポート
- 日別 × キャンペーン別 × コンバージョンアクション別のレポート
Yahoo広告スクリプトを使って、毎日のレポート作業を自動化!
これまでデジマナビでは、Google広告スクリプトを使ったレポートの自動化、そしてMicrosoft広告スクリプトを使っ...
目次
レポート自動化の手順
まずはじめに、今回のレポート自動化のざっくりとした手順を紹介します。
- Google広告スクリプトを作成する
- Google広告スクリプトの定期実行設定をする
- 反映されたデータを元にレポートの型を作成する
まずはじめに、Google広告スクリプトを作成していきます。
この記事では「プログラミングは分からない」という方でも使えるように、必要箇所を入力すれば動くコードを紹介するのでご安心ください。
次に、Google広告上で定期実行するための設定をおこないます。
最後に、反映されたスプレッドシートのデータを元に、レポートを作成していきます。
レポート作成は、スプレッドシートの関数の知識が必要です。
Google広告スクリプトとは?
Google広告スクリプトとは、Google広告のUI上で設定できる自動化ツールの一つです。
JavaScriptベースのプログラムを利用して、広告アカウント内の様々なデータを取得・操作することができます。
今回紹介するデイリーレポートの出力以外にも、例えば特定の条件にマッチする検索語句を、キーワードとして追加したりすることができます。
またGoogle広告スクリプトではスケジュール機能が備わっているため、作成したスクリプトを毎日同じ時間に定期実行することができます。
手順2における定期実行は、このスケジュール機能を用いておこないます。
Google広告スクリプトでできること・できないこと
先述の通り、Google広告スクリプトでは広告アカウント内の様々なデータを取得したり操作することができます。
具体的には今回のようなレポートの出力、広告の停止・開始、予算の調整、キーワードの追加など、人の手を使って作業する殆どのことができると考えてもらって問題ありません。
一方でできないこととしては、クリエイティブの自動生成や外部データベースとの複雑な連携など、Google広告内で完結できないことなどが挙げられます。
またオフラインコンバージョンのインポートや、広告カスタマイザーの自動反映などは、このGoogle広告スクリプトを使わずにアップロードという機能で定期実行することができるため、これまで10年ほどGoogle広告を運用してきた私でも、Google広告スクリプトの用途は「レポート」「追加・除外」「予算の調整」くらいしかないかなと思います。
Google広告スクリプトの作成手順
管理画面上からGoogle広告スクリプトにアクセス
次にGoogle広告スクリプトの作成手順です。
まず、Google広告にアクセスし、「ツール」→「一括操作」→「スクリプト」と進んでいきます。
すると以下の画像のようなページに進むみます。
「+」マークを押して、新規スクリプトを作成します。
こちらがスクリプトの作成画面です。
スクリプト名は自由な名前をつけてもらって構いません。この部分はプログラムの実行に影響を及ぼしません。
また「スクリプトで変更できるようにするには、そのスクリプトを承認しておく必要があります。」という注意書きがでてくるので、「承認」ボタンを押します。
承認ボタンを押すと、以下のようなウィンドウが表示されるので、アカウントを指定します。
そして「Allow」を選択しましょう。
これで、Google広告スクリプトがアカウントに対して操作することができるようになりました。
出力するスプレッドシートを用意する
次に、Google広告スクリプトの出力先であるスプレッドシートを用意します。
このシートはなんでもOKですが、先ほど出力を許可したアカウントでの編集権限が必要です。
スプレッドシートを用意したら、そのURLに注目します。
このアンダーラインを引いた「XXXXXXXXXXX…」部分の文字列をコピーしておきます。
こちらはスプレッドシートのIDになります。
また、出力するためのシートも追加しておきましょう。
そのシート名(デフォルトだと「シート1」「シート2」など)も、コピーしておきます。
これでスプレッドシートの準備は完了です。
サンプルコードを貼付け、必要箇所を修正する
次に以下のサンプルコードを貼付けます。
function main(){
const spreadsheet = SpreadsheetApp.openById('*********************');
const sheet = spreadsheet.getSheetByName('*******');
sheet.clear();
const startDate = '20240701'
var dt = new Date();
var y = dt.getFullYear();
var m = ("00" + (dt.getMonth()+1)).slice(-2);
var d = ("00" + (dt.getDate())).slice(-2);
var endDate = y + m + d;
const report = AdsApp.report(
'SELECT segments.date, campaign.name, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions ' +
'FROM campaign ' +
'WHERE metrics.impressions > 0' +
' AND segments.date >= ' + startDate +
' AND segments.date <= ' + endDate);
report.exportToSheet(sheet);
// 価格を調整
const range = sheet.getDataRange();
const values = range.getValues();
for (let i = 1; i < values.length; i++) {
values[i][4] = values[i][4] / 1000000;
}
range.setValues(values);
}
このコードをスクリプトの画面に貼り付けたら、次の2箇所だけコードを変更します。
まず2行目の部分は、先ほど用意したスプレッドシートのIDを代入します。
const spreadsheet = SpreadsheetApp.openById('ABCDEFGabcdefg*****');
そして3行目には、同じく先ほど用意したスプレッドシートのシート名を代入します。
const sheet = spreadsheet.getSheetByName('シート1');
注意点としては、いずれも''で囲うようにしてください。
こちらのコードでは、2024年7月1日以降から今日までの実績を全部取得するようになっています。
もし開始日を変更したい場合は、以下のコード部分をyyyymmddの形で変更してください。
const startDate = '20240701'
サンプルコードの解説
ここからはカスタマイズに興味がある方向けの内容になっています。
このスクリプトでは、GAQL(旧:AWQL)というクエリを使ってレポートデータを取得しています。
具体的には以下の部分でGAQLのクエリの指定をおこなっています。
const report = AdsApp.report(
'SELECT segments.date, campaign.name, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions ' +
'FROM campaign ' +
'WHERE metrics.impressions > 0' +
' AND segments.date >= ' + startDate +
' AND segments.date <= ' + endDate);
report.exportToSheet(sheet);
SQLが分かる人はどんなことをしているかは想像できると思います。
「もしSQLの仕組みが分からない」という方はぜひデジマナビの「ウェブサイトの基礎知識」コースを受講してみてください。
GAQLで利用できる指標はこちらのヘルプページで確認いただけます。
ここのコードでセグメント、指標など自由に指定することができます。
後述するコンバージョンアクション別のレポートも、ここの部分を修正します。
またGoogleのコストの指標は様々な通貨を扱っているが故に、管理画面上で見える数値×1000000されています。
そのため以下のコードで、÷1000000をしてあげます。
// 価格を調整
const range = sheet.getDataRange();
const values = range.getValues();
for (let i = 1; i < values.length; i++) {
values[i][4] = values[i][4] / 1000000;
}
range.setValues(values);
このコードを追加しておくことで、スプレッドシート側でわざわざ÷1000000をする必要がなくなります。
定期実行の設定方法
Google広告管理画面上で設定する
作成したスクリプトを試しに実行してみて、問題がなければ定期実行の設定をおこないます。
同じくスクリプトの作成画面から、頻度の「ー」の部分にカーソルを合わせます。
すると鉛筆マークがでてくるので、そちらをクリックします。
頻度は以下の5項目から選択することができます。
- 1回
- 1時間ごと
- 毎日
- 週別
- 月別
今回は毎日実行したいので、「毎日」を選択し、実行時間を深夜帯にします。
例えば2:00~3:00に設定すると、この1時間の期間のどこかで実行がされます。
これで、毎日自動的に実行されるようになりました。
スプレッドシートでの自動更新方法
最後に定期的に取得したデータをレポートに反映させます。
SUMIFS関数を使うことで、自動的に日付データを元に結果が反映されるようにします。
具体的には以下のような式にすると良いと思います。
この式の場合、出力先のシート名がGoogleで、B7セルに日付のデータがあり、シート名「Google」のC列が表示回数のデータを取得します。
また式の最初にIF文で、B7が昨日以前の場合にのみSUMIFSが動くようになっています。
キャンペーン別で出したい等の希望があれば、このSUMIFSに条件を加える等してみてください。
コンバージョンアクション別のレポート
コンバージョンアクション用シートの作成
複数のコンバージョン地点を設定しており、コンバージョン別のデータが見たいということもよくあると思います。
実際に管理画面上からコンバージョンアクション別のデータを落としたことがある方は分かると思いますが、コンバージョンアクション別のデータは、表示回数やクリック数、費用などと一緒に出力ができません。
そのため、コンバージョンアクション用のシートを新たに作成する必要があります。
コンバージョンアクション別のコードを追記する
コンバージョンアクション用のシート名をコピーしたら、以下のコードを付け加えます。
const sheetConversion = spreadsheet.getSheetByName('コンバージョンアクション用のシート名');
sheetConversion.clear();
同じく、以下のコードも付け加えます。
// ConversionReport
const reportConversion = AdsApp.report(
'SELECT segments.date, campaign.name, segments.conversion_action_name, metrics.conversions ' +
'FROM campaign ' +
'WHERE metrics.conversions > 0 ' +
' AND segments.date >= ' + startDate +
' AND segments.date <= ' + endDate );
reportConversion.exportToSheet(sheetConversion);
これで、作成したコンバージョンアクション用のシートにデータが出力されるはずです。
追加するコードの順序等あるので、以下の完全なコードを参考にしてみてください。
function main(){
const spreadsheet = SpreadsheetApp.openById('シートIDをいれる');
const sheet = spreadsheet.getSheetByName('シート名をいれる');
const sheetConversion = spreadsheet.getSheetByName('アクション用のシート名をいれる');
sheet.clear();
sheetConversion.clear();
const startDate = '20240701'
var dt = new Date();
var y = dt.getFullYear();
var m = ("00" + (dt.getMonth()+1)).slice(-2);
var d = ("00" + (dt.getDate())).slice(-2);
var endDate = y + m + d;
const report = AdsApp.report(
'SELECT segments.date, campaign.name, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions ' +
'FROM campaign ' +
'WHERE metrics.impressions > 0' +
' AND segments.date >= ' + startDate +
' AND segments.date <= ' + endDate);
report.exportToSheet(sheet);
// correct the cost values from micros to normal currency
const range = sheet.getDataRange();
const values = range.getValues();
for (let i = 1; i < values.length; i++) {
values[i][4] = values[i][4] / 1000000; // assumes the cost is in the 5th column
}
range.setValues(values);
// ConversionReport
const reportConversion = AdsApp.report(
'SELECT segments.date, campaign.name, segments.conversion_action_name, metrics.conversions ' +
'FROM campaign ' +
'WHERE metrics.conversions > 0' +
' AND segments.date >= ' + startDate +
' AND segments.date <= ' + endDate );
reportConversion.exportToSheet(sheetConversion);
}
まとめ
今回はGoogle広告スクリプトを使った、広告運用担当者が日々行っているレポート業務の効率化方法について紹介をしました。
また別の記事で紹介している、GA4のデータをスプレッドシートに出力する方法とかけ合わせれば、殆どのレポート業務は自動化できます。
ぜひこの記事を参考に、日常業務の効率化を実現してみてください。