Перейти к содержимому
Назад в Академию

Сквозная аналитика: от клика до денег

10.06Веб-аналитика и GTM
Содержание статьи

Онлайн-школа аналитики, которая размечала ссылки по схеме 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_start120 000 ₸346150 000 ₸−30 000 ₸
Google Ads, cpc, course_start80 000 ₸186150 000 ₸10 000 ₸
Telegram-канал школы, social0 ₸8250 000 ₸30 000 ₸
Нет меток0 ₸5125 000 ₸15 000 ₸
Всего200 000 ₸6515375 000 ₸25 000 ₸

По цене заявки Meta выглядела прилично, 120 000 / 34 = 3 529 ₸, но по деньгам она ниже точки безубыточности (как её считают, в анализе эффективности): чтобы выйти в ноль, ей нужно 8 оплат в неделю, а было 6.

Чего этот отчёт не скажет

Возьмите студентку из разбора моделей атрибуции: она кликнула по видео в Instagram, через шесть дней нашла школу в поиске и оставила заявку. Форма школы сохраняет метки последнего перехода, поэтому её оплата стоит в строке Google Ads. Сколько оплат пропало бы без рекламы в Meta, отчёт не скажет: он раскладывает деньги по ссылкам, а не проверяет, что было бы без кампании.

К тому же цифр мало: шесть оплат против шести, и одна оплата сдвигает вклад кампании на 15 000 ₸. Поэтому по одной неделе Meta не выключают, а копят отчёт несколько недель. Если кампания и тогда в минусе, нужна ли она школе, покажет проверка с контрольной группой.

Где склейка ломается

При соединении таблиц две ошибки раздувают цифры, а третья их прячет.

Одна продажа - несколько денежных строк. Заказ могут оплатить частями, потом доплатить или вернуть часть денег. В выгрузке платёжного сервиса у такого заказа несколько строк, и если присоединить их к заявке как есть, одна продажа превратится в две или три. Поэтому деньги сначала сводят до одной строки на заказ, оплаты минус возвраты, и только потом присоединяют к заявкам.

Денежные строки одного заказа

Курс за 25 000 ₸, оплаченный частями

  1. Первая часть

    +15 000 ₸

  2. Доплата

    +10 000 ₸

  3. Итог заказа

    25 000 ₸ в одной строке

    Один заказ

Деньги сначала сводят до одной строки на заказ, оплаты минус возвраты, затем присоединяют к заявке.

Курс за 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

Export data from Google Analytics properties to BigQuery - Google Analytics

Видео на английском: как подключить выгрузку событий GA4 в BigQuery.

Нужна помощь с аналитикой вашего проекта?