Google 広告のキャンペーン状況を1時間毎にスマホでもチェックできるGoogle 広告スクリプト

AdWords scriptでAdWords API v201502レポート取得が可能に

運用型広告レポート作成支援システム glu グルー運用に携わっている人で、今日のパフォーマンスが気になるキャンペーンがあるけども外出先でなかなかチェックできない、ということはないでしょうか?今回はそんな方のためのサンプルコードを公開します。

指定したキャンペーンの、キャンペーン(今月日別)、広告グループ(今日)、キーワード(今日)、広告(今日)、サーチクエリー(今日)といったレポートをGoogleスプレッドシートに展開し、メールで通知してくれます。Googleスプレッドシートはスマホ(ウェブ、アプリ)でも確認できるので、外出先でも見れる、というものです。

 

レポートを取得したいアカウントにAdWords管理画面から入り、一括処理→スクリプトに行き、新規スクリプトを作成し、以下のサンプルコードをまずコピペして保存してください。

 

サンプルコード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
// グローバル変数
var email = 'ここに通知先のメールアドレスをペースト';
var spreadsheet_url = 'https://docs.google.com/spreadsheets/〜という感じのURLをペースト';
var spreadsheet = SpreadsheetApp.openByUrl(spreadsheet_url);
var formattedDate = Utilities.formatDate(new Date(), "JST", "yyyy/MM/dd' 'HH:mm:ss");
var cid = AdWordsApp.currentAccount().getCustomerId();
var accountname = AdWordsApp.currentAccount().getName();
var rawsheet = spreadsheet.getSheetByName('データ用');
 
// 6つの関数を順番に実行していきます
function main() {
cpreport();
agreport()
kwreport();
adreport();
sqreport();
sendmail()
}
 
// キャンペーンレポート(今月)
function cpreport() {
  var formatsheet = spreadsheet.getSheetByName('キャンペーン');
  rawsheet.clear();
  formatsheet.clear();
 
   // 基本情報とフォーマット
  formatsheet.getRange(1, 1, 1, 1).setValue('更新時間:');
  formatsheet.getRange(1, 2, 1, 1).setValue(formattedDate);
  formatsheet.getRange(2, 1, 1, 1).setValue('CID:');
  formatsheet.getRange(2, 2, 1, 1).setValue(cid);
  formatsheet.getRange(3, 1, 1, 1).setValue('アカウント名:');
  formatsheet.getRange(3, 2, 1, 1).setValue(accountname);
  formatsheet.getRange(4, 1, 1, 1).setValue('キャンペーンレポート(日別)');
  formatsheet.getRange(4, 1, 1, 10).setBackground('#B0E0E6');
 
  // レポート取得 
  var report = AdWordsApp.report(
    'SELECT Date, CampaignName,  Impressions, Clicks, Ctr, Cost, ConversionsManyPerClick, CostPerConversionManyPerClick, ConversionRateManyPerClick, AveragePosition ' +
    'FROM   CAMPAIGN_PERFORMANCE_REPORT ' +
    'WHERE CampaignName = "キャンペーン名をペースト" ' +
    'DURING THIS_MONTH');
   
  // 上記AWQLで指定したデータをエキスポート
  report.exportToSheet(rawsheet);
 
    // 日付列で昇順ソート
  rawsheet.sort(1, true);
 
  // ヘッダー設定
  var header = [
      '日付',
      'キャンペーン名',
      'IMP数',
      'クリック数',
      'クリック率',
      'コスト',
      'CV数',
      'CV単価',
      'CV率',
      '平均掲載順位',
  ];
  var headerrange = formatsheet.getRange(5, 1, 1, 10);
  headerrange.setValues([header]);
  headerrange.setHorizontalAlignment("center");
  headerrange.setFontWeight("bold");
  headerrange.setFontSize(8);
 
  // rawdataをフォーマットシートへ値コピー(フォーマットシートのクリック率列の書式を%にしておく)
  var lastRow = rawsheet.getLastRow();
  var lastColumn = rawsheet.getLastColumn();
  var copyValue = rawsheet.getRange(2, 1, lastRow, lastColumn).getValues();
  formatsheet.getRange(6, 1, lastRow, lastColumn).setValues(copyValue);
 
 // クリック率列とコンバージョン率列のパーセント表示変換
  var formatlastRow = formatsheet.getLastRow();
  formatsheet.getRange(1, 5, formatlastRow, 1).setNumberFormat("0.00%");
  formatsheet.getRange(1, 9, formatlastRow, 1).setNumberFormat("0.00%");
 
}
 
