Як контролювати витрати коштів по групах кампаній — скрипт для 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. Це значення вставляємо замість “your_chat_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. У коді вказано, як з нею працювати, але розповім ще раз докладніше.
По-перше, вам знадобиться телеграм-бот і його токен — спеціальний ключ, що дозволяє керувати ботом і підключати його до сторонніх сервісів.
Якщо ж токена немає:
- знайдіть у Telegram @Botfather;
- пропишіть команду /newbot;
- дотримуйтесь інструкції, яку дає Botfather, та отримайте токен вашого бота.
Також вам потрібно з’ясувати цифровий код чату, куди будуть надходити повідомлення від скрипта Spending control. Для цього:
- напишіть новоствореному боту будь-яке повідомлення;
- після в рядку браузера вкажіть URL https://api.telegram.org/bot<ТОКЕН>/getUpdates, де ТОКЕН — токен вашого бота, отриманий у Botfather;
- у завантаженому вікні побачите ID чату.
ID чата пропишіть у коді. Це може бути як окремий чат, так і група.
У моєму випадку зручніше отримувати повідомлення в групу. Його бачать всі члени команди, котрі працюють з проєктом. І ми маємо змогу оперативно реагувати на критичні зміни в акаунті.
8. Авторизуйте і збережіть скрипт.
9. На сторінці скриптів налаштуйте частоту запуску вашого сценарію. Рекомендую запускати його раз на добу, бажано вранці.
Які вузькі місця дозволяє закрити скрипт?
Цей скрипт я застосовую у великих акаунтах. Де безліч рекламованих категорій, витрати на які необхідно відстежувати окремо. В умовах чіткого бюджетування це дуже важливо.
У роботі скрипт дозволив оперативно скорегувати рекламу у таких ситуаціях:
- неконтрольоване перевищення витрат через зміни в рекламних кампаніях, котрі зробили в п’ятницю;
- масове відхилення оголошень в акаунті, через що витрати різко скоротилися;
- помилково внесені низькі ставки, через що скоротилися витрати на рекламу.
Завдяки скрипту і ви, починаючи свій робочий день, знатимете, які облікові записи вимагають уваги. І найголовніше, ваші акаунти будуть під щоденним контролем.
Свіжі
Як відстежувати події в Google Analytics 4 через DebugView
Покрокова інструкція до активації та використання DebugView
Як перенести сайт на новий домен і збільшити органічний трафік на 460% — кейс adam.ua
Показуємо всі етапи переїзду сайту на національний домен
Як справлятися з перенавантаженням на роботі — поради й дієві інструменти
У цій статті поділюся лайфхаками, як нарешті розібратися з вхідним потоком завдань і не вигоріти від втоми