Сквозная аналитика: визит, заявка, сделка. Кейс OdesSeo

КЕЙС: Сквозная аналитика агентства — от визита на сайт до сделки в CRM

Клиент — агентство, которое продаёт сложную B2B-услугу с длинным циклом: от первого касания до подписанного контракта проходят недели, а чаще месяцы. Заявки приходят из десятка источников: отраслевые каталоги, органический поиск, соцсети, площадки с портфолио, статьи — и всё чаще AI-ассистенты. Команда видела трафик в Google Analytics и сделки в CRM — оставалось соединить эти два мира в одну картину, чтобы на главный вопрос бизнеса — какой канал приводит не посетителей, а клиентов — отвечали данные, а не догадки.

Собрали меньше чем за месяц с момента получения доступов: сквозную аналитику от первого визита на сайт до сделки в CRM, с собственным дашбордом, который обновляется каждый день и принадлежит клиенту вместе со всеми данными. Рассказываем, как это устроено.

Кейс публикуем в вайтлейбл-формате, по договорённости с клиентом: без названия компании и без её показателей. На снимках скрыта айдентика, числа размыты, названия стадий CRM обобщены — на устройство инструмента это не влияет, а именно оно здесь и интересно.

Технологии проекта

  • Сбор данных: Google Analytics 4 — события, Data API для истории, Admin API; Google Tag Manager — теги, триггеры, куки первой стороны, API публикации; Google Search Console — массовая выгрузка (bulk export)
  • Хранилище и обработка: Google BigQuery в облаке клиента, локация EU; Два слоя данных: core (нормализованные события и сессии) → marts (витрины); Standard SQL, сшивка истории с живым потоком по контрольной дате
  • CRM: Pipedrive API — служебные поля сделки, стадии, история переходов
  • Дашборд: Самодостаточный HTML / CSS / JavaScript — без конструкторов и лицензий; SVG-графики, пересчёт периодов и сравнение прямо в браузере; Айдентика клиента: её шрифт и цвета
  • Сайт клиента: Современный JS-фреймворк — интеграция через dataLayer и куки первой стороны
  • Инфраструктура: Python — загрузка данных, сборка дашборда и документов; Git — версии кода и документов; Ежедневная автоматизация: пересборка, контрольные суммы, свежесть данных, целостность стыка

1. Вводная часть

1.1. О клиенте и задаче

Длинный цикл продажи означает, что путь человека растянут во времени: он может прочитать статью, вернуться через месяц из каталога, ещё раз зайти напрямую — и только тогда оставить заявку. Поэтому вопрос «откуда пришёл этот клиент» здесь касается каждой сделки отдельно, а не статистики в целом.

Набор инструментов у клиента уже был: GA4 и Google Tag Manager на сайте, Search Console, CRM с собственной воронкой продаж. Каждый хорошо отвечал на свой вопрос — оставалось научить их отвечать на общий: соединить трафик со сделками, а сделки — с источниками.

Задачу сформулировали двумя вопросами:

  • Какой канал приводит клиентов, а не просто сессии?
  • На каком шаге формы люди останавливаются — и что с этим можно сделать?

Договорились об объёме: свести данные в одно место, сшить визиты со сделками и собрать дашборд, который отвечает на эти вопросы каждый день — без ручных выгрузок и без конструкторов отчётов.

1.2. Особенности проекта

Пять систем, которые надо свести в одну картину. GA4, GTM, Search Console, CRM и сам сайт. Данные надо было не «подключить», а привести к общему знаменателю: один человек — один идентификатор насквозь.

История глубже, чем показывает интерфейс GA4. Для сравнения года с годом и честной оценки сезонности нужны годы, а не месяцы. Поэтому историю забирали отдельно через API и сшивали с живым потоком.

Точность важнее объёма. Там, где конверсий тысячи, погрешность в несколько процентов незаметна. Здесь каждая сделка видна отдельной строкой, поэтому атрибуция должна быть точной: из неё следует ответ на вопрос «куда вкладывать».

Данные принадлежат клиенту. Договорились об этом сразу: всё живёт в облачном проекте самого клиента. Мы работаем в его проекте, а не забираем данные к себе. Всё собранное остаётся у клиента навсегда, независимо от того, кто работает с данными дальше.

