Как контролировать расходы средств по группам кампаний — скрипт для Google Ads
Я уже рассказывал в Netpeak Journal о
Как работает модифицированный скрипт Spending control
Для контроля по группам кампаний необходимо сначала обозначить, какие именно кампании нужно проверять. Для этого используйте ярлыки Google Ads — специальные метки для выделения отдельных элементов аккаунта. Например, нужных вам групп кампаний. Список примененных ярлыков удобно хранить в отдельной таблице Google.
Что делает скрипт:
- получает список ярлыков;
- собирает данные по кампаниям с каждым из ярлыков в списке;
- сравнивает средние расходы за прошлую неделю со вчерашними тратами;
- если расходы за вчера выходят за рамки установленных ограничений, скрипт с помощью телеграм-бота отправляет об этом сообщение.
Вся эта процедура работает в цикле, то есть один скрипт по очереди обрабатывает все кампании, помеченные ярлыком.
Как подключить скрипт контроля расходов по группам кампаний
1. Создайте таблицу, где запишите значения ярлыков, которыми будете размечать кампании для контроля.
2. Создайте ярлыки и промаркируйте ими кампании. Для этого:
- отметьте кампании, для которых нужно добавить метку;
- нажмите Ярлык (Label), создайте новый ярлык (если его еще нет) и примените его к выбранным кампаниям.
При этом названия ярлыков в файле и в аккаунте должны совпадать. Иначе скрипт не сработает.
3. Внутри аккаунта Google Ads в «Инструментах и настройках», в разделе «Массовые действия» выбирайте «Скрипты».
4. Создайте новый скрипт.
Обратите внимание, скрипт создан под новый интерфейс Google Ads для работы со скриптами, в старом он функционировать не будет.
5. Вставьте в рабочую область скрипта код:
function main() {
var ss = SpreadsheetApp.openByUrl(
"https://docs.google.com/spreadsheets/d/1_4_vArWYcnu9SCP_r1Kdxp5TpXuQFRLe5kJNTlJr1sE/edit#gid=0");
//Ссылка на вашу таблицу. По ссылке доступен шаблон файла
var labels = [];
var nameColumn = 'A';
//Столбец с именем ярлыка
var min = 0.7;
// Нижний предел расходов, ниже которого должно отправляться уведомление. Тут 1 - нормальный уровень расходов, 0.7 - расходы меньше нормы на 30%
var max = 1.3;
// Верхний предел расходов, выше которого должно отправляться уведомление. Тут 1 - нормальный уровень расходов, 1.3 - расходы больше нормы на 30%
// Формирование массива ярлыков с кампаниями
var setLabel = function (rowNumber) {
var labelName = ss.getRange(nameColumn + rowNumber).getValue();
// Получение имени ярлыка
var label = AdsApp.labels().withCondition('Name CONTAINS "' + labelName + '"').get().next();
// Получение информации по ярлыку
var campaignIterator = label.campaigns().get();
// Получение кампаний по имени ярлыка
Logger.log(labelName)
Logger.log(campaignIterator.totalNumEntities())
var lastWeekCost = 0;
var yesterdayCost = 0;
if (campaignIterator.hasNext()) {
while (campaignIterator.hasNext()) {
var campaign = campaignIterator.next();
lastWeekCost += campaign.getStatsFor('LAST_WEEK_MON_SUN').getCost();
yesterdayCost += campaign.getStatsFor('YESTERDAY').getCost();
}
}
Logger.log("Расход за неделю по " + labelName + " составляет " + lastWeekCost + ". Расход за вчера составляет " + yesterdayCost);
var AvSpendsPerDay = lastWeekCost/7;
// Средний дневной расход за прошлую неделю
var difference = yesterdayCost/AvSpendsPerDay;
var DifPercentageHi = Math.round((difference-1)*100);
var DifPercentageLo = Math.round((1-difference)*100);
if (difference > max) {
sendTelegramMessage('В аккаунте ' + AdsApp.currentAccount().getName() + ' по кампаниям с меткой '+ labelName + ' расход за вчера превышает среднедневной на ' + DifPercentageHi + '%. Необходимо перепроверить кампании');
}
if (difference < min) {
sendTelegramMessage('В аккаунте ' + AdsApp.currentAccount().getName() + ' по кампаниям с меткой '+ labelName +' сократились расходы на ' + DifPercentageLo + '%. Необходимо перепроверить кампании');
}
if (ss.getRange(nameColumn + (rowNumber + 1)).getValue()) {
// Проверка наличия следующего ярлыка в таблице
setLabel(rowNumber + 1)
// Вызов функции для следующего ярлыка
}
return
}
if (ss.getRange(nameColumn + '2').getValue()) {
// Вызов стартового ярлыка где "2" - номер строки в которой записан первый ярлык
setLabel(2) // Вызов стартового ярлыка где "2" - номер строки в которой записан первый ярлык
}
}
function sendTelegramMessage(text) {
var CONFIG = {
// Токен надо получить у BotFather, создав нового бота
TOKEN: 'your_token_from_BotFather’,
// Напишите что-нибудь в чат вашему боту, после чего перейдите по ссылке https://api.telegram.org/bot<ТОКЕН>/getUpdates
// в ответном тексте найдите строку ..."chat":{"id":123456789,"first_name"... Нужно значение id.
CHAT_ID: 'your_chat_id'
};
var telegramUrl = 'https://api.telegram.org/bot' + CONFIG.TOKEN + '/sendMessage?chat_id=' + CONFIG.CHAT_ID + '&text=';
var message = encodeURIComponent(text);
var sendMessageUrl = telegramUrl + message;
var options = {
method: 'POST',
contentType: 'application/json'
};
UrlFetchApp.fetch(sendMessageUrl, options);
}
6. Вы можете корректировать верхний и нижний пределы трат в коде. По умолчанию скрипт реагирует на колебания больше чем 30% вверх и вниз.
7. В конце скрипта есть отдельная функция sendTelegramMessage. В коде указано, как с ней работать, но расскажу еще раз чуть подробнее.
Во-первых, вам понадобится телеграм-бот и его токен — специальный ключ, позволяющий управлять ботом и подключать его к сторонним сервисам.
Если у вас уже есть бот для работы с Google Ads, можно использовать его. Если же токена нет:
- найдите в Telegram @Botfather;
- пропишите команду /newbot;
- следуйте инструкции от Botfather и получите токен вашего бота.
Также вам нужно выяснить цифровой код чата, куда будут приходить уведомления от скрипта Spending control. Для этого:
- напишите новосозданному боту любое сообщение;
- после в строке браузера укажите URL https://api.telegram.org/bot<ТОКЕН>/getUpdates, где ТОКЕН — токен вашего бота, полученный у Botfather;
- в загруженном окне увидите ID чата.
ID чата пропишите в коде. Это может быть как отдельный чат, так и группа.
В моем случае удобнее получать уведомление в группу. Его видят все члены команды, работающие с проектом, и могут оперативно реагировать на критические изменения в аккаунте.
8. Авторизуйте и сохраните скрипт.
9. На странице скриптов настройте частоту запуска скрипта. Рекомендую запускать его раз в день, в первой половине дня.
Какие узкие места позволяет закрыть скрипт?
Данный скрипт я применяю в крупных аккаунтах, где множество рекламируемых категорий, и траты по ним необходимо отслеживать отдельно. В условиях четкого бюджетирования это крайне важно.
Модифицированный Spending control позволил оперативно скорректировать рекламу в таких ситуациях:
- неконтролируемый перерасход средств из-за изменений в рекламных кампаниях, сделанных в пятницу;
- массовое отклонение объявлений в аккаунте, из-за чего расходы резко сократились;
- по ошибке внесены низкие ставки, из-за чего сократились расходы в рекламе.
Благодаря скрипту и вы, начиная свой рабочий день, будете знать, какие аккаунты требуют внимания. И самое главное, ваши аккаунты будут находиться под ежедневным контролем.
По теме
Диджитализация АТБ. Комплексный онлайн-маркетинг для лидера ритейла Украины — кейс
Рассказываем как выстроить комплексную диджитал-стратегию
Как улучшить оценку качества целевой страницы в Google Ads — эксперимент Netpeak
Можно ли повысить оценку качества целевой страницы , если проставить конечные URL на уровне ключевого слова? Результаты исследования.
Свежее
Как легко запомнить пароли, пин-коды, телефоны и все важное
В статье поделюсь несколькими лайфхаками, которые помогут сохранить вашу память (и нервы!) и вовремя вспоминать, наконец, пин-коды банковских карт, исторические даты и другие важные вещи
Как оптимизировать конверсии для страниц приложения в App Store и Google Play
Какие поля и параметры имеют больше значения, и как выжать из них все
Как справляться с перегрузкой на работе — советы и действенные инструменты
В этой статье поделюсь лайфхаками, как наконец-то разобраться с входящим потоком задач и не выгореть от усталости