// 広告グループレポート(今日)
function agreport() {
  var formatsheet = spreadsheet.getSheetByName('広告グループ');
  rawsheet.clear();
  formatsheet.clear();
 
   // 基本情報とフォーマット
  formatsheet.getRange(1, 1, 1, 1).setValue('更新時間:');
  formatsheet.getRange(1, 2, 1, 1).setValue(formattedDate);
  formatsheet.getRange(2, 1, 1, 1).setValue('CID:');
  formatsheet.getRange(2, 2, 1, 1).setValue(cid);
  formatsheet.getRange(3, 1, 1, 1).setValue('アカウント名:');
  formatsheet.getRange(3, 2, 1, 1).setValue(accountname);
  formatsheet.getRange(4, 1, 1, 1).setValue('広告グループレポート(今日)');
  formatsheet.getRange(4, 1, 1, 10).setBackground('#B0E0E6');
 
  // レポート取得 
  var report = AdWordsApp.report(
    'SELECT CampaignName, AdGroupName, Impressions, Clicks, Ctr, Cost, ConversionsManyPerClick, CostPerConversionManyPerClick, ConversionRateManyPerClick, AveragePosition ' +
    'FROM   ADGROUP_PERFORMANCE_REPORT ' +
    'WHERE AdGroupStatus = ENABLED AND CampaignName = "キャンペーン名をペースト" ' +
    'DURING TODAY');
   
  // 上記AWQLで指定したデータをエキスポート
  report.exportToSheet(rawsheet);
 
    // 日付列で昇順ソート
  rawsheet.sort(1, true);
 
  // ヘッダー設定
  var header = [
      'キャンペーン名',
      '広告グループ名',
      'IMP数',
      'クリック数',
      'クリック率',
      'コスト',
      'CV数',
      'CV単価',
      'CV率',
      '平均掲載順位',
  ];
  var headerrange = formatsheet.getRange(5, 1, 1, 10);
  headerrange.setValues([header]);
  headerrange.setHorizontalAlignment("center");
  headerrange.setFontWeight("bold");
  headerrange.setFontSize(8);
 
  // rawdataをフォーマットシートへ値コピー(フォーマットシートのクリック率列の書式を%にしておく)
  var lastRow = rawsheet.getLastRow();
  var lastColumn = rawsheet.getLastColumn();
  var copyValue = rawsheet.getRange(2, 1, lastRow, lastColumn).getValues();
  formatsheet.getRange(6, 1, lastRow, lastColumn).setValues(copyValue);
 
 // クリック率列とコンバージョン率列のパーセント表示変換
  var formatlastRow = formatsheet.getLastRow();
  formatsheet.getRange(1, 5, formatlastRow, 1).setNumberFormat("0.00%");
  formatsheet.getRange(1, 9, formatlastRow, 1).setNumberFormat("0.00%");
 
}
 
