Задача: реклама тратит деньги, а окупаемость не видно
Клиент — онлайн-школа, которая ведёт рекламу в Яндекс.Директе. Проблема была не в самой рекламе, а в том, что данные о ней жили в трёх разных местах. Расход по кампаниям — в рекламном кабинете. Лиды — в CRM и системе аналитики. Продажи и выручка — в отдельной системе, которая с рекламным кабинетом вообще никак не связана.
Пока эти три куска данных разрознены, посчитать окупаемость (ROMI) по конкретной кампании невозможно в принципе — не потому что цифр мало, а потому что они физически не сведены вместе. Тратишь X рублей на кампанию, а что эта кампания в итоге принесла — продажи, выручку, — видно только если вручную сопоставить три разных отчёта. Руками это делать раз в квартал ещё терпимо, а как ежедневную рутину — нереально.
Разрозненные данные — это не проблема нехватки аналитики, это проблема отсутствия единицы учёта. Пока расход, лиды и продажи не сведены в одну строку на одну кампанию, вопрос «что окупается» не имеет ответа — есть только три отдельных «примерно так».
Что я сделал: один свод вместо трёх систем
Решение было не в том, чтобы придумать новую метрику, а в том, чтобы навести порядок в уже существующих данных. Я собрал ежедневный свод в одной таблице Google Sheets — по каждой рекламной кампании сводится в одну строку: расход, количество лидов и продажи (выручка). Плюс производные — стоимость лида и окупаемость.
Ключевое условие — данные подтягиваются автоматически через скрипты и API, а не копируются руками каждый день. Ручной перенос цифр из одной системы в другую — это то самое узкое место, которое убивает регулярность: как только сведение становится рутинной ручной работой, его начинают откладывать, пропускать, а потом отчёт просто перестают вести. Автоматизация обновления убирает этот риск: таблица актуальна каждый день без чьего-либо участия.
Структура свода
| Столбец | Откуда | Зачем |
|---|---|---|
| Кампания | Яндекс.Директ | единица учёта, всё считается на её уровне |
| Расход | API рекламного кабинета | сколько потрачено за день/период |
| Лиды | CRM / Яндекс.Метрика | сколько заявок дала кампания |
| CPL | расход / лиды | стоимость одного лида по кампании |
| Продажи | система учёта продаж | сколько лидов закрылось в оплату |
| Выручка | система учёта продаж | сколько денег принесла кампания |
| ROMI | выручка / расход | окупилась кампания или нет |
Каждая строка этой таблицы — это ответ на вопрос «эта конкретная кампания зарабатывает или сжигает бюджет». Не общий отчёт «реклама вроде окупается», а конкретная цифра по конкретной кампании, которую можно сравнить с соседней строкой.
Зачем это нужно: решения по цифрам, а не на ощущениях
Когда все три куска данных лежат в одной строке, картина открывается сразу, без дополнительного анализа. Видно, у какой кампании стоимость лида в пределах нормы, а у какой она есть, но заявки не доходят до продажи — то есть проблема не в рекламе, а дальше по воронке. Видно, какая кампания формально даёт дешёвые лиды, но по деньгам в минус, потому что из этих лидов почти никто не покупает.
Это и есть практическая польза свода: убыточные кампании можно отключать сразу, не дожидаясь конца месяца и сведения отчётов постфактум, а прибыльные — масштабировать, пока конкуренты ещё считают вручную. Решение принимается по цифре в таблице, а не по ощущению «эта кампания вроде неплохо идёт».
- Собрать источники в одну строку. Расход из рекламного кабинета, лиды из CRM или Метрики, продажи из системы учёта — всё должно ложиться на один и тот же идентификатор кампании, иначе строки не совместимы друг с другом.
- Считать производные метрики автоматически. CPL и ROMI — это не то, что нужно пересчитывать в уме при взгляде на таблицу. Формулы в самой таблице считают их сразу, как только обновились исходные данные.
- Настроить автоматическое обновление. Скрипты и API подтягивают расход, лиды и продажи по расписанию — без того, чтобы кто-то вручную заходил в три разных интерфейса и переносил цифры.
- Смотреть на таблицу как на инструмент решений, а не архив. Свод нужен не для истории, а для того, чтобы каждый день можно было отключить убыточную кампанию и добавить бюджет прибыльной.
Почему автоматизация обновления важнее красоты отчёта
Соблазн в такой задаче — сделать красивый дашборд: графики, цветовая индикация, сводные листы. Но графики поверх ручных данных не решают исходную проблему — они просто украшают то же самое узкое место: если кто-то раз в неделю руками переносит цифры из трёх систем, отчёт живёт ровно до того момента, пока у этого человека есть время. Заболел, уехал, завалило другими задачами — и таблица перестаёт обновляться, а решения по рекламе снова принимаются вслепую.
Поэтому в этой задаче я в первую очередь довёл до автоматизма именно обновление данных, а не оформление таблицы. Голая таблица с формулами CPL и ROMI, которая обновляется сама каждый день, полезнее нарядного дашборда, который зависит от того, вспомнит ли кто-то его обновить.
Отчёт, который зависит от человеческой памяти, — это не отчёт, а разовая выгрузка с датой устаревания. Ценность сквозной аналитики не в форме таблицы, а в том, что она обновляется сама и остаётся актуальной, даже когда о ней временно забыли.
Результат и урок
После того как расход, лиды и продажи оказались в одной таблице с автоматическим обновлением, стало возможно то, чего не было раньше в принципе — ежедневно видеть окупаемость по каждой кампании и реагировать на неё сразу, а не по итогам месяца. Убыточные кампании отключаются, как только это видно в цифрах, а не когда накопится достаточно жалоб на бюджет.
Реклама без сквозной отчётности — это трата вслепую: деньги уходят, а куда именно они привели, узнаёшь постфактум, если вообще узнаёшь.
Главный вывод для любого, кто ведёт платную рекламу и хочет считать её окупаемость: сведите расход, лиды и продажи по каждой кампании в одну таблицу — кампания, расход, лиды, CPL, продажи, выручка, ROMI — и автоматизируйте обновление этих данных через скрипты и API. Без этого свода ROMI остаётся приблизительной оценкой раз в месяц. С ним — ежедневным инструментом, по которому реально принимаются решения о бюджете.