Онлайн-школа аналитики, которая размечала ссылки по схеме UTM-меток, неделю крутила рекламу: 120 000 ₸ ушло в Meta, 80 000 ₸ в поиск Google (цифры в уроке условные). Через две недели стартует поток, и владелец спрашивает, какая реклама окупилась. В рекламных кабинетах есть расход и цена заявки, в CRM - кто из записавшихся заплатил за курс. Ответ лежит между ними, и связывать эти данные придётся вам.
Что такое сквозная аналитика
Сквозная аналитика - это отчёт, где у каждой рекламной кампании видно расход, заявки, оплаты и выручку, а значит, и вклад после рекламы и ROMI. Чтобы его собрать, данные связывают в цепочку: расход кампании, клик с UTM-метками, заявка в CRM, оплата. Звенья держатся на идентификаторах, которые переходят из системы в систему, и по любой оплате можно дойти до кампании.
Сервис вроде Roistat можно купить, но склеивает он по тем же меткам и номерам, которые настраиваете вы. Вот цепочка одного покупателя, который пришёл с видео преподавателя в Instagram:
| Звено | Где лежит | Что записано | Как связано со следующим |
|---|---|---|---|
| Расход | Ads Manager | кампания course_start, объявление video_teacher, расход по дням | названия совпадают с utm_campaign и utm_content |
| Клик | адрес страницы курса | utm_source=ig, utm_medium=paid_social, utm_campaign=course_start, utm_content=video_teacher | форма копирует метки в скрытые поля |
| Заявка | CRM | заявка 058, метки, телефон | номер заявки записан в заказе |
| Заказ | сайт школы | course_order_57 на 25 000 ₸, заявка 058 | номер заказа уходит в платёжный сервис |
| Оплата | платёжный сервис | course_order_57 оплачен | уведомление приходит с номером заказа |
Один ID на все системы не нужен, у каждой свой номер. Нужно, чтобы следующее звено помнило предыдущее: заявка хранит метки, заказ - номер заявки, уведомление об оплате - номер заказа. Порвётся одно звено, и оплата окажется в отчёте без источника.
Метки сохраняются вместе с заявкой
Начинают с формы на сайте. В ней заводят скрытые поля, скрипт заполняет их метками из адреса страницы, и CRM кладёт их в карточку заявки рядом с телефоном. Если CRM пока нет, те же колонки ведут в таблице заявок.
В описании отчёта запишите, метки какого перехода сохраняет форма. Если их берут из адреса страницы, на которой отправили форму, заявке достаётся последний переход перед ней. Если их сохраняют в cookie при первом входе, это первый переход с метками. От этого зависит, в какую строку отчёта попадёт человек, который сначала кликнул по видео, а записался из поиска.
Заявку с сайта, у которой меток нет, так и записывают: «нет меток». Менеджер, который ставит «Instagram» на глаз, портит отчёт сильнее пустого поля, потому что угаданный источник потом не отличить от настоящего.
У звонков и WhatsApp меток нет совсем. Звонку в таблице заявок ставят phone, пришедшему по рекомендации - referral, но откуда человек узнал номер, эти значения не говорят. Клик по кнопке WhatsApp - ещё не заявка: человек мог открыть чат и ничего не написать. Чтобы источник дошёл до переписки, кнопка открывает ссылку с автоматическим сообщением, где в тексте стоит код кампании, или у каждого канала свой номер, на который пишут и звонят. Сопоставлять чат или звонок с кликом по времени - догадка, и такие заявки помечают в отчёте отдельно.
Номер заявки доходит до оплаты
Дальше заявку связывают с деньгами. Менеджер договорился с человеком и отправляет ему ссылку на оплату. В этот момент сайт создаёт заказ course_order_57 и записывает в него номер заявки 058. Платёжный сервис знает только номер заказа и сумму, с ними он и присылает уведомление «оплачено». Сервер проверяет уведомление об оплате, находит по номеру заказ, а через заказ заявку, и в CRM у неё появляются статус «Оплачено» и сумма.
Часть учеников школы платит переводом на Kaspi, и тогда статус ставит менеджер: в сделке записан номер заявки, а «Оплачено» ставят, когда деньги пришли на счёт.
Склеивать оплату с заявкой по имени, сумме или времени - гадание. Курс у всех стоит 25 000 ₸, и две оплаты в один вечер по сумме не различить. Телефон надёжнее, если привести его к виду +7 и десять цифр, но один номер бывает у мужа и жены, поэтому такие совпадения помечают отдельно.
Расходы выгружают из кабинетов по кампаниям
Остаётся расход на рекламу. Его выгружают по дням, с разбивкой по кампаниям и объявлениям. Таблицу Ads Manager экспортируют в CSV или XLSX, а в Google Ads значок скачивания над таблицей статистики сохраняет её в файл или в Google Таблицы. Обе выгрузки можно поставить по расписанию.
С заявками расходы связывают по названиям, поэтому названия в кабинетах совпадают с метками: кампания и в Google Ads, и в Meta называется course_start. В Meta utm_content заполняется сам через {{ad.name}}, но Meta подставляет имя, с которым объявление впервые опубликовали. Переименуете его после запуска, и в выгрузке будет новое имя, а в заявках старое. Если названия уже разошлись, заведите табличку соответствия: название в кабинете и метка.
Расход и выручку сводят в одной валюте и одном часовом поясе. Если кабинет ведётся в долларах, пересчитайте расход по курсу, о котором договорились с бухгалтерией, и напишите этот курс в отчёте.
Отчёт: выручка и вклад по кампаниям
Когда метки, номер заявки и расходы на месте, отчёт собирается так: заявки из CRM группируют по меткам, к ним по номеру заявки подтягивают оплаты, а рядом ставят расход кампании за ту же неделю. Оплаты школа считает по заявкам этой недели до старта потока.
Для вклада нужна ещё одна цифра. С продажи за 25 000 ₸ после комиссии платёжного сервиса и оплаты куратора школе остаётся 15 000 ₸. Это вклад одной продажи, а вклад после рекламы у кампании - вклад всех её продаж минус её расход.
| Кампания | Расход | Заявки в CRM | Оплаты | Выручка | Вклад после рекламы |
|---|---|---|---|---|---|
Meta, paid_social, course_start | 120 000 ₸ | 34 | 6 | 150 000 ₸ | −30 000 ₸ |
Google Ads, cpc, course_start | 80 000 ₸ | 18 | 6 | 150 000 ₸ | 10 000 ₸ |
Telegram-канал школы, social | 0 ₸ | 8 | 2 | 50 000 ₸ | 30 000 ₸ |
| Нет меток | 0 ₸ | 5 | 1 | 25 000 ₸ | 15 000 ₸ |
| Всего | 200 000 ₸ | 65 | 15 | 375 000 ₸ | 25 000 ₸ |
По цене заявки Meta выглядела прилично, 120 000 / 34 = 3 529 ₸, но по деньгам она ниже точки безубыточности (как её считают, в анализе эффективности): чтобы выйти в ноль, ей нужно 8 оплат в неделю, а было 6.
Чего этот отчёт не скажет
Возьмите студентку из разбора моделей атрибуции: она кликнула по видео в Instagram, через шесть дней нашла школу в поиске и оставила заявку. Форма школы сохраняет метки последнего перехода, поэтому её оплата стоит в строке Google Ads. Сколько оплат пропало бы без рекламы в Meta, отчёт не скажет: он раскладывает деньги по ссылкам, а не проверяет, что было бы без кампании.
К тому же цифр мало: шесть оплат против шести, и одна оплата сдвигает вклад кампании на 15 000 ₸. Поэтому по одной неделе Meta не выключают, а копят отчёт несколько недель. Если кампания и тогда в минусе, нужна ли она школе, покажет проверка с контрольной группой.
Где склейка ломается
При соединении таблиц две ошибки раздувают цифры, а третья их прячет.
Одна продажа - несколько денежных строк. Заказ могут оплатить частями, потом доплатить или вернуть часть денег. В выгрузке платёжного сервиса у такого заказа несколько строк, и если присоединить их к заявке как есть, одна продажа превратится в две или три. Поэтому деньги сначала сводят до одной строки на заказ, оплаты минус возвраты, и только потом присоединяют к заявкам.
Денежные строки одного заказа
Курс за 25 000 ₸, оплаченный частями
Первая часть
+15 000 ₸
Доплата
+10 000 ₸
Итог заказа
25 000 ₸ в одной строке
Один заказ
Деньги сначала сводят до одной строки на заказ, оплаты минус возвраты, затем присоединяют к заявке.
Недельный расход у каждой заявки. Если к каждой из 34 заявок Meta приписать расход кампании за неделю и сложить колонку, получится 4 080 000 ₸ вместо 120 000 ₸. Расход суммируют отдельно, по кампании и периоду, и ставят рядом с итогами по заявкам.
Заявки без пары. Заявки без меток и оплаты без найденной заявки не выбрасывают. У школы это строка «Нет меток»: пять заявок и одна оплата. Отфильтруйте её, и выручка в отчёте станет меньше той, что пришла на счёт, а через месяц кто-нибудь решит, что теряются платежи. Если строка растёт, ищите форму или ссылку, которая перестала передавать метки.
Раз в неделю три итога сводят с исходными системами: расход в отчёте - с суммой из двух кабинетов, заявки - с числом заявок в CRM за неделю, а выручку вместе с оплатами без найденной заявки - со всеми поступлениями за этот поток. У школы это 200 000 ₸, 65 заявок и 375 000 ₸, оплат без заявки не нашлось. Пока итоги не сошлись, выводы по кампаниям не делают.
Таблица, BigQuery или готовый сервис
Для первых проектов хватит Google Таблиц: лист заявок из CRM, лист расходов из двух кабинетов и лист отчёта, который собирает их формулами. Обновлять выгрузки раз в неделю - полчаса работы.
Когда кампаний десятки, а заявок сотни в неделю, вручную их без ошибок уже не свести, и данные переносят в базу. GA4 сам выгружает события в BigQuery, а заявки из CRM, расходы и оплаты подгружают туда отдельно.
Есть и готовые сервисы. В Битрикс24 есть раздел сквозной аналитики: расходы туда берутся из подключённого рекламного кабинета или вносятся вручную, а итог показывает отчёт «Окупаемость рекламы». Roistat на своём сайте пишет, что собирает расходы и выручку в одном окне. Прежде чем платить, найдите в списке интеграций сервиса свои кабинеты и CRM, а сверку трёх итогов делайте так же, как с таблицей.
Задание: сквозной отчёт по вашему тесту
Возьмите тест недели 2 трека «Старт» и таблицу, которую вы завели для учёта заявок. Если теста ещё не было, отправьте с тестового сайта три заявки по ссылкам с разными utm_content и соберите отчёт на них.
Выполнено 0 из 5
Если итоги не сошлись, начните со второго пункта. Когда в таблице заявок utm_content=problem, а в выгрузке объявление называется иначе, его переименовали после запуска. Впишите пару в табличку соответствия, а в следующем тесте называйте объявления до публикации.
Какое объявление лучше, такой отчёт не скажет: у центра подготовки к IELTS после теста было 11 заявок и трое на пробном уроке. Задание выполнено, если каждая заявка нашла своё объявление, а каждая оплата - свою заявку. Когда заявок станут сотни, тот же отчёт начнёт отвечать на вопрос владельца.
Видео: экспорт GA4 в BigQuery
Видео на английском: как подключить выгрузку событий GA4 в BigQuery.