Сайт многостраничный, форма двухшаговая, и форм несколько. Кнопка в хедере, модальное окно, встроенная форма на странице контактов. Формы рисуются на лету и имеют два шага, поэтому события надо отправлять из кода сайта, а не угадывать по кликам. Значит, разработчик клиента — полноправный участник проекта.

2. Работа над проектом

2.1. Фундамент: все данные в одном месте

Начали с инвентаризации: что собирается, куда, с какими настройками, у кого есть доступы. Наименее эффектная часть — и именно она определяет, выйдет ли остальное. Провели ревизию контейнера GTM и событий GA4, согласовали с клиентом, какой ресурс GA4 становится основным для выгрузки.

Дальше — хранилище. Развернули проект BigQuery в облаке клиента, включили ежедневную выгрузку GA4 и массовую выгрузку Search Console. Поверх сырых данных построили два слоя: core — нормализованные события и сессии, и marts — витрины, то есть готовые к показу срезы данных. У каждой цифры на дашборде есть свой запрос, и его можно проверить.

Отдельное правило, которого мы придерживались весь проект: одно название — один подсчёт. Если колонка называется «Заявки», она считается одинаково на каждой вкладке. Где два способа подсчёта дают разное — например, события об отправке формы против сессий, в которых была отправка, — мы показываем оба и объясняем разницу прямо в дашборде, а не прячем одно из них.

2.2. История, которая глубже выгрузки

Выгрузка в BigQuery начинается со дня, когда её включили. Всё, что было раньше, в экспорт не попадает. А клиенту нужна история со дня запуска сайта.

Мы забрали прошлое через GA4 Data API — по дням, каналам, источникам, страницам входа, странам и событиям — и сшили с экспортом по чёткой границе: до первого дня выгрузки работает история из API, с него — живые данные. Каждая витрина состоит из двух половин, и итоги сверяются. Так появились годы истории там, где интерфейс GA4 показал бы несколько месяцев.

Обзор дашборда: карточки ключевых показателей и график сессий с отправками формы
Обзор: ключевые показатели и сессии вместе с отправками формы — за любой период, со сравнением с предыдущим

2.3. Форма: события и воронка

Чтобы видеть, на каком шаге люди останавливаются, форму надо мерить пошагово. Через GTM добавили события на начало заполнения, первый шаг и отправку — и отделили форму лид-магнита, которая пользуется той же механикой, но ведёт других людей другим путём.

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

Отдельная работа — оставить в данных только настоящих посетителей: без тестовых сред, без наших собственных проверок, без служебных переходов команды. Так воронка показывает реальную картину, а не более приятную, чем она есть.

Воронка заявок в сессиях: начали заполнять, прошли первый шаг, отправили
Воронка заявок в сессиях: начали заполнять → прошли первый шаг → отправили, с отсевом на каждом переходе

2.4. Стык с CRM: один человек — один идентификатор

Это сердце проекта. Идея простая: идентификатор, который GA4 присваивает посетителю, должен доехать до карточки сделки в CRM. Тогда сделку можно соединить со всей историей визитов этого человека — и увидеть, откуда он пришёл впервые, что читал, сколько раз возвращался.

Как это устроено:

  • Тег в GTM при первом визите записывает идентификатор GA4 и метки кампании в куки первой стороны — именно первого касания, а не последнего: нам важно, что человека привело, а не через что он вернулся.
  • Форма на сайте читает эти куки и передаёт вместе с заявкой.
  • Бэкенд клиента создаёт сделку в CRM и заполняет семь служебных полей: идентификатор визита, источник, тип трафика, кампанию, страницу заявки, идентификатор рекламного клика и формы. Поля мы спроектировали и создали через API, разработчику передали техническое задание с примерами.
  • BigQuery соединяет сделку с визитами по идентификатору. С этого момента у каждой сделки есть канал, источник и первая страница входа.

Проверяли не на словах. Сначала отправили контрольные заявки через оба шага формы и сверили: идентификатор в карточке сделки совпадает с тем, что видит GA4, до символа; метки кампании доезжают полностью. Потом дождались настоящих заявок — и они приехали в CRM уже с источником: от органического поиска и соцсетей до отраслевых каталогов и AI-ассистентов. Ни одно поле не заполнялось руками.

