Як контролювати витрати коштів по групах кампаній — скрипт для 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. На сторінці скриптів налаштуйте частоту запуску вашого сценарію. Рекомендую запускати його раз на добу, бажано вранці.
Які вузькі місця дозволяє закрити скрипт?
Цей скрипт я застосовую у великих акаунтах. Де безліч рекламованих категорій, витрати на які необхідно відстежувати окремо. В умовах чіткого бюджетування це дуже важливо.
У роботі скрипт дозволив оперативно скорегувати рекламу у таких ситуаціях:
- неконтрольоване перевищення витрат через зміни в рекламних кампаніях, котрі зробили в п’ятницю;
- масове відхилення оголошень в акаунті, через що витрати різко скоротилися;
- помилково внесені низькі ставки, через що скоротилися витрати на рекламу.
Завдяки скрипту і ви, починаючи свій робочий день, знатимете, які облікові записи вимагають уваги. І найголовніше, ваші акаунти будуть під щоденним контролем.
Свіжі
Mobile-First Indexing. Усе, що потрібно знати про індексацію сайту для мобільних пристроїв
Що таке індексація насамперед для мобільних пристроїв та який її вплив на ваш сайт? Покращуйте свою мобільну індексацію за допомогою цього посібника
Як вийти на ROMI 5477,3% у перший місяць співпраці — кейс PUMA з email-маркетингу
І відновити комунікацію з клієнтами після піврічної паузи
Тенденції дизайну в Україні та світі на 2025 рік
Що буде популярним, а що забудеться вже за кілька місяців? Розбираємо і наводимо приклади