// キーワードレポート(今日)
function kwreport() {
  var formatsheet = spreadsheet.getSheetByName('キーワード');
  rawsheet.clear();
  formatsheet.clear();
 
    // 基本情報とフォーマット
  formatsheet.getRange(1, 1, 1, 1).setValue('更新時間:');
  formatsheet.getRange(1, 2, 1, 1).setValue(formattedDate);
  formatsheet.getRange(2, 1, 1, 1).setValue('CID:');
  formatsheet.getRange(2, 2, 1, 1).setValue(cid);
  formatsheet.getRange(3, 1, 1, 1).setValue('アカウント名:');
  formatsheet.getRange(3, 2, 1, 1).setValue(accountname);
  formatsheet.getRange(4, 1, 1, 1).setValue('キーワードレポート(今日)');
  formatsheet.getRange(4, 1, 1, 12).setBackground('#B0E0E6');
 
  // レポート取得 
  var report = AdWordsApp.report(
    'SELECT CampaignName, AdGroupName, KeywordText, KeywordMatchType, Impressions, Clicks, Ctr, Cost, ConversionsManyPerClick, CostPerConversionManyPerClick, ConversionRateManyPerClick, AveragePosition ' +
    'FROM   KEYWORDS_PERFORMANCE_REPORT ' +
    'WHERE Status = ENABLED and CampaignName = "キャンペーン名をペースト" ' +
        // 'WHERE  Impressions > 0 ' +
    'DURING TODAY');
   
  // 上記AWQLで指定したデータをエキスポート
  report.exportToSheet(rawsheet);
   
    // コスト列でソート
  rawsheet.sort(8, false);
 
  // ヘッダー設定
  var header = [
      'キャンペーン名',
      '広告グループ名',
      'キーワード',
      'マッチタイプ',
      'IMP数',
      'クリック数',
      'クリック率',
      'コスト',
      'CV数',
      'CV単価',
      'CV率',
      '平均掲載順位',
  ];
  var headerrange = formatsheet.getRange(5, 1, 1, 12);
  headerrange.setValues([header]);
  headerrange.setHorizontalAlignment("center");
  headerrange.setFontWeight("bold");
  headerrange.setFontSize(8);
 
  // rawdataをフォーマットシートへ値コピー(フォーマットシートのクリック率列の書式を%にしておく)
  var lastRow = rawsheet.getLastRow();
  var lastColumn = rawsheet.getLastColumn();
  var copyValue = rawsheet.getRange(2, 1, lastRow, lastColumn).getValues();
  formatsheet.getRange(6, 1, lastRow, lastColumn).setValues(copyValue);
   
 // クリック率列とコンバージョン率列のパーセント表示変換
  var formatlastRow = formatsheet.getLastRow();
  formatsheet.getRange(1, 7, formatlastRow, 1).setNumberFormat("0.00%");
  formatsheet.getRange(1, 11, formatlastRow, 1).setNumberFormat("0.00%");
   
}
 
//広告別レポート(今日)
function adreport() {
  var formatsheet = spreadsheet.getSheetByName('広告');
  rawsheet.clear();
  formatsheet.clear();
 
  // 基本情報とフォーマット 
  formatsheet.getRange(1, 1, 1, 1).setValue('更新時間:');
  formatsheet.getRange(1, 2, 1, 1).setValue(formattedDate);
  formatsheet.getRange(2, 1, 1, 1).setValue('CID:');
  formatsheet.getRange(2, 2, 1, 1).setValue(cid);
  formatsheet.getRange(3, 1, 1, 1).setValue('アカウント名:');
  formatsheet.getRange(3, 2, 1, 1).setValue(accountname);
  formatsheet.getRange(4, 1, 1, 1).setValue('広告レポート(今日)');
  formatsheet.getRange(4, 1, 1, 13).setBackground('#B0E0E6');
 
  // レポート取得 
  var report = AdWordsApp.report(
    'SELECT CampaignName, AdGroupName, Headline, Description1, Description2, Impressions, Clicks, Ctr, Cost, ConversionsManyPerClick, CostPerConversionManyPerClick, ConversionRateManyPerClick, AveragePosition ' +
    'FROM   AD_PERFORMANCE_REPORT ' +
    'WHERE Status = ENABLED  and CampaignName = "キャンペーン名をペースト" ' +
        // 'WHERE  Impressions > 0 ' +
    'DURING TODAY');
   
  // 上記AWQLで指定したデータをエキスポート
  report.exportToSheet(rawsheet);
   
  // コスト列でソート
  rawsheet.sort(9, false); 
 
  // ヘッダー設定
  var header = [
      'キャンペーン名',
      '広告グループ名',
      'タイトル',
      '説明文1',
      '説明文2',
      'IMP数',
      'クリック数',
      'クリック率',
      'コスト',
      'CV数',
      'CV単価',
      'CV率',
      '平均掲載順位',
  ];
  var headerrange = formatsheet.getRange(5, 1, 1, 13);
  headerrange.setValues([header]);
  headerrange.setHorizontalAlignment("center");
  headerrange.setFontWeight("bold");
  headerrange.setFontSize(8);
 
  // rawdataをフォーマットシートへ値コピー(フォーマットシートのクリック率列の書式を%にしておく)
  var lastRow = rawsheet.getLastRow();
  var lastColumn = rawsheet.getLastColumn();
  var copyValue = rawsheet.getRange(2, 1, lastRow, lastColumn).getValues();
  formatsheet.getRange(6, 1, lastRow, lastColumn).setValues(copyValue);
   
 // クリック率列とコンバージョン率列のパーセント表示変換
  var formatlastRow = formatsheet.getLastRow();
  formatsheet.getRange(1, 8, formatlastRow, 1).setNumberFormat("0.00%");
  formatsheet.getRange(1,12, formatlastRow, 1).setNumberFormat("0.00%");
   
}
 
