Маркетинг, который не видит сделок, оптимизирует заявки: связка UTM → CRM руками за неделю
TL;DR Пока маркетинг видит воронку только до момента «заявка передана в продажи», он оптимизирует количество и цену заявок — и делает это добросовестно, даже когда дешёвые заявки не доходят до денег. Связать источник со сделкой можно без покупки платформы сквозной аналитики: пять элементов (скрытые поля формы, поля в CRM, телефония, нормализация контактов, витрина-джойн), неделя работ и дисциплина. Ниже — схема-минимум, SQL, модельная таблица, где «дешёвый» канал оказывается дороже по сделкам, и честный список дыр этого подхода. Чтение — минут семь.
Маркетолог показывает собственнику дашборд: лиды растут, стоимость заявки падает, всё зелёное. Собственник смотрит на кассу — а касса стоит. Знакомая сцена в B2B на сотни миллионов выручки. Я Егор, перформанс-маркетолог; причина тут обычно скучнее заговора: маркетинг физически не видит, чем его заявки закончились в продажах, — и чинится это не платформой за миллионы, а неделей аккуратной работы. Разберём минимальную схему. Числа в примерах — модельная прикидка, не из реального проекта.
Что строим
Простыми словами Сквозная аналитика — связка «рекламный источник → заявка → сделка → деньги» для каждого лида, чтобы каналы сравнивались по выручке и стоимости сделки, а не по стоимости заявки.
Зачем — одна таблица вместо тысячи слов. Два канала, одинаковый месячный бюджет ~150–160 тыс. ₽:
| Канал | Лиды | CPL | Сделки | CPA сделки | Выручка | Медианный цикл |
|---|---|---|---|---|---|---|
| A («дешёвые лиды») | 200 | 800 ₽ | 4 | 40 000 ₽ | 1,2 млн ₽ | 30 дней |
| B («дорогие лиды») | 60 | 2 500 ₽ | 6 | 25 000 ₽ | 2,4 млн ₽ | 55 дней |
По CPL канал A лучше в три раза, по стоимости сделки — хуже в полтора, по выручке — вдвое. Отчёт «лиды и CPL» рекомендует масштабировать A; отчёт до денег — B. Обе рекомендации логичны, данные разные.
Пять элементов схемы-минимум
1. Скрытые поля формы. В каждую форму сайта — hidden-поля: utm_source, utm_medium, utm_campaign, client_id счётчика, landing_url, дата. Заполняются скриптом из URL и куки при загрузке страницы; при отправке уезжают вместе с заявкой. Час работы фронтендера.
2. Поля в CRM. Те же атрибуты — на карточке лида, не в комментарии («пришёл с рекламы» аналитикой не считается). Плюс жёсткое правило: лид без источника не создаётся, для ручного ввода есть значение manual/менеджер.
3. Телефония. Половина B2B-заявок — звонки, и без привязки звонка к источнику схема дырявая. Минимум без затрат — отдельные подменные номера на канал (статический коллтрекинг): грубо, зато бесплатно и честно. Динамический коллтрекинг точнее, но это уже бюджет — в схему-минимум не входит.
4. Нормализация контактов. Матчить сделку с лидом будем по телефону и email. +7 (912) 345-67-89, 89123456789 и 8-912-345-67-89 — один человек и три разные строки; без приведения к единому формату (E.164, нижний регистр для почты) джойн потеряет треть связок.
5. Витрина. Один запрос, который собирает всё:
SELECT
l.utm_source, l.utm_campaign,
count(DISTINCT l.id) AS leads,
count(DISTINCT d.id) AS deals,
sum(d.amount) AS revenue,
sum(d.amount) / NULLIF(count(DISTINCT d.id),0) AS avg_deal,
percentile_cont(0.5) WITHIN GROUP (ORDER BY d.closed_at - l.created_at) AS median_cycle
FROM leads l
LEFT JOIN deals d
ON (d.phone_norm = l.phone_norm OR d.email_norm = l.email_norm)
AND d.created_at BETWEEN l.created_at AND l.created_at + INTERVAL '180 days'
GROUP BY 1, 2;
Окно 180 дней — под длинный цикл; для быстрых ниш хватит 60–90. Выгрузку из рекламных кабинетов с расходами приклеиваете к этой же витрине по utm_campaign — получаете CPA сделки и ДРР по каналам.
Дыры схемы — честный список
Схема-минимум дырявая по построению; важно знать, где именно.
- Доля несматченных сделок. Часть сделок не свяжется ни с одним лидом (пришли ногами, по рекомендации, телефон другой). Эту долю выводите в витрину явной строкой
unmatched. Пока она под 20–30% — выводы по каналам работают; 60% несматченных — это отчёт о качестве данных, решения по нему принимать рано. - Last touch в CRM — это last touch. Источник у лида один, а касаний до заявки могло быть пять. Про то, как правило приписывания искажает картину и что с этим делать, — [статья про атрибуцию]; здесь важно помнить: витрина отвечает «через какую дверь вошёл», без претензии на полный вклад канала.
- Фан-аут джойна раздувает выручку. Джойн по
phone OR emailсвязывает сделку со всеми подходящими лидами: если их несколько,sum(d.amount)сложит сумму сделки столько раз, сколько лидов она поймала, — аcount(DISTINCT d.id)покажет 1, и метрики разъедутся. Прежде чем суммировать, сверните связку к одному лиду на сделку (last touch или первый лид по времени) — иначе выручка по каналам не сойдётся с фактической. - Ручной ввод. Менеджеры будут заводить лиды мимо правил — валидация телефона на входе и дефолт
manualспасают частично. Доляmanualв витрине — метрика дисциплины отдела продаж, за ней стоит следить отдельно. - Офлайн-первые касания. Выставка, вебинар, звонок по визитке — размечаются только руками (поле «офлайн-источник»). Дёшево и криво, но лучше пустоты.
- Малые числа. 4 и 6 сделок из таблицы выше — это ещё не статистика, это повод копить окно в 2–3 квартала до жёстких решений о каналах.
План на неделю
- День 1–2. Hidden-поля на все формы; поля источника в CRM; правило «лид без источника не создаётся».
- День 3. Нормализация телефонов и почт (миграция по старым записям + триггер на новые).
- День 4–5. Витрина-джойн, приклейка расходов, строка unmatched. Первый отчёт «источник → сделки → выручка».
- Дальше и навсегда. Дисциплина заполнения. Это самая трудная часть проекта, и она не техническая: договорённость с руководителем продаж о том, что доля
manualи unmatched — общая метрика двух отделов, стоит любых регламентов.
Когда схемы-минимум мало
- Много каналов и звонков — нужен динамический коллтрекинг, статика перестаёт различать кампании.
- Розничные офлайн-точки в цепочке — без систем лояльности/промокодов связку не собрать.
- Нужен вклад каналов по всей цепочке касаний — это мультитач и эксперименты, отдельная лига по сложности и цене.
Откуда числа Таблица каналов — модельная прикидка для иллюстрации расхождения CPL и CPA сделки; SQL — схема запроса (псевдо-Postgres), поля переименуете под свою CRM. Пороги (окно 180 дней, unmatched 20–30%) — практические ориентиры, не стандарт индустрии.
Краткие выводы
- Канал с лидами втрое дешевле может приносить сделки в полтора раза дороже — видно это только в витрине «источник → выручка».
- Схема-минимум = hidden-поля + поля в CRM + телефония + нормализация контактов + SQL-витрина. Неделя работ без покупки платформ.
- Дыры (unmatched, ручной ввод, офлайн, last touch) не отменяют пользу — они требуют выводить качество данных в ту же витрину явной строкой.
- Самое трудное — дисциплина заполнения: это договорённость двух отделов, и никакой SQL её не заменит.
Какая доля сделок в вашей CRM имеет заполненный источник — вы её хоть раз считали? Если строили такую связку руками — обо что споткнулись сильнее всего? У меня в топе нормализация телефонов.