NovaFit - моніторинг реклами Google Ads і Meta Ads
NovaFit крутить рекламу одночасно в Google Ads і Meta Ads, і до цієї системи стан кампаній перевірявся руками - у двох кабінетах, по черзі, коли до цього доходили руки. Тепер щоранку система сама забирає вчорашні цифри з обох рекламних кабінетів, кладе їх у Google Таблицю з готовим дашбордом, порівнює кожну кампанію з її ж медіаною за тиждень і, якщо CPA чи ROAS вийшли за поріг, пише про це в Telegram. Дорогий день видно наступного ранку, а не в кінці місяця.
Кому підходить: будь-якому бізнесу, що витрачає на рекламу відчутні гроші у двох і більше каналах - інтернет-магазинам, фітнес-клубам, школам, клінікам, сервісам за підпискою. Особливо тим, у кого немає штатного аналітика, а підрядник надсилає звіт раз на місяць.
Стек: Python, конектори до Google Ads API і Meta Marketing API, Google Sheets API як сховище й дашборд, aiogram для Telegram-бота, APScheduler для щоденного запуску.
- Python
- Google Ads API
- Meta Marketing API
- Google Sheets API
- aiogram
- APScheduler
Як влаштована система
Три частини, одна таблиця. Google Таблиця - і сховище, і дашборд: у неї лягають денні рядки по кампаніях, а оформлення, формули й графіки живуть прямо в ній. Модуль детекції читає ці ж рядки й вирішує, чи є відхилення. Telegram-бот показує зведення на запит і розсилає нові алерти. Щоранку о 09:00 за Києвом планувальник проганяє весь ланцюжок: забрати вчорашній день з Google Ads і Meta Ads - записати - перерахувати - перевірити - сповістити.
Цифри беруться напряму з рекламних кабінетів: конектор до Google Ads API забирає денні метрики по кампаніях з Google, конектор до Meta Marketing API - з Meta. Обидва ховаються за одним інтерфейсом з єдиним методом - віддати рядки метрик за період, - тому третій канал, скажімо TikTok Ads, додається ще одним класом, а сховище, детекція, бот і оформлення таблиці при цьому не змінюються.
1. Дашборд у Google Таблиці
Аркуш «Дашборд» зверстаний під екран 1920x1080, щоб його можна було відкрити на моніторі чи телевізорі в офісі і не гортати. Зверху - пʼять KPI за вчора (витрати, конверсії, CPA, ROAS, CTR), кожен з відхиленням від медіани за 7 днів. Нижче - зведення по каналах і таблиця кампаній: витрати, кліки, CTR, конверсії, CPA, ROAS, зміна до попереднього тижня і статус «У нормі» або «Критично».
Далі чотири графіки по днях - витрати, CPA, ROAS і конверсії, кожен у розрізі Google / Meta / разом - і журнал останніх алертів. Окремого BI-інструмента й ліцензії немає: клієнт відкриває звичайну таблицю у своєму акаунті, може відфільтрувати, скопіювати чи вивантажити що завгодно. Локаль - українська: суми в гривнях, десяткова кома, дати дд.мм.рррр.
2. Дані та формули
Під дашбордом - три робочі аркуші. «Дані» тримає один рядок на кампанію на день з усіма метриками; дохід і позначка алерту в ньому рахуються формулами, а не записуються кодом, тож будь-яке число можна перевірити кліком. «Щоденно» згортає ті самі рядки в денні агрегати по Google, Meta і разом. «Алерти» - журнал відхилень з датою, рівнем, значенням, медіаною і текстом повідомлення.
3. Як ловляться відхилення
Для кожної кампанії і кожного дня береться медіана CPA і ROAS за 7 попередніх днів - поточний день у вікно не входить - і поточне значення порівнюється з нею. Саме медіана, а не середнє: один аномальний день усередині вікна не зсуває базу, тож система не звикає до поганого.
Пороги два. «Увага» - CPA на 60 % вище медіани або ROAS на 40 % нижче, і лише якщо це тримається два дні поспіль: один поганий день - ще не інцидент. «Критично» - CPA на 120 % вище або ROAS на 60 % нижче, спрацьовує одразу; нуль конверсій при витратах теж критично. На кампанію за день формується один алерт: CPA основна метрика, ROAS додаткова.
4. Telegram-бот
Бот - те, що власник бачить щодня. Після /start чат підписується на алерти й отримує їх автоматично після ранкового оновлення. /report показує зведення за вчора по кожному каналу з позначками ✅ і ⚠️ проти медіани, /alerts - усі відхилення за 14 днів. У кожному повідомленні є посилання «Відкрити дашборд», тож від алерту до таблиці - один дотик.
Ключова логіка
- → База порівняння - медіана за 7 попередніх днів по кожній кампанії окремо, а не середнє по акаунту: дорога кампанія не маскується дешевою
- → Два рівні з різною чутливістю: «Увага» вимагає підтвердження другим днем, «Критично» спрацьовує одразу - менше шуму, але серйозне не пропускається
- → Дедуплікація за датою і кампанією: розсилаються лише нові алерти, повторний запуск не спамить старими
- → Google Таблиця замість BI: жодних ліцензій, дані лишаються в акаунті клієнта, формули можна перевірити
- → Формули пишуться в коді в en_US-синтаксисі й перекладаються під локаль таблиці перед записом - таблиця лишається українською
- → Google Ads і Meta Ads за одним інтерфейсом: конектори до обох API взаємозамінні, новий канал - ще один клас без змін у решті системи
Що вміє система
- → Щоденне автоматичне вивантаження метрик з Google Ads API і Meta Marketing API о 09:00 за Києвом
- → Дашборд у Google Таблиці під екран 1920x1080: KPI, канали, кампанії, чотири графіки, останні алерти
- → Порівняння кожного показника з медіаною за 7 днів прямо в KPI-плитках і таблицях
- → Статус кампанії «У нормі» або «Критично» з підсвіткою рядка
- → Аркуш даних з одним рядком на кампанію на день і формулами доходу та алерту
- → Денні агрегати по Google, Meta і разом на окремому аркуші
- → Журнал алертів з рівнем, метрикою, значенням, медіаною, відхиленням і часом фіксації
- → Детекція відхилень CPA і ROAS за ковзною медіаною з двома рівнями і правилом двох днів для «Уваги»
- → Telegram-бот: /report за вчора по каналах, /alerts за 14 днів, підписка й відписка від сповіщень
- → Автоматична розсилка лише нових алертів після кожного оновлення
- → CLI для ручних операцій: завантажити історію, додати день, перевірити, розіслати