//サーチクエリーレポート(今日)
function sqreport() {
  var formatsheet = spreadsheet.getSheetByName('サーチクエリー');
  rawsheet.clear();
  formatsheet.clear();
 
  // 基本情報とフォーマット
  formatsheet.getRange(1, 1, 1, 1).setValue('更新時間:');
  formatsheet.getRange(1, 2, 1, 1).setValue(formattedDate);
  formatsheet.getRange(2, 1, 1, 1).setValue('CID:');
  formatsheet.getRange(2, 2, 1, 1).setValue(cid);
  formatsheet.getRange(3, 1, 1, 1).setValue('アカウント名:');
  formatsheet.getRange(3, 2, 1, 1).setValue(accountname);
  formatsheet.getRange(4, 1, 1, 1).setValue('サーチクエリーレポート(今日)');
  formatsheet.getRange(4, 1, 1, 13).setBackground('#B0E0E6');
 
  // レポート取得 
  var report = AdWordsApp.report(
    'SELECT CampaignName, AdGroupName, Query, KeywordTextMatchingQuery, MatchType, Impressions, Clicks, Ctr, Cost, ConversionsManyPerClick, CostPerConversionManyPerClick, ConversionRateManyPerClick, AveragePosition ' +
    'FROM   SEARCH_QUERY_PERFORMANCE_REPORT ' +
    'WHERE CampaignName = "キャンペーン名をペースト" ' +
        // 'WHERE  Impressions > 0 ' +
    'DURING TODAY');
   
  // 上記AWQLで指定したデータをエキスポート
  report.exportToSheet(rawsheet);
   
    // コスト列でソート
  rawsheet.sort(9, false);
 
  // ヘッダー設定
  var header = [
      'キャンペーン名',
      '広告グループ名',
      'クエリー',
      'キーワード',
      'マッチタイプ',
      'IMP数',
      'クリック数',
      'クリック率',
      'コスト',
      'CV数',
      'CV単価',
      'CV率',
      '平均掲載順位',
  ];
  var headerrange = formatsheet.getRange(5, 1, 1, 13);
  headerrange.setValues([header]);
  headerrange.setHorizontalAlignment("center");
  headerrange.setFontWeight("bold");
  headerrange.setFontSize(8);
 
  // rawdataをフォーマットシートへ値コピー(フォーマットシートのクリック率列の書式を%にしておく)
  var lastRow = rawsheet.getLastRow();
  var lastColumn = rawsheet.getLastColumn();
  var copyValue = rawsheet.getRange(2, 1, lastRow, lastColumn).getValues();
  formatsheet.getRange(6, 1, lastRow, lastColumn).setValues(copyValue);
   
 // クリック率列とコンバージョン率列のパーセント表示変換
  var formatlastRow = formatsheet.getLastRow();
  formatsheet.getRange(1, 8, formatlastRow, 1).setNumberFormat("0.00%");
  formatsheet.getRange(1, 12, formatlastRow, 1).setNumberFormat("0.00%");
   
}
 
  // ログ記録とメール通知設定
