運用に携わっている人で、今日のパフォーマンスが気になるキャンペーンがあるけども外出先でなかなかチェックできない、ということはないでしょうか?今回はそんな方のためのサンプルコードを公開します。
指定したキャンペーンの、キャンペーン(今月日別)、広告グループ(今日)、キーワード(今日)、広告(今日)、サーチクエリー(今日)といったレポートを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()); } } |
処理手順
処理手順は以下の通りです:
- あらかじめGoogleスプレッドシートで作ったレポートテンプレートを用意しておきます
- 生データ流し込み用のシート(「データ用」)と本レポート用のシートに分かれています
- 本レポート用シートに更新日時、CID、アカウント名を自動的に書き込み、若干セルに色をつけるフォーマットもします(それ以外のフォーマットは何もする必要はないかと思います。強いていえば列幅は自分で変更ください)
- それぞれのレポートから、指定した項目のデータをを生データ流し込み用シートに展開します
- データを本レポート用シートにコピペします
- クリック率列とコンバージョン率列の数値をパーセントに変換します
- レポートが完成したら、指定したメールアドレスに通知します
注意点
- メール通知用のメールアドレスをコードの2行目に入力してください。
- Googleスプレッドシートはこちらをコピー作成して使ってください。(メニュー→ファイル→コピーを作成)
https://goo.gl/xWQ4XN
または、ご自分でGoogleスプレッドシートを新規作成しても大丈夫です。その際、以下の名前でシートを追加してください。「キャンペーン」、「広告グループ」、「キーワード」、「広告」、「サーチクエリー」、「データ用」(これは非表示にして問題ありません)
コピー作成したスプレッドシートのURLを、コードの3行目に入力してください。
- キャンペーン名はなぜか変数化できなかったので、各レポートのWHERE CampaignName = “キャンペーン名をペースト”となっている部分の””の間にキャンペーン名をペーストしてください(くれぐれも間違えのないよう)。
- データ項目を追加・変更したい場合は、SELECT部分に指定してください。データ項目の選び方は、以前のブログで取り上げたAWQL.meを使いながらやると楽に指定できます。
http://www.quantumleap.jp/2015/02/adwords-script1-google.html
- 本レポートはキャンペーンのみは今月分、その他は当日のデータを取得する設定にしていますが、それぞれのレポート期間指定部分の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という表記をしてください。
完成イメージ
メール通知が必要ない方は、17行目のsendmail()を // sendmail()に変更してください。メール通知は停止します。
スプレッドシートに展開されたレポートは以下の通りです。
スマホのGoogleスプレッドシートですと、以下のような感じで見れます。
自動実行の設定(オプション)
このままであれば「実行」を押せば都度スクリプトを走らせることは可能ですが、頻繁に更新/メール確認したい人は、コードを保存した後、管理画面上でスケジュール設定すれば、指定した頻度(毎時間でも)、指定した日時に自動実行できます。
本スクリプトは単一のキャンペーンのみに対応していますが、人によっては他のキャンペーンも同時に見たいと思います。また、前月比較などもニーズとしてはあると思います。このスクリプトをベースに編集いただいてもいいですし、今後私のほうでもグレードアップはしていこうと持っています。
Happy scripting!