Как контролировать расходы средств по группам кампаний — скрипт для 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 позволил оперативно скорректировать рекламу в таких ситуациях:
- неконтролируемый перерасход средств из-за изменений в рекламных кампаниях, сделанных в пятницу;
- массовое отклонение объявлений в аккаунте, из-за чего расходы резко сократились;
- по ошибке внесены низкие ставки, из-за чего сократились расходы в рекламе.
Благодаря скрипту и вы, начиная свой рабочий день, будете знать, какие аккаунты требуют внимания. И самое главное, ваши аккаунты будут находиться под ежедневным контролем.
Свежее
Обзор изменений в GA4: различие между ключевыми событиями (Key events) и конверсиями (Conversions)
Увидели оповещение в GA4 об изменении в конверсиях? Давайте разбираться что именно изменилось и как это повлияет на вашу аналитику
Как добиться роста органического трафика на 195% за полгода в высококонкурентной нише — кейс BAYADERA
Показываем на практике как повысить видимость сайта и небрендовый органический трафик
Кто такой конечный пользователь, и Почему он важен
Он нужен не только для настройки рекламы, но и при разработке продукта или услуги. Разбираемся, кто он такой и как его найти