/EVSTYGNEYМаркетинг на языке денег
Отчёты и аналитика

Маркетинг, который не видит сделок, оптимизирует заявки: связка 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%) — практические ориентиры, не стандарт индустрии.

Краткие выводы

  1. Канал с лидами втрое дешевле может приносить сделки в полтора раза дороже — видно это только в витрине «источник → выручка».
  2. Схема-минимум = hidden-поля + поля в CRM + телефония + нормализация контактов + SQL-витрина. Неделя работ без покупки платформ.
  3. Дыры (unmatched, ручной ввод, офлайн, last touch) не отменяют пользу — они требуют выводить качество данных в ту же витрину явной строкой.
  4. Самое трудное — дисциплина заполнения: это договорённость двух отделов, и никакой SQL её не заменит.

Какая доля сделок в вашей CRM имеет заполненный источник — вы её хоть раз считали? Если строили такую связку руками — обо что споткнулись сильнее всего? У меня в топе нормализация телефонов.