---
title: "Маркетинг, который не видит сделок, оптимизирует заявки: связка UTM → CRM руками за неделю"
canonical_url: https://evstygney.ru/articles/lead-to-deal-analytics/
date_published: 2026-07-23
date_modified: 2026-07-23
author: Егор (https://evstygney.ru/about/)
summary: "Сквозная аналитика лид → сделка без платформы: пять элементов связки UTM и CRM, SQL-джойн, дыры в данных и план работ на неделю."
tags: ["Отчёты и аналитика"]
---

# Маркетинг, который не видит сделок, оптимизирует заявки: связка 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. Витрина.** Один запрос, который собирает всё:

```sql
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 имеет заполненный источник — вы её хоть раз считали? Если строили такую связку руками — обо что споткнулись сильнее всего? У меня в топе нормализация телефонов.

---
Автор: Егор, маркетинг на языке денег. Telegram: https://t.me/evstygney_ru. Все цифры — модельные прикидки, если не сказано иное.
