GASで広告レポートを自動化する手順|媒体ごとのデータの取り方と、6分の上限に収まるかを先に見積もる計算

GAS(Google Apps Script)はGoogleアカウントがあれば無料で使え、スプレッドシートの[拡張機能]から開けばすぐに書き始められます。広告レポートの自動化でも、まず候補に挙がる手段です。
ただ、GASで作った広告レポートがつまずく場所は、毎朝の更新ではないことが多いものです。止まりやすいのは、媒体ごとにデータの取り方が違うことに気づいた時点と、過去1年分をまとめて取り込もうとして1回6分の上限に当たった時点です。媒体ごとの取り方を決め、手順を組み、上限に収まるかを数字で見積もるところまでを、GASを書き始める前の順番に並べます。
GASで広告レポートを作る前に、媒体ごとの取り方を決める
GASから直接取れる媒体と、媒体側のスクリプトで出す媒体がある
GASからそのまま取りに行けるかどうかは、媒体によって違います。申請なしで取れるものもあれば、媒体の管理画面の中で動く別のスクリプトに任せたほうが早いものもあります。
- GA4:Apps Scriptのエディタで「Google Analytics Data API」のサービスを追加すれば、申請なしでレポートを取得できます
- Meta広告:Graph APIのインサイトを、GASの UrlFetchApp で取りに行きます。期限切れしにくいシステムユーザーのトークンを使うのが前提です
- Google広告:GASから広告のAPIを直接呼ぶには開発者トークンの申請が要ります。Google広告の管理画面で動くGoogle広告スクリプトから、スプレッドシートへ書き出すほうが近道です
- LINEヤフー広告:管理画面で動くLINEヤフー広告スクリプトでスプレッドシートへ毎日書き出す形が近道です
- X広告:Ads APIのアクセス申請と承認、リクエストごとの署名が要り、GASで組む手数は最も多くなります
つまり「GASで広告レポート」といっても、実際にGASが取りに行くのはGA4とMeta広告くらいで、Google広告とLINEヤフー広告は媒体側のスクリプトが書き出した表をGASが読む形になりがちです。Google広告の書き出し側はGoogle広告スクリプトで直近14日を毎日上書きする手順、Meta広告をGASで取る具体的なコードはMeta広告のデータをGASで毎朝書き出す方法にあります。
GASに書かせるのは生データだけにする
GASの役割は、媒体から取ってきた数字を生データ用のシートに書き込むところまでに絞ります。日付・媒体・キャンペーン名・費用・表示回数・クリック・コンバージョンの7列を縦に積み、合計やCPA、前週比は集計用のシートの関数で計算させます。
計算までGASに持たせると、レポートの見た目を変えるたびにコードを直すことになります。関数で計算していれば、列を足したり期間を変えたりするのはシートの側だけで済みます。CPAは日別のCPAを平均せず、期間の費用の合計をコンバージョンの合計で割る、といった計算の決まりも、関数のほうが誰にでも確かめられます。

GASで広告レポートを毎朝動かす手順
手順は、生データ用と集計用のシートを用意する、認証情報をスクリプト プロパティに入れる、取得して書き込む関数を書く、時間主導型のトリガーで毎朝動かす、失敗をメールで受け取る、の5つです。運用を始めてから困りやすいのは、認証情報の置き場所と、トリガーと失敗の受け取り方です。
認証情報はスクリプト プロパティに置き、シートには書かない
アクセストークンや広告アカウントのIDは、プロジェクトの設定にある「スクリプト プロパティ」に保存し、コードからは PropertiesService で読み出します。シートのセルやコードに直接書くと、シートを共有した相手や、コードを見た人にトークンがそのまま見えてしまいます。
媒体ごとの取得は1つの関数にまとめず、媒体ごとに分けておきます。Meta広告の取得が止まった日も、GA4の行だけは更新を続けられるからです。書き込みは、直近の数日分を消してから書き直す上書き型にします。成果があとから増える媒体では、前日分を足していくだけの追記型だと、遅れて計上されたコンバージョンが表に入りません。
時間主導型のトリガーで毎朝動かし、失敗はメールで受け取る
毎朝の実行は時間主導型のトリガーに任せ、失敗はエラー通知のメールで受け取ります。トリガーの画面で「時間主導型」「日付ベースのタイマー」を選び、たとえば午前5〜6時に実行します。作るときに「エラー通知設定」を「今すぐ通知を受け取る」にしておくと、失敗した朝にメールが届きます。止まったことに気づくのが月末の報告の直前になるのが、自作のレポートでいちばん高くつく失敗です。
失敗の中身は、エディタ左の「実行数」で実行ごとのログとエラーを確かめます。媒体のAPIは仕様が変わるため、昨日まで動いたコードが今日止まることは珍しくありません。APIには版ごとに提供終了の期限があり(MetaのGraph APIは各版がおおむね2年)、期限までにコードを新しい版へ移す作業が定期的に発生します。
ADminiなら、Google広告・Meta広告・GA4など、つないだ媒体のデータを、コードを書かずに1日1回の自動更新で1つの表にそろえられます。ADminiなら無料で始められます。無料で試してみる →
GASの上限に収まるかを先に計算する
毎朝の更新は上限の数%、詰まるのは初回の取り込み
毎朝の更新はGASの上限の数%で収まり、上限に当たるのは過去の分をまとめて取り込む初回です。GASには、1回の実行は6分まで、トリガーで動かす合計は1日90分まで(無料のGoogleアカウント。Google Workspaceは6時間)、外部への取得(URL取得)は1日2万回まで(同10万回)という上限があります(Google for Developers「Google サービスの割り当て」)。この上限に当たるかどうかは、取得の回数と1回あたりの時間で先に見積もれます。
再現用のサンプルで計算します。Meta広告・GA4・X広告の3媒体で、それぞれ2アカウント(キャンペーンは各アカウント20本以下)を扱い、1回の取得に平均3秒かかると仮定します。Meta広告は1か月分を1回で、X広告は同期の分析の上限どおり7日分ずつ取ります。
| 項目 | 毎朝の更新(直近7日を取り直す) | 初回の取り込み(過去1年) | GASの上限 |
|---|---|---|---|
| 取得の回数 | Meta 2回+GA4 2回+X 2回=6回 | Meta 24回(12か月×2)+GA4 2回+X 106回(53週×2)=132回 | URL取得 2万回/日 |
| 1回の実行時間 | 6回×3秒=18秒 | 132回×3秒=396秒(6分36秒) | 6分/実行 |
| 上限に対する割合 | 6分の5% | 6分の110%(途中で止まる) | — |
毎朝の更新は18秒で、6分のうち5%しか使いません。初回の取り込みは毎朝の更新の22倍の回数になり、1回の実行に収まりません。アカウントが1つ増えるたびに、X広告だけで53回ずつ増える計算です。3秒という前提は通信の状態で変わるため、実際の値は「実行数」に出る所要時間で置き換えてください。
6分を超える処理は区切って、続きから再開させる
初回の取り込みが6分を超えるなら、処理を区切ります。どこまで取ったかをスクリプト プロパティに書き残し、5分を過ぎたら止めて、数分後に動く一度きりのトリガーを作り、次の実行は書き残した位置から再開させます。期間の長い取得を非同期で受け付ける媒体(X広告は分割なしで90日まで)なら、取得そのものを媒体側に任せて完了を待つ書き方もあります。
ここまで組むと、GASのレポートは「書いて終わり」の道具ではなくなります。トークンの更新、媒体のAPIの版の切り替え、区切り処理の不具合、担当が替わったときの引き継ぎまでを誰かが持ち続けることになります。保守を引き受ける人がいないなら、GASでは作らないほうがよい状況です。

