Yahoo!広告 スクリプトでキャンペーンの配信設定を自動化しよう
広告運用業務に関わる皆さん、Yahoo!広告の1日の予算、つまり日予算を正しく変更していますか?広告予算が増額や減額したタイミングや配信ペースに合わせて日予算を調整することで、広告の成果が最大化されます。
たとえば、1か月の予算が30万円の場合、単純に考えると1日の予算は「30万円÷30日=1万円」です。しかし、この金額はあくまで平均です。日々の広告配信結果を見ながら入札を調整することで、日予算を使い切れない日もあるかもしれません。
ですが、毎日配信金額を確認して、残りの予算を残りの日数で割って日予算を変更するのはめんどくさいですよね。自動で適正予算を計算してくれて、Yahoo!広告に自動で設定&反映してくれる方法があれば、超便利だと思いませんか?
そこで、今回はGoogleスプレッドシートとYahoo!広告 スクリプトを使って日予算を自動で計算して変更する方法を解説します。Yahoo!広告 スクリプトを学んで広告運用を効率的に行っていきましょう!
Yahoo! 広告スクリプトで超時短!日予算を自動で更新
今回紹介するYahoo!広告 スクリプトを用いることで、管理画面へのログインや管理画面上での設定作業を自動化できます。今回はまず、Yahoo!検索広告の日予算設定をゴールにしましょう。

Yahoo!広告の日予算変更作業を自動化するために用意するもの
今回紹介するスクリプトはYahoo!検索広告の広告配信が行われており、本連載の第4回で解説した日別レポートがスプレッドシートに出力できることが前提で動作する仕様です。今回もテスト用のスプレッドシートを以下に準備しました。必ず自分のGoogle ドライブに複製してご利用ください。
- Google スプレッドシート(お試し用)
なお、日別レポートを出力するためのスクリプトは以下のものをお使いください。スクリプトを実行する際は、スプレッドシートのIDの更新を忘れないようにしてください。
function main(){ var spreadsheet = SpreadsheetApp.openById('スプレッドシートのID'); var sheet = spreadsheet.getSheetByName('raw'); sheet.clear(); var today_g = new Date(); var yesterday_g = new Date(today_g.getTime() - (24 * 60 * 60 * 1000)); var yesterday = Utilities.formatDate(yesterday_g, 'Asia/Tokyo', 'yyyyMMdd'); Logger.log(yesterday); const accountId = AdsUtilities.getCurrentAccountId(); const report = AdsUtilities.getSearchReport({ accountId: accountId, fields: ['DAY', 'CAMPAIGN_NAME', 'CAMPAIGN_ID', 'IMPS', 'CLICKS', 'COST', 'CONVERSIONS'], reportDateRangeType:'CUSTOM_DATE', dateRange: { startDate: '20240101', endDate: yesterday }, reportType: 'CAMPAIGN', reportSkipColumnHeader : "FALSE", }).reports[0].rows; sheet.getRange('A1').setValues(report); }
ここから日予算の自動変更の準備に入ります。複製したスプレッドシートに戻って、以下の手順に進みましょう。
- スプレッドシートを開き、「raw」のタブに既存のキャンペーンのデータが反映されているのを確認する
※事前に日別レポートを出力しておきましょう - 「当月予算進捗」のタブで今日の日付(C3)、開始日(B7)、終了日(C7)、キャンペーン名(D7)、予算(F7)を入力
- 適正日予算(J7)が算出される
さて、適正日予算が算出されたら、Yahoo!広告 スクリプトのコードを準備します。以下のサンプルコードをコピーしましょう。このとき、()内の「スプレッドシートのID」は複製したスプレッドシートのIDに書き換えてください。IDはスプレッドシートのURLの「https://docs.google.com/spreadsheets/d/」から「/edit#gid=~」の間です。
function main() { var spreadsheet = SpreadsheetApp.openById('スプレッドシートのID'); var sheet = spreadsheet.getSheetByName('当月予算進捗'); var lastRow = sheet.getLastRow(); if (lastRow == 6) { Logger.log('スプレッドシートにキャンペーンが存在しません.'); return; } var range = sheet.getRange(7, 2, lastRow-6, 9).getValues(); const accountId = AdsUtilities.getCurrentAccountId(); let campaignArray = []; for (let i = 0; i < lastRow-6; i++) { let setCampaign = { accountId: accountId, campaignId: range[i][3], budget: { amount: range[i][8] }, }; campaignArray.push(setCampaign); } const campaignsSet = Search.CampaignService.set({ accountId: accountId, operand: campaignArray, }).rval; for (let i = 0; i < campaignsSet.values.length; i++) { if (campaignsSet.values[i].operationSucceeded) { let campaign = campaignsSet.values[i].campaign; Logger.log('campaignId-> ' + campaign.campaignId + ', campaignName-> ' + campaign.campaignName + 'は更新されました。'); } else { let errorList = campaignsSet.values[i].errors; errorList.forEach(function (element) { if (element.code == 'I0001' && element.details[0].requestKey.includes('campaignId')) { Logger.log('campaignId-> ' + element.details[0].requestValue + 'は存在しません。'); } else if (element.code == '210307' && element.details[0].requestKey.includes('budget/amount')) { Logger.log('campaignId-> ' + campaignArray[i].campaignId + ' budget-> ' + element.details[0].requestValue +': キャンペーンの日予算が、広告グループまたはキーワードの入札額よりも低く設定されています。'); } else { Logger.log('campaignId-> ' + campaignArray[i].campaignId + 'は更新できませんでした。'); } }); } } }
スクリプト登録手順
ここから手順を説明していきます。
Yahoo!広告にログインする
まず、Yahoo!広告アカウントにログインします。
※今回はYahoo!広告の検索広告で機能するスクリプトを実行します。
Google アカウントと連携する
※すでに連携が完了している場合はスキップしてください。
右上のメニューの「ツール」から「Yahoo!広告 スクリプト」をクリックします。
スクリプトの一覧ページが表示されました。Google アカウントと連携するために右上の「外部ツール連携」をクリックします。
外部ツール連携ページが表示されました。「Sign in with Google」をクリックします。
アカウント選択画面が表示されます。複製したスプレッドシートを所有しているGoogle アカウントをクリックします。
Yahoo!広告 スクリプトがGoogle アカウントにアクセスすることが求められます。問題なければ「すべて選択」にチェックを入れて「続行」をクリックします。
連携が完了するとステータス欄にチェックマークがつきます。続いて「スクリプト」タブをクリックします。
スクリプトを設定
「新規作成」をクリックします。
Yahoo!広告 スクリプトを登録する画面が表示されました。
スクリプト名を「日予算更新」として、先述したサンプルコードを記述します。スプレッドシートのIDを変更することを忘れないでください。
「保存」をクリックします。
「保存」クリック後に「承認」ボタンが表示されます。「承認」をクリックします。
Yahoo!広告へのログインが求められますので、Yahoo!広告アカウントにアクセスしたときと同じようにログインします。
ログインが完了すると、スクリプトがYahoo!広告にアクセスすることを許可するよう求められます。「承認」をクリックします。
スクリプト登録の画面に戻ると「実行」ボタンが現れます。「実行」をクリックします。
※実際にキャンペーンの日予算が変更されますのでご注意ください。
ブラウザ上部でスクリプトを実行して問題ないか再確認の通知が表示されます。「OK」をクリックします。
数十秒で実行が完了し、ステータスに成功と表示されます。
Yahoo!広告の管理画面上でキャンペーンの日予算が変更されていることを確認して完了です。
実行スケジュールを設定
スクリプトが上手く動いたのを確認したら、次は日予算を更新する頻度を設定します。実行頻度が「未設定」となっている箇所をクリックします。
実行頻度を設定する画面が表示されました。
「毎日」にチェックをして実行したいタイミングを設定します。今回は9:00にしました。設定できたら「保存」をクリックします。
スクリプト一覧画面で日別レポートの実行頻度が「毎日 09:00」になっていることを確認できたら完了です。これで、定期的にレポート取得が行われるようになります。
【もっと知りたい人向け】スクリプトには何が書いてあったの? サンプルコードの解説
無事に自動処理はできたでしょうか? ここから先は今回の記事で使ったサンプルコードには何が書いてあったのか、分解して解説していきます。このサンプルコードでは、以下の5つの処理を行っています。
- スプレッドシートの情報を取得
- シートにキャンペーン情報を確認
- シートからキャンペーンIDと日予算を取得し変更するキャンペーンを指定
- 指定したキャンペーンの日予算を変更
まず、「①スプレッドシートの情報を取得」の部分はスプレッドシートから取得してくる情報を指定しています。以下のコードではスプレッドシートのIDとシート名「当月予算進捗」から情報を取得するという指示です。
var spreadsheet = SpreadsheetApp.openById('スプレッドシートのID'); var sheet = spreadsheet.getSheetByName('当月予算進捗');
次に、「②シートにキャンペーン情報を確認」の「getRange」では、スプレッドシートのデータの取得範囲を指定しています。
var lastRow = sheet.getLastRow(); if (lastRow == 6) { Logger.log('スプレッドシートにキャンペーンが存在しません.'); return; } var range = sheet.getRange(7, 2, lastRow-6, 9).getValues();
データ取得範囲は「getRange(開始行, 開始列, 行数, 列数)」と表すことができ、開始の行列とそれを起点とした範囲を指定します。今回は「getRange(7, 2, lastRow-6, 9)」と記述していますので、下図のような指定をしています。
次の「③シートからキャンペーンIDと日予算を取得し変更するキャンペーンを指定」では、取得した範囲の中で特定の要素を指定してデータを取得し、日予算を更新するための型に当てはめています。
const accountId = AdsUtilities.getCurrentAccountId();
let campaignArray = [];
for (let i = 0; i < lastRow-6; i++) {
let setCampaign = {
accountId: accountId,
campaignId: range[i][3],
budget: {
amount: range[i][8]
},
};
campaignArray.push(setCampaign);
}
ここで使用している「range」では、「getRange」で取得した範囲の中で、さらに特定の要素を指定します。表記は「range[縦方向の位置][横方向の位置]」です。注意点として、位置を指定する際の値が0から始まることが挙げられます。今回は、以下のような記述で指定しています。
range[0][3]…キャンペーンID
range[0][8]…適正日予算
「getRange」や「range」の処理を理解することで、「当月予算進捗」シートに行や列の追加した場合でも、スクリプトを柔軟に変更できるようになったのではないでしょうか。なお、本スクリプトでは1キャンペーンのみの変更を行っていますが、8行目以降にキャンペーンを追加した場合は複数キャンペーンの日予算変更にも対応できます。
Yahoo!広告 スクリプトの作成に困ったら
LINEヤフー社では、Yahoo!広告 スクリプト Developer CenterでYahoo!広告 スクリプトに関する情報を発信しています。
サンプルスクリプトも充実していますので、是非参考にしてみてください。
まとめ
Yahoo!広告 スクリプトでは、広告運用において重要な作業の一つである日予算変更を自動化することが可能です。特に複数キャンペーンを運用している場合、設定しようとした日予算を誤って別のキャンペーンに適用してしまうこともあるかもしれません。設定を自動化することで属人性を排除することができ、仕組みに頼った広告運用を実現できます。
Yahoo!広告 スクリプトを活用して、日々のレポート作成作業や管理画面の操作を効率化していきましょう。
ソーシャルもやってます!