Google Ads Скрипт управления бюджетом аккаунта

Все знают, что с октября 2017 года кампании в Google Ads могут расходовать в два раза больше денег, чем задано в их дневном бюджете. Существуют разные виды скриптов для Adwords, которые позволяют проверять расход кампаний и останавливать их когда они выходят за рамки заданного бюджета. Однако мы столкнулись с проблемами у всех найденных нами скриптов:

  1. При типе кампании Search with Display Select функция getCost не учитывает расход кампании в КМС.
  2. Аналогичная ситуация с Youtube кампаниями, где нужно вызывать отдельную API функцию, чтобы получить расход.

Поэтому мы написали для себя скрипт, который использует функцию report и получает суммарный расход по аккаунту, и учитывает все типы кампаний и мест размещения. Он отлично подходит когда вам нужно:

  1. Следить за дневным расходом аккаунта и быть уверенным что вы не потратите в 2 раза больше от запланированных бюджетов.
  2. Следить за недельным или месячным расходом, особенно это актуально когда у вас расход в месяц подтверждается актами, с заранее согласованными в них суммами.

Данный скрипт технически делает следующие операции:

  1. Проверяет расход аккаунта за заданный вами в настройках скрипта временной промежуток, день, неделя, месяц и т.д.
  2. Если расход больше заданного вами в настройках скрипта значения, он останавливает активные кампании.
  3. Далее скрипт по-прежнему будет делать проверки, и когда увидит что настал новый день, неделя, месяц и соответственно у нас есть заново бюджет то включит обратно компании, которые получали показы перед паузой.

В принципе пункты 2 и 3 вы можете настроить как вам нужно, например добавить условие, чтобы не останавливать Бренд кампанию, или включать обратно не все кампании, а с определёнными названиями. Основной смысл этого скрипта в 1 пункте и функции report которая точно показывает весь расход аккаунта и любого типа кампаний в нём.

function main() {

var budget = 10000;//set target budget value
var report = AdWordsApp.report(‘SELECT Cost ‘ + ‘FROM ACCOUNT_PERFORMANCE_REPORT ‘ +
‘DURING THIS_MONTH’);//choose: TODAY YESTERDAY LAST_7_DAYS LAST_WEEK LAST_30_DAYS THIS_MONTH LAST_MONTH ALL_TIME

var rows = report.rows();//log actual account costs
while (rows.hasNext()) {
var row = rows.next();
var cost = row[‘Cost’];
Logger.log(cost);
}

var EnabledCampaignsList = [];//get currently enabled campaigns list
var campaignIterator1 = AdWordsApp.campaigns().withCondition(“Status = ENABLED”).get();
while (campaignIterator1.hasNext()) {
var campaign = campaignIterator1.next();
EnabledCampaignsList.push(campaign);
}

if (cost > budget){//pause enabled campaigns if actual account costs > target budget value
for (var i = 0; i < EnabledCampaignsList.length; i++) {
var campaign = EnabledCampaignsList[i];
Logger.log(campaign.getName())
campaign.pause();
}
}

var WasEnabledCampaignsList = [];//get campaigns with impressions before list
var campaignIterator2 = AdWordsApp.campaigns().withCondition(“Impressions > 0”)
.forDateRange(“LAST_7_DAYS”).get();//choose date range YESTERDAY LAST_7_DAYS LAST_30_DAYS for impressions > 0 rule
while (campaignIterator2.hasNext()) {
var campaign = campaignIterator2.next();
WasEnabledCampaignsList.push(campaign);
}

if (cost < budget){//enable campaigns with impressions before if actual account costs > target budget value
for (var i = 0; i < WasEnabledCampaignsList.length; i++) {
var campaign = WasEnabledCampaignsList[i];
Logger.log(campaign.getName())
campaign.enable();
}
}

}

Scroll to Top