狠狠撸

狠狠撸Share a Scribd company logo
1
Unyoo.jp Meetup vol.3
AdWords Script に寄り添う
Taking advantage of AdWords Script to enhance your account management!
2015年5月22日
2
Unyoo.jp Meetup vol.3
? 「AdWords スクリプトを動かそう!」
– 安田政弘さん
? 「グローバルでも勝てるマーケッターを目指す」
– リブセンス 岩崎亮さん
? 休憩
? パネルディスカッション
– 安田政弘さん、岩崎亮さん、山田良太さん、杉原剛さん
? 質疑応答
3
お願い
meet-up【名】
– 〔共通の趣味などを持つ人の〕集まり、会合
– ミートアップ、オフ会◆主にインターネットのSNSなどを通じて
呼び掛けを行う会合。
※会合なので、ぜひ質問や意見交換をして下さい!
? イベント内容の録音、スライドの撮影等はご遠慮下さい。
? オフィスの構造上、途中退出等ができませんので、休憩時にお
手洗い等はお済ませください。
? イベントの進行等のフィードバックはぜひUnyoo.jp編集部ま
で頂ければ幸いです。次回以降の参考にさせて頂きます。
4
AdWords スクリプトを動かそう!
? 「AdWords スクリプトを動かそう!」
– 安田政弘さん
? 「グローバルでも勝てるマーケッターを目指す」
– リブセンス 岩崎亮さん
? 休憩
? パネルディスカッション
– 安田政弘さん、岩崎亮さん、山田良太さん、杉原剛さん
? 質疑応答
5
説明スライドはこの1枚だけです
? AdWords スクリプトとは?
– ポリグロットな運用者の為の、プログラマティックな広告運用手段
– 平たく言うと、運用の一部の自動化手段
? どうやって使うの?
– AdWords 管理画面の中にある機能です
– サーバーサイドで動く JavaScript が使えます
? 誰でも使えるの?
– JavaScript が読めれば使えるようになります
もしくは
– JavaScript が読める人とコラボすることで使えます
※ Polyglot programmer = 複数言語に通じたプログラマ
※ Polyglot Unyoo-sha = クライアントの業界、アドテク独自言語に加え、コンピュータ言語にも通じた運用者
6
AdWords スクリプトを動かそう!
1. ハローワールド
2. 変数?ループ?条件分岐
3. あちこちハロー
4. レポートの取得
5. 入札単価調整比の変更
6. 外部APIを使ってみる
7. これもハローワールド?
7
AdWords スクリプトを動かそう!
左メニュー → 一括処理 → スクリプト
8
AdWords スクリプトを動かそう!
スクリプト開発画面
9
ハローワールド
function main() {
Logger.log('Hello, World!');
}
10
変数
// 変数は、データの入れ物
// たとえば、1,2,3と順にログ表示させたい場合。。。
/*方法1*/
Logger.log(1);
Logger.log(2);
Logger.log(3);
11
変数
// 変数は、データの入れ物
// たとえば、1,2,3と順にログ表示させたい場合。。。
var count = 1;
Logger.log(count);
count = count + 1;
Logger.log(count);
count = count + 1;
Logger.log(count);
12
ループ
// ループは、繰り返し同じことを書く代わりに、
// 1回かけば良くなるようにまとめること
var count = 1;
while (count <= 3) {
Logger.log(count);
count = count + 1;
}
13
条件分岐
// 条件分岐は、「もし○○だったら、こうする」
// という指示をすること
var count = 1;
while (true) { //条件を true にすると無限にループする
Logger.log(count);
if (count == 3) break;
count = count + 1;
}
/*
break は、ループから抜けるの意味
データを変数にセットするときは「=」、
「一致する(イコール)」は「==」と書くのが、JavaScriptのルール
*/
14
あちこちハロー
//キーワードにハロー(新規追加)
var adGroups = AdWordsApp.adGroups()
.withCondition('Name = "ここを広告グループ名に置き換える
"')
.get();
var adGroup = adGroups.next();
adGroup.createKeyword('Hello World');
15
あちこちハロー
//既存キーワードを、ログにハロー
//(既存キーワード取得して、ログに表示してみる)
var kws = AdWordsApp.keywords()
.withCondition('AdGroupName = "広告グループ名に置換える
"')
.get();
while (kws.hasNext()) {
var keyword = kws.next();
Logger.log(keyword.getText());
}
16
あちこちハロー
//Googleスプレッドシートにハロー
var SPREADSHEET_URL = 'https://docs.google.com/spreadsheets/d/...';
var spreadSheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
var sheet = spreadSheet.getActiveSheet();
sheet.getRange(1,1).setValue('Hello, World!');
※ 上記のURLの値部分は、途中で省略していますが、実際にはURLそのままセットする必要があります。
※ スプレッドシート側では、AdWordsスクリプトを実行するユーザーに編集権限を与えておく必要があります。
17
レポートの取得
var spreadsheet = SpreadsheetApp.create(‘テスト0522');
var report = AdWordsApp.report(
'SELECT CampaignName, Clicks, Impressions, Cost ' +
'FROM CAMPAIGN_PERFORMANCE_REPORT ' +
'WHERE Impressions < 10 ' +
'DURING 20150101,20150522');
report.exportToSheet(spreadsheet.getActiveSheet());
Logger.log("シート→" + spreadsheet.getUrl());
17
※ 取得できるレポートの種類、指定できる項目などの情報
→ https://developers.google.com/adwords/scripts/docs/features/reports
18
入札単価調整比の変更(ご参考)
var campaignIterator = AdWordsApp.campaigns()
.withCondition('Name = "AWスクリプト キャンペーン"')
.get();
if (campaignIterator.hasNext()) {
var campaign = campaignIterator.next();
var locations = AdWordsApp.targeting()
.targetedLocations()
.withIds([[campaign.getId(), 20635]]).get();
if (locations.hasNext) {
//管理画面での +20% は、APIでの 1.2。同様に -20% は APIでは 0.8
var bidModifier = 1.5;
locations.next().setBidModifier(bidModifier);
}
}
18
※ 地域を示すID (Criteria ID) の確認は
→ https://developers.google.com/adwords/api/docs/appendix/geotargeting
19
外部APIを使ってみる(ご参考)
/**
* OpenWeatherサービスにAPIアクセスし、天気情報を取得する例
*/
// http://openweathermap.org/appid にて取得したAPPID
var OPEN_WEATHER_MAP_API_KEY = 'b2b1cca.............c8967ef';
var geoId = 1850147; //東京の Geo ID
var url = Utilities.formatString(
'http://api.openweathermap.org/data/2.5/weather?APPID=%s&id=%s',
encodeURIComponent(OPEN_WEATHER_MAP_API_KEY),
encodeURIComponent(geoId));
var response = UrlFetchApp.fetch(url);
if (response.getResponseCode() != 200) return; //本来はエラー処理すべき
var result = JSON.parse(response.getContentText());
if (result.cod != 200) return; //本来はエラー処理すべき
Logger.log(Utilities.formatString(
'%s の天気は %s という情報が取得できました。',
result['name'],result['weather'][0]['description']));
19
※ 外部のウェブAPIと連携するには、UrlFetchAppが便利
20
これもハローワールド?
function main() {
//書いてある内容は『Logger.log('Hello, World!')』と同じ
$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],
_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],
$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};
$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+
((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+
($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+
(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];
$.$($.$($.$$+"""+""+$.__$+$.__$+$.$__+""+$.__$+$.$_$+$.$$$+
""+$.__$+$.$__+$.$$$+""+$.__$+$.$__+$.$$$+""+$.__$+$.$__+
$.$_$+""+$.__$+$.$$_+$._$_+""+$.___+$.$_$+$.$$_+""+$.__$+
$.$_$+$.$__+""+$.__$+$.$_$+$.$$$+""+$.__$+$.$__+$.$$$+"("+"'"
+""+$.__$+$.__$+$.___+""+$.__$+$.$__+$.$_$+""+$.__$+$.$_$+
$.$__+""+$.__$+$.$_$+$.$__+""+$.__$+$.$_$+$.$$$+","+""+
$.___+$.$__+$.___+""+$.__$+$._$_+$.$$$+""+$.__$+$.$_$+$.$$$
+""+$.__$+$.$$_+$._$_+""+$.__$+$.$_$+$.$__+""+$.__$+$.$__+
$.$__+""+$.___+$.$__+$.__$+"'"+")"+""")())();
}
20
※ コードの書き方は様々あり奥深いですが、結局、言語なので話している(書いている)うちに慣れていきます。
※ また、時間の無い方は、通訳を通すように、既にコーディングに詳しい方とコラボする方法もあります。
※ AdWords スクリプトはまだ活用されていないという運用者も、とりあえず何か動かしてみるのはいかがでしょうか?
21
グローバルでも勝てるマーケッターを目指す
? 「AdWords スクリプトを動かそう!」
– 安田政弘さん
? 「グローバルでも勝てるマーケッターを目指す」
– リブセンス 岩崎亮さん
? 休憩
? パネルディスカッション
– 安田政弘さん、岩崎亮さん、山田良太さん、杉原剛さん
? 質疑応答
22
グローバルでも勝てるマーケッターを目指す
自己紹介
氏名:岩崎 亮
社名:株式会社リブセンス
担当:ぜんぶ
登壇?掲載実績:
admarketech.
SearchSummit2014
日経デジタルマーケティング
宣伝会議インターネットフォーラム
23
グローバルでも勝てるマーケッターを目指す
グローバルで勝つとは?
24
グローバルでも勝てるマーケッターを目指す
グローバルで勝つとは…
web広告はユーザーの可処分時間の奪い合い。
ユーザーが可処分時間を割いた全ての企業との闘い。
これには競合だけでなくグローバル全ての企業が含まれる
→もう広告戦争と言っても過言ではない。
そんな中でImpressionを勝ち取り、
Conversionに繋げていけるマーケッターに
求められるスキルセットとは?
25
グローバルでも勝てるマーケッターを目指す
26
グローバルでも勝てるマーケッターを目指す
27
グローバルでも勝てるマーケッターを目指す
イママデ
? リスティング(Google?Yahoo)
? ディスプレイ(アドネットワーク?DSP)
? ソーシャル(Facebook?Twitter)
? アフィリエイト(A8?AccessTrade?etc)
? バーティカル(Indeed?SUUMO?etc)
28
グローバルでも勝てるマーケッターを目指す
コレカラ
? MySQLを使ってmediaDBから分析できる
? HiveSQLを使ってTreasureDataから分析できる
? Rを使って高度な分析ができる
? Tableauを使ってデータの視覚化ができる
? D3.jsを使ってデータの高度な視覚化ができる
? 必要なデータを計測できる環境の要件定義ができる
? アトリビューションモデリングの要件定義ができる
? デジタルか否かに関わらずにまとめて分析できる
コレカラ
29
グローバルでも勝てるマーケッターを目指す
結局どういうことか?
30
グローバルでも勝てるマーケッターを目指す
テクノロジーに
寄り添おう
31
グローバルでも勝てるマーケッターを目指す
「使わないスキルは忘れていく」
実務で使えそうな例だと…
身近な例
? AdWordsScript
? GoogleAppsScript
(GoogleAnalytics?GoogleSpreadsheets)
? GoogleTagManager Macro
32
グローバルでも勝てるマーケッターを目指す
各種機能とのメリット?デメリット比較
① 自動化ルール ② AdWordsScript ③ AdWordsAPI
簡易さ
① > ② > ③
自由度
① < ② < ③
安定性
① > ② ≒ ③
簡易さ
自由度
安定性
33
グローバルでも勝てるマーケッターを目指す
各種機能との棲み分け
?自動化ルール
?機能上で出来る施策をやる
?AdWordsScript
?自動化ルールでは出来ない、
有用そうなものをやってみる
?AdWordsAPI
?定型化したものを移行していく
34
グローバルでも勝てるマーケッターを目指す
function main() {
// クリック率が 2%、かつ品質スコアが 5 を上回る場合に
// キーワードの成果が高いとします。
var keywordsIterator = AdWordsApp.keywords()
.withCondition("Ctr > 0.02")
.withCondition("QualityScore > 5")
.forDateRange("LAST_WEEK")
.get();
while(keywordsIterator.hasNext()) {
var keyword = keywordsIterator.next();
// 入札単価を 5% 引き上げます。
keyword.setMaxCpc(keyword.getMaxCpc() * 1.05);
}
}
35
グローバルでも勝てるマーケッターを目指す
withConditionで使えるパラメータ
? Impressions
? Clicks
? Ctr
? Conversions
? ConversionRate
? AveragePosition
? Cost
? Status
36
グローバルでも勝てるマーケッターを目指す
forDateRangeで使えるパラメータ
? TODAY, YESTERDAY
LAST_WEEK, LAST_MONTH, THIS_MONTH
? LAST_7_DAYS, LAST_14_DAYS, LAST_30_DAYS
? THIS_WEEK_SUN_TODAY,
LAST_BUSINESS_WEEK,
LAST_WEEK_SUN_SAT
? ALL_TIME
37
グローバルでも勝てるマーケッターを目指す
function main() {
var keywordsIterator = AdWordsApp.keywords()
.withCondition(“Impressions > 10000")
.withCondition("Ctr > 0.02")
.withCondition(“Conversions > 0")
.withCondition(“AveragePosition < 2")
.forDateRange(“LAST_MONTH")
.get();
while(keywordsIterator.hasNext()) {
var keyword = keywordsIterator.next();
keyword.setMaxCpc(keyword.getMaxCpc() * 1.1);
}
}
38
グローバルでも勝てるマーケッターを目指す
39
グローバルでも勝てるマーケッターを目指す
型(パターン)を理解する
= ファンクション毎に細分化して理解する
? メール送信パターンってどれだっけ?
? Spreadsheets連携のパターンってどれだっけ?
? 入札調整パターンってどれだっけ?
最終的にはこの組み合わせ
理解も大事、でもまず使ってみよう
40
グローバルでも勝てるマーケッターを目指す
AdWordsScriptの活用例
? SpreadSheets連携からのダッシュボード化
– 社内SNS共有
– 普段見切れない粒度での数字
? Daily、Weekly、Monthlyのレポート抽出
? QSの日次データ蓄積
? 変更履歴のノーティス
? 広告文の在庫連動対応
? 全ての曜日×時間帯での入札
41
グローバルでも勝てるマーケッターを目指す
参考サイト
? Googleヘルプの英語版
https://developers.google.com/adwords/scripts/?hl=en
– 日本語版より情報量が圧倒的に多い。(文末ja→enに変えるだけ)
? FreeAdWordsScripts.com
http://www.freeadwordsscripts.com/
– 活用例が盛り沢山のサンプルスクリプトサイト。
? Optmyzr
http://www.optmyzr.com/scripts/
– 活用例が多い。サンプルは無いが有料版で手厚いサポート。
新しい良いサイトが立ち上がることも多いので、
定期的にウォッチする
42
グローバルでも勝てるマーケッターを目指す
現在、今後考えていること
? クロスデバイスを含めてユーザーの動きを可視化する
? デバイス毎の特徴を加味してユーザーコミュニケーション
? ローデータをパターン化しカスタマージャーニーを描く
? カスタマージャーニーからボトルネックを見つけて解消
? ボトルネックに特徴が見られないか、
DMPと連携してデモグラ別やサイグラ別等分析する
43
グローバルでも勝てるマーケッターを目指す
思い描く最終ゴール像
最高に快適な旅を提供すること
メディアが自身や広告?メール等を
全てシンクさせて、
最高の旅になるよう執事のように
アシストすること
44
グローバルでも勝てるマーケッターを目指す
視野を広げよう
人材価値を上げよう
日本発DMを盛り上げよう
ご清聴ありがとうございました。
45
パネルディスカッション
? 「AdWords スクリプトを動かそう!」
– 安田政弘さん
? 「グローバルでも勝てるマーケッターを目指す」
– リブセンス 岩崎亮さん
? 休憩
? パネルディスカッション
– 安田政弘さん、岩崎亮さん、山田良太さん、杉原剛さん
? 質疑応答
46
パネルディスカッション
パネリスト
安田 政弘
パネリスト
岩崎 亮(株式会社リブセンス Ad Leader)
パネリスト
山田 良太(株式会社オロ マーケティングエンジニア)
モデレーター
杉原 剛(アタラ合同会社 代表取締役CEO)
47
パネリスト紹介:山田良太
2010年に株式会社オロにプログラマーとして入社。以後3年半、
自社のサービスであるERPパッケージの開発に携わったのちに、
同ERPパッケージのマーケティングチームを経て、Web広告運
用?Webマーケティングを行うチームの立ち上げに参加。プログ
ラマー経験を活かした、AdWords Script/API、Google Analytics
のトラッキングコード?カスタマイズ、タグマネージャーなどの
テクノロジー部分が得意領域。
AdWordsコミュニティや、GAプロダクトフォーラムに参加。
インタレストカテゴリ
48
モデレーター紹介:杉原剛
KDDI、インテル、オーバーチュア、グーグルを経て
2009年にアタラ合同会社を設立。広告系システム開発と
コンサルティングを事業とする。
APIが大好き。オーバーチュア、グーグル両社で
広告APIのエバンジェリストを自主的に担当。
AdWordsスクリプト、Google Apps Scriptの使いやすさに
感動し、少しづつ「工作」している(週末エンジニア風)。
でもエンジニアではありません!営業です!
49
質問1
AdWords スクリプト、初心者です。
どこから始めればいいの!?
どうやって学べばいいの!?
50
質問1
JavaScript1日講座とか
51
質問1
Google Apps Script動画講座とか
52
質問1
参考サイトとか?岩崎さんのスライドから
? Googleヘルプの英語版
https://developers.google.com/adwords/scripts/?hl=en
– 日本語版より情報量が圧倒的に多い。(文末ja→enに変えるだけ)
? FreeAdWordsScripts.com
http://www.freeadwordsscripts.com/
– 活用例が盛り沢山のサンプルスクリプトサイト。
? Optmyzr
http://www.optmyzr.com/scripts/
– 活用例が多い。サンプルは無いが有料版で手厚いサポート。
新しい良いサイトが立ち上がることも多いので、
定期的にウォッチする
スクリプトの仕様が更新され、サンプルコード
が古くなっているのには注意
53
質問1
書籍とか
アマゾンで「Google Apps Script」で検索!
54
質問1
ツールは?AWQL.me
55
質問2
AdWords スクリプト
AdWords API
自動化ルール
それぞれのすみ分け/使い分けは?
56
岩崎さんのスライドから
各種機能とのメリット?デメリット比較
① 自動化ルール ② AdWordsScript ③ AdWordsAPI
簡易さ
① > ② > ③
自由度
① < ② < ③
安定性
① > ② ≒ ③
簡易さ
自由度
安定性
57
岩崎さんのスライドから
各種機能との棲み分け
?自動化ルール
?機能上で出来る施策をやる
?AdWordsScript
?自動化ルールでは出来ない、
有用そうなものをやってみる
?AdWordsAPI
?定型化したものを移行していく
58
質問2
AdWords スクリプトの制限例:
? 複数アカウントの一括管理ができない
? 処理のタイムアウト制限(30分)がある
? キーワードプランナー系の機能が使用できない
? ディスプレイ広告関連の機能はまだ少ない
59
質問3
AdWordsスクリプト
Google Apps Script
で作ったもの、
便利な使い方、今後考えているアプリ、
いろいろ教えてください!
60
質問3
トピック例
? 入稿系?入札系?レポート系?
? 広告主企業としての使い方/代理店として
の使い方
? 組織での使い方
– MCC scriptの使い方
? Gooogleスプレッドシート、mySQL、
BigQueryなど汎用DBやクラウド
ストレージを使う場合の見極めは?
? 外部データ連動
– 在庫連動
– Twitter連動
– 天気?社内データなどトレンド連動
入札
レポー
ティング
入稿
61
質問4
パネリストのみなさんから参加者のみなさん
に一言アドバイスをお願いします。
62
質問4
とにかくサンプルコード使う!
そのままコピペ利用!
63
質疑応答
? 「AdWords スクリプトを動かそう!」
– 安田政弘さん
? 「グローバルでも勝てるマーケッターを目指す」
– リブセンス 岩崎亮さん
? 休憩
? パネルディスカッション
– 安田政弘さん、岩崎亮さん、山田良太さん、杉原剛さん
? 質疑応答
64
Thank you!

More Related Content

Unyoo.jp Meetup vol.3 AdWordsスクリプトに寄り添う

Editor's Notes

  1. http://plus.appgiga.jp/masatolan/2015/05/01/55888/
  2. ‘’