コードを持たずに複数媒体をそろえるならADmini
ADmini(アドミニ)は、Google広告・Meta広告・LINEヤフー広告・X広告・GA4をデータソースとしてつなぐと、毎朝1日1回の自動更新で数字が1つの表にそろうツールです。初回の取り込みの区切りや再開、媒体のAPIの仕様変更への追従はADminiの側で行うため、上で計算したような上限や保守を自分で抱えずに済みます。Freeプランでもデータソースは3つまでつなげます。
一方で、GASのほうが向く場面もあります。社内の別のシステムへ書き戻したい、ADminiで取れない指標(動画の再生率やリーチなど)を毎日取りたい、といった場合です。ADminiの広告媒体の連携で取得できる指標は費用・表示回数・クリック・コンバージョン・コンバージョン値の5つで、それ以外はGASか媒体からの書き出しが要ります。
まとめ
GASで広告レポートを自動化するときは、まず媒体ごとの取り方を決めます。GA4とMeta広告はGASから取り、Google広告とLINEヤフー広告は媒体側のスクリプトで書き出すのが近道です。GASに書かせるのは生データだけにして、計算は関数に任せます。認証情報はスクリプト プロパティに置き、トリガーのエラー通知を必ずオンにします。毎朝の更新は上限の数%で収まっても、初回の取り込みは6分を超えやすいため、区切って再開する処理を最初から入れておきます。
では、自動化して何が残るのでしょうか。数字が毎朝そろっても、どの数字の動きを異常と見なし、翌日の配信をどう変えるかは、GASにもADmini(アドミニ)にも決められません。道具が引き受けるのは集める手間までで、そこから先の判断は運用する人の仕事として残ります。
まず今週やることは、扱っている媒体とアカウントの数を書き出し、上の表の計算に当てはめて、初回の取り込みが6分に収まるかを見積もることです。収まらないなら、区切りの処理を書くか、別の手段を選ぶかをその場で決めます。
ADminiなら、複数媒体の広告データが毎朝1つの表にそろい、日付やキャンペーンで並べ替えてそのまま見比べられます。ADminiなら無料で始められます。無料で試してみる →
よくある質問
GASで広告レポートを自動化するのに費用はかかりますか?
GAS自体はGoogleアカウントがあれば無料で使えます。ただし、無料のGoogleアカウントでは1回の実行が6分まで、トリガーの合計が1日90分まで、外部へのURL取得が1日2万回までという上限があります。Google Workspaceのアカウントではトリガーの合計が1日6時間、URL取得が1日10万回まで広がります。費用の代わりに、コードを書く時間と止まったときの保守の手間がかかります。
GASでGoogle広告のレポートを取得できますか?
GASから広告のAPIを直接呼ぶには、開発者トークンの申請と承認が要ります。多くの場合は、Google広告の管理画面で動くGoogle広告スクリプトでスプレッドシートへ書き出し、その表をGASや関数で読むほうが近道です。GA4やMeta広告は、GASから直接データを取りに行けます。
GASの広告レポートが6分の上限で止まるときはどうすればよいですか?
処理を区切ります。どこまで取得したかをスクリプト プロパティに書き残し、5分を過ぎたら処理を止めて、数分後に動く一度きりのトリガーを作り、次の実行で続きから再開させます。止まりやすいのは毎朝の更新ではなく、過去1年分などをまとめて取り込む初回です。
GASの広告レポートが止まったことに気づくにはどうすればよいですか?
トリガーを作るときに「エラー通知設定」を「今すぐ通知を受け取る」にしておくと、実行に失敗した時点でメールが届きます。失敗の中身は、Apps Scriptのエディタ左の「実行数」で、実行ごとのログとエラーを確認できます。媒体のAPIは仕様が変わるため、通知をオフにしたまま運用しないことが大切です。