function sendmail() {
  Logger.log('キーワードレポート(今月)の準備ができました\n' +
      spreadsheet.getUrl());
  if (email) {
    MailApp.sendEmail(email,
      accountname + 'のレポートの準備ができました' +  ' ' + formattedDate,
      spreadsheet.getUrl());
}
 }

 

処理手順

処理手順は以下の通りです:

  1. あらかじめGoogleスプレッドシートで作ったレポートテンプレートを用意しておきます
  2. 生データ流し込み用のシート(「データ用」)と本レポート用のシートに分かれています
  3. 本レポート用シートに更新日時、CID、アカウント名を自動的に書き込み、若干セルに色をつけるフォーマットもします(それ以外のフォーマットは何もする必要はないかと思います。強いていえば列幅は自分で変更ください)
  4. それぞれのレポートから、指定した項目のデータをを生データ流し込み用シートに展開します
  5. データを本レポート用シートにコピペします
  6. クリック率列とコンバージョン率列の数値をパーセントに変換します
  7. レポートが完成したら、指定したメールアドレスに通知します

 

注意点

  • メール通知用のメールアドレスをコードの2行目に入力してください。

 

 

  • キャンペーン名はなぜか変数化できなかったので、各レポートのWHERE CampaignName = “キャンペーン名をペースト”となっている部分の””の間にキャンペーン名をペーストしてください(くれぐれも間違えのないよう)。

 

 

  • 本レポートはキャンペーンのみは今月分、その他は当日のデータを取得する設定にしていますが、それぞれのレポート期間指定部分のTHIS_MONTHまたはTODAYの部分を、以下に変更することで違う期間のデータを取得できます。
    TODAY | YESTERDAY | LAST_7_DAYS | THIS_WEEK_SUN_TODAY | THIS_WEEK_MON_TODAY | LAST_WEEK | LAST_14_DAYS | LAST_30_DAYS | LAST_BUSINESS_WEEK | LAST_WEEK_SUN_SAT | THIS_MONTH
    期間指定を日付で行いたい場合は、DURING 20150301,20150308という表記をしてください。

 

完成イメージ

メール通知はこちらが届きます。
screenshot27

メール通知が必要ない方は、17行目のsendmail()を // sendmail()に変更してください。メール通知は停止します。

 

スプレッドシートに展開されたレポートは以下の通りです。

screenshot28

 

スマホのGoogleスプレッドシートですと、以下のような感じで見れます。

IMG_0547

 

自動実行の設定(オプション)

このままであれば「実行」を押せば都度スクリプトを走らせることは可能ですが、頻繁に更新/メール確認したい人は、コードを保存した後、管理画面上でスケジュール設定すれば、指定した頻度(毎時間でも)、指定した日時に自動実行できます。

 

screenshot31

 

本スクリプトは単一のキャンペーンのみに対応していますが、人によっては他のキャンペーンも同時に見たいと思います。また、前月比較などもニーズとしてはあると思います。このスクリプトをベースに編集いただいてもいいですし、今後私のほうでもグレードアップはしていこうと持っています。

Happy scripting!


【Google 広告の設定や使い方を正しく理解し効果を最大化しませんか?】

✓Google 広告設定を最適化したい 
✓固定フィーベースの広告運用サービスに興味がある 
✓社内の知識を醸成するため、Google 広告のトレーニングをしてほしい(広告主も広告代理店も受講可) 
という方は、まずはライトな相談から
アタラの運用型広告最適化サービスの内容とお問い合わせはこちらをクリック

Related posts

Top

結果を出すマーケティングの専門集団

お問い合わせはこちら