Таблица сделок из CRM с источником, формой и стадией каждой
Сделки из CRM со своим источником: когда пришла, откуда, с какой формы и на какой стадии. Каждая строка — реальная сделка, соединённая с визитом автоматически; таблица подчиняется выбранному периоду

2.5. Дашборд, который принадлежит клиенту

Мы сознательно не пошли в Looker Studio или другой конструктор. Дашборд — это один самодостаточный HTML-файл: открывается с любого устройства и не требует лицензий или аккаунтов. Все данные за всю историю уже внутри, а выбор периода и сравнение с предыдущим пересчитываются прямо в браузере.

Девять разделов: обзор, трафик, воронка заявок, SEO, воронка продаж, каналы лидов — и три, которые уже ждут данных: менеджеры, услуги и выручка, реклама. В каждом написано, что здесь будет, какие данные для этого нужны и кто их даёт. Как только CRM наполнится суммами и статусами сделок, эти разделы начнут считать сами, без доработок.

Дашборд собран в айдентике клиента — его шрифт и его цвета. Разделы пронумерованы, чтобы в переписке можно было написать «смотрите 6.1» и человек нашёл место.

Обновление — каждый день, автоматически: подтягиваются данные CRM, пересобирается файл, проверяется, что данные сдвинулись, а стык не сломался.

График трафика сайта по месяцам за всю историю
Трафик за всю историю, месяц за месяцем. Тот же график пересчитывается под любой период прямо в браузере — без ручных выгрузок

2.6. Документы для команды

Аналитика работает только тогда, когда с ней работают люди. Поэтому вместе с дашбордом команда получила:

  • Стандарт UTM-меток, построенный не на общих правилах, а на собственных данных клиента: какие написания источников уже рассыпались на несколько строк, какие типы трафика выпадают из каналов и почему. Главное правило там одно: utm_medium — не описание вашего трафика, а значение из списка, который понимает GA4.
  • Рекомендации «что сделать с вашей стороны», отсортированные по ценности: сначала то, что открывает главный вопрос, потом то, что искажает имеющиеся цифры, потом вопросы на один ответ.
  • Записку к дашборду с границами данных и методологией — чтобы цифрам доверяли не на слово.

Все документы собираются скриптами из живых данных: после изменений их достаточно пересобрать, и они сами покажут, что осталось.

3. Результаты

Главный результат: путь человека от первого визита до сделки виден насквозь. Это не отчёт, который кто-то собирает раз в квартал, а инструмент, который обновляется каждый день.

На какие вопросы он отвечает:

  • Сколько сессий и отправок формы даёт каждый канал и каждый отдельный источник — не «Referral», а конкретный каталог или сайт.
  • На каком шаге формы люди останавливаются: между началом и первым шагом или между первым шагом и отправкой.
  • Какие страницы имеют показы в поиске, но не получают кликов — и что из них стоит на второй странице выдачи, то есть ближе всего к результату.
  • Появился ли канал, которого в прошлом году не было: AI-ассистентов мы увидели в данных именно так — отдельным источником, а не догадкой.
  • Совпадает ли самый большой канал по объёму с лучшим по заявкам. По нашему опыту чаще не совпадает — и именно это меняет решение о бюджете.
  • Из каких источников приходят сделки в CRM — с датой, формой и стадией каждой.
  • Целы ли сами данные: ежедневные проверки следят, чтобы стык был на месте, цифры свежие, а заявки сходились со сделками — и предупреждают команду первыми.
Клики из поиска и средняя позиция по данным Search Console
SEO: клики из поиска и средняя позиция за весь период — видно рост и из чего он сложился
Таблица страниц с показами почти без кликов — потенциал роста
Потенциал роста: страницы с показами почти без кликов. Зелёным выделены те, что стоят на второй странице выдачи — самый дешёвый резерв
Воронка продаж из CRM по стадиям сделки
Воронка продаж из CRM: сколько сделок дошло до каждой стадии или дальше. Накопленная величина читается как воронка, текущее распределение — нет

Самое важное — изменился разговор. Раньше вопрос «откуда этот клиент» требовал догадок. Теперь ответ лежит в карточке сделки, и его не вписывал человек.

Такую связку мы собираем под ключ — на странице услуги есть стоимость, этапы и сроки: сквозная аналитика.

Первое впечатление — выглядит очень круто. Начал погружаться, интересные инсайты!

— владелец агентства, на следующий день после открытия дашборда