為 Google Ads 增加月預算花費上限

為 Google Ads 增加月預算花費上限

大家好,我是 applemint 的 Eric。

先前在〈從基礎到進階:好用 GOOGLE ADS SCRIPTS 彙整〉中,曾經分享了幾個 applemint 自己常用的 Google Ads Scripts。
今天,我們將針對其中的「月預算花費上限」來做解說。

儘管 Google Ads 可以針對個別廣告活動設定預算上限,
但目前並沒有一個好方法可以根據廣告帳號為單位,進行預算控管。
這個指令碼,便是要用來解決這個問題。

指令碼範例

var CUTOFF_COST = 80000; //月預算上限
var CUTOFF_LABEL = "Total Spend cutoff"; //達到月預算上限時,關閉有標籤的廣告活動

function main() {
var label = AdsApp.labels().withCondition("Name='" + CUTOFF_LABEL + "'").get().next();
if (AdsApp.currentAccount().getStatsFor("THIS_MONTH").getCost() > CUTOFF_COST) {
    var campaignIterator = label.campaigns().get();
    while (campaignIterator.hasNext()) {
    var campaign = campaignIterator.next();
    campaign.pause();
}}}

指令碼說明

第一行與第二行是最主要需要更動的地方,
CUTOFF_COST 代表該月所要設定的預算上限,
CUTOFF_LABEL 則是要關閉的廣告活動。

第二部分則是程式碼主要執行的工作。
首先,透過 AdsApp.labels().withCondition,
選擇標籤名稱包含 Total Spend cutoff 的廣告活動。
接著,如果當前帳號 (currentAccount()) 該月份的預算大於預算上限時,
那麼系統便會暫停所有包含 Total Spend cutoff 的廣告活動。

這邊可以將 THIS_MONTH 換成下列的時間區間:

TODAY, YESTERDAY, LAST_7_DAYS, THIS_WEEK_SUN_TODAY, LAST_WEEK, LAST_14_DAYS, LAST_30_DAYS, LAST_BUSINESS_WEEK, LAST_WEEK_SUN_SAT, THIS_MONTH, LAST_MONTH, ALL_TIME。

如果計算區間並不屬於上述的預設區段,那也可以自行指定,如:

AdsApp.currentAccount().getStatsFor(“20200710”,”20200809”).getCost()

稍微進階的作法,則可以透過 JavaScript 的 Date 來自動抓取「每月 10 日至隔月 9 日」的時間。

function main() {
    var label = AdsApp.labels().withCondition("Name='" + CUTOFF_LABEL + "'").get().next();
    var date = new Date();
    var year = date.getFullYear();
    var day = date.getDate();
    var month = day < 10 ? date.getMonth() : date.getMonth()+1;
    if (AdsApp.currentAccount().getStatsFor({year: year, month: month, day: 10},{year: year, month: month+1, day: 9}).getCost() > CUTOFF_COST) {
        var campaignIterator = label.campaigns().get();
        while (campaignIterator.hasNext()) {
            var campaign = campaignIterator.next();
            campaign.pause();
        }
}}

另外,日前同事注意到,原本的指令碼無法停止 YouTube 影片廣告活動與購物廣告活動。上網搜尋資料後,發現影片廣告活動與購物廣告活動需要使用另外的方法 (videoCampaigns() 以及 shoppingCampaigns()) 才能取得。

因此,如果使用購物廣告或 YouTube 廣告的話,可以再將程式碼做以下調整:

function main() {
    var label = AdsApp.labels().withCondition("Name='" + CUTOFF_LABEL + "'").get().next();
    var date = new Date();
    var year = date.getFullYear();
    var day = date.getDate();
    var month = day < 10 ? date.getMonth() : date.getMonth()+1;
    if (AdsApp.currentAccount().getStatsFor({year: year, month: month, day: 10},{year: year, month: month+1, day: 9}).getCost() > CUTOFF_COST) {
        var campaignIterator = label.campaigns().get(),
            videoIterator    = label.videoCampaigns().get(),
            shoppingIterator = AdsApp.shoppingCampaigns()
                             .withCondition("LabelNames CONTAINS_ANY ['" + CUTOFF_LABEL + "']")
                             .get();
        while (campaignIterator.hasNext()) {
            var campaign = campaignIterator.next();
            campaign.pause();
        }
        while (videoIterator.hasNext()) {
              var campaign = videoIterator.next();
              campaign.pause();
        }
        while (shoppingIterator.hasNext()) {
              var campaign = shoppingIterator.next();
              campaign.pause();
        }
}}

注意事項

在使用上述指令碼以前,除了需要確認你有廣告帳號的管理權限外,
必須特別注意「新增標籤」這個步驟。
曾經我們在協助一位客戶設置此代碼時,因為沒有新增標籤,
導致該月最後超出約新台幣 1,000 元的花費。

此外,這個指令碼只負責「暫停」廣告活動,避免繼續花費,
但是並不會「開啟」廣告活動。
邏輯上可以撰寫額外的指令碼,
在進入下一個廣告週期時,重新開啟廣告活動,
但我認為這部分涉及與客戶溝通,不宜貿然自動開啟。

參考資料

從這裡聯絡 applemint!

Eric Chuang

相關文章

與我們聯繫