журналопыт и цифрыавтор

директор и машина · маркетинг · запись № 007 · · Давид Герштейн

Сквозная аналитика своими руками: аудит данных вместо покупки BI-сервиса

10–15% лидов не атрибутируется (в декабре — 30%) · дубли давали 2-3 копии на лид · конверсия органики упала с 17% до 10% за 4 месяца
Коротко · суть разбора

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

Содержание · 7 разделов
  1. Сквозная аналитика: сначала ревизия данных, а не дашборд
  2. Атрибуция: 10-15% лидов вы всё равно не отследите
  3. Стоимость лида по каналам: считать честно, а не оптимистично
  4. Контрольные точки: план по дням, а не по месяцу
  5. ИИ-связка: ежедневная проверка отчёта на аномалии вместо ручной сверки
  6. Экономика: что стоит и что даёт
  7. Чек-лист: с чего начать в понедельник

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

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

Сквозная аналитика: сначала ревизия данных, а не дашборд

У меня было ощущение, что сквозная аналитика — это дашборд с графиками и деньги на дорогую платформу. На деле первые месяцы ушли не на визуализацию, а на поиск дыр в данных, которые уже были. Дыры оказались простыми и дорогими.

Пример: у двух менеджеров разошлись цифры по продажам за месяц — расхождение почти на 10%. Проверили через CRM: потеряли одну сделку — её посчитали рекомендацией, а не лидом, и не включили в расчёт. Дальше нашлась вторая проблема: при фильтрации по месяцу оплаты вместо месяца создания договора разница выросла почти до 40% от суммы. Это не ошибка человека — это ошибка настройки фильтра, которую никто не проверял месяцами.

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

ПравилоНе строй сквозную аналитику поверх данных, которые никто не проверял на дубли и сдвиги дат. Час на аудит источника экономит месяц неверных решений.

Дубли лидов — самая частая дыра

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

Похожая история с датами разобрана в статье о том, как CRM врёт данные и сдвигает даты — там же способ поймать искажение до того, как оно попадёт в отчёт для руководителя.

Где нашли ошибкуРасхождениеЭффект, если не поймать
Отчёт двух менеджеров за месяцРасхождение почти на 10% — из-за сделки, посчитанной как рекомендация, а не лидРешения по итогам месяца принимаются на заниженной выручке
Фильтр по дате оплаты вместо даты договораРазница выросла почти до 40% от суммы в зависимости от способа фильтрацииПрогноз кассы искажается на треть без единой ошибки человека
Дубли на входящей точке (форма на сайте)валовых лидов заметно больше уникальных контактов — на треть за деньКонверсия выглядит упавшей в полтора раза, хотя реальный трафик не изменился

Атрибуция: 10-15% лидов вы всё равно не отследите

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

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

Отдельная и более неприятная версия той же проблемы — когда система технически не даёт разделить конверсию даже по видимым источникам. У нас Google и Яндекс какое-то время сливались в один поток из-за ограничений интеграции. Без разделения непонятно, какой канал реально работает — это уже не аналитическая, а управленческая проблема: нет данных — нет рычага давления ни на подрядчика, ни на бюджет.

Стоимость лида по каналам: считать честно, а не оптимистично

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

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

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

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

Ещё случай: после смены текста объявления по чужой рекомендации конверсия упала с 33% до 6% — в 5,5 раза, а объём лидов вырос на четверть. Формально «лидов стало больше», по факту стоимость качественного лида выросла в разы: новый трафик оказался возрастным, иногородним, из-за рубежа. Без разбивки по качеству это выглядело бы успехом ещё две недели — пока отдел продаж не начал жаловаться на пустые звонки.

Что меритьЧастая ошибкаЧто делать вместо
Стоимость лидаБюджет / валовые лидыБюджет / лиды, прошедшие контроль качества
Конверсия каналаСравнивать все каналы одной меркойУчитывать длину цикла сделки для каждого источника
АтрибуцияНасильно распределять неотслеживаемые лидыВыделять отдельной категорией с причиной
План по лидамСмотреть только на итог месяцаСверять план по дням и неделям

О том, как разрыв между количеством лидов и реальными продажами прячется в отчётах, я подробнее писал в статье «Лиды есть, а продаж нет» — там разобрано, где именно теряются деньги между маркетингом и отделом продаж.

Контрольные точки: план по дням, а не по месяцу

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

За месяц качественными оказались только 40% лидов при плановом отвале не больше 20%. Эту разницу видно, только если считать конверсию в качество каждую неделю, а не подводить итог постфактум. То же с сезонностью: декабрь у нас идёт с коэффициентом 0,8 к плану — заранее известно, что лидов будет на 20% меньше, и это не повод паниковать, а повод не сравнивать декабрь с октябрём напрямую.

Технически такой дашборд не требует дорогого сервиса — у нас его за выходные собрал специалист по SEO, с отслеживанием лидов и конверсий по страницам в реальном времени. Дальше пошла ручная работа: сверять рост трафика с падением продаж и искать, на каком этапе разрыв. Например, конверсия органического трафика падала четыре месяца подряд — с 17% в январе до 10% в апреле, при этом трафик рос. Без разбивки по неделям это выглядело бы как «сайт работает», а по факту качество лидов с этого канала всё время снижалось.

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

ИИ-связка: ежедневная проверка отчёта на аномалии вместо ручной сверки

Ручную сверку каждое утро делал аналитик: сравнивал лиды в CRM с уникальными контактами, смотрел долю неатрибутируемых, прикидывал отставание от плана по дням. Задача рутинная и формализуемая, но требует внимания каждый день — то есть годится для дешёвой модели, а не для дорогой GPT-4-класса: здесь не нужно творчество, нужна аккуратная сверка чисел по жёсткой инструкции.

Конвейер выглядит так:

1. Вебхук из Bitrix24 (или amoCRM API) раз в сутки выгружает новые сделки и лиды в Google Sheets: дата, канал, статус, телефон/email, отметка о прохождении контроля качества.
2. Google Apps Script по расписанию (триггер time-driven, ежедневно в 7:00) сворачивает сырые строки в JSON-сводку за последние 7 дней по каналам.
3. Скрипт отправляет JSON в LLM API с промптом ниже.
4. Ответ модели (тоже JSON) пишется в отдельный лист «Аномалии» и дублируется уведомлением в Telegram-бот ответственному аналитику.
5. Аналитик утром открывает лист, а не весь отчёт целиком — смотрит только то, что модель пометила как high или medium.

Модель: дешёвая (класса GPT-4o-mini) — задача классификации и сверки чисел по жёсткой схеме, не творческая, важны скорость и цена при ежедневном прогоне.

Ты — аналитик отдела маркетинга. На входе JSON со сводкой лидов по каналам за последние 7 дней.
Проверь на аномалии:
1. Резкий рост доли неатрибутируемых лидов (более чем на 20% от нормы).
2. Подозрение на дубли: leads_gross превышает leads_unique_contacts более чем на 15% за день.
3. Расхождение конверсии по каналу более чем в 2 раза от среднего за предыдущие 4 недели.
4. Отставание от плана по дням более чем на 20%.

Входные данные:
{{JSON: [{date, channel, leads_gross, leads_unique_contacts, leads_qualified, unattributed_count, plan_daily}]}}

Верни строго JSON по схеме, без пояснений вне JSON:
{"date": "...", "anomalies": [{"type": "...", "channel": "...", "severity": "low|medium|high", "detail": "..."}], "action_required": true/false}

Пример ответа модели:

{
  "date": "2026-06-10",
  "anomalies": [
    {"type": "duplicate_suspect", "channel": "site_form",
     "severity": "high",
     "detail": "leads_gross заметно превышает unique_contacts, разница около трети"}
  ],
  "action_required": true
}
Google Sheets — лист «Аномалии»
+34%лидов gross сверх нормы за день
~⅓разрыв с уникальными контактами
highподозрение на дубли
ДатаКаналТип аномалииВажность
2026-06-10site_formduplicate_suspect high

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

Инженерная обвязка простая, без энтерпрайза: Google Apps Script пишет логи прогонов в отдельный лист, каждая ошибка API — таймаут, лимит токенов, пустой ответ — попадает туда же с меткой времени и дублируется в Telegram сообщением «прогон не выполнен». Перезапуск — вручную, кнопкой в меню таблицы, без доступа к серверу аналитик делает это сам за минуту. Тот же принцип я описывал в статье про реальные счета за ИИ — дешёвая модель на рутинной сверке обходится в доллары в месяц, а не в тысячи.

Где ломается модельДешёвая модель хорошо ловит явные расхождения чисел, но иногда путает причину: помечает сезонное падение — тот же декабрь с коэффициентом 0,8 — как аномалию. Порог severity нужно калибровать вручную первые 2-3 недели, иначе аналитик начнёт игнорировать уведомления, и тогда автоматизация окажется хуже, чем её отсутствие.

Экономика: что стоит и что даёт

Внедрение. Аудит источников данных — дублей, дат, атрибуции — разовая работа аналитика или толкового менеджера, оценочно 8-16 часов в зависимости от числа источников. Настройка связки вебхук → Google Sheets → LLM API — ещё 6-10 часов работы того, кто умеет писать Apps Script; часто это тот же человек, что уже собирал дашборд за выходные, а не отдельный дорогой подрядчик.

Эксплуатация. Дешёвая модель на ежедневном прогоне сводки по 5-10 каналам обходится в несколько долларов в месяц, не в десятки. Основная статья расходов — не токены, а время человека, который читает и разбирает флаги.

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

Окупаемость на этих же оценках: разовая настройка — аудит (8-16 часов) плюс связка вебхук → Sheets → LLM (6-10 часов) — это 14-26 часов работы. Экономия ручного времени — около 20 часов в месяц. Даже по верхней границе разовых работ окупаемость наступает меньше чем за полтора месяца, а дальше это чистая экономия минус несколько долларов на токены.

Отдельно — риск от решения на грязных данных. Формула простая: дневной бюджет канала × число дней с искажённой картиной = сумма, которой рискуют при неверном решении. В нашем случае дубли держали картину искажённой около недели — то есть почти недельный бюджет канала крутился на основании неверной конверсии (оценка риска, а не факт прямых потерь — но решение о масштабировании или отключении канала в это время принимается вслепую). Ровно это случилось с историей про 33%→6%: две недели неверного вывода обошлись дороже, чем вся сверка данных вместе взятая — две недели трафика «по инерции» на неверной гипотезе съели около половины месячного бюджета канала, потраченного на лидов, которых потом пришлось признать нецелевыми.

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

Чек-лист: с чего начать в понедельник

  1. Сравнить количество лидов в CRM с количеством уникальных телефонов/email за последнюю неделю — найти дубли на входящих точках.
  2. Выделить неатрибутируемые лиды отдельной категорией в отчёте и посчитать их долю за последний месяц.
  3. Разбить месячный план по лидам на недели и дни, отметить контрольные точки для отставания.
  4. Пересчитать стоимость лида по каждому каналу через число лидов, прошедших контроль качества, а не валовое.
  5. Проверить, можно ли технически разделить источники трафика (например, Google и Яндекс) — если нет, завести задачу на доработку интеграции отдельно от отчётности.
  6. Настроить простую ежедневную сверку через вебхук из CRM и дешёвую модель вместо часа ручной работы аналитика в день.

Ни один из этих шести пунктов не требует покупки BI-платформы. Все они требуют часа-двух внимания к данным, которые уже есть в системе — и, судя по практике, именно там прячется больше денег, чем в новом канале трафика.

Частые вопросы

С чего начать сквозную аналитику своими руками, без бюджета на сервисы?

С аудита данных, которые уже есть в CRM и рекламных кабинетах: найти дубли лидов, свести отчёты продаж и маркетинга, выделить неатрибутируемый трафик отдельной категорией. Платный BI-сервис на этом этапе не нужен — нужны Google Sheets, вебхук из CRM и час времени.

Как считать стоимость лида по каналам без дорогого сервиса?

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

Что делать с лидами, которые невозможно атрибутировать?

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

#аналитика и отчётность #ии и нейросети #деньги

Дальше читать подобрано по направлению и темам
027
Сколько на самом деле стоит ИИ в месяц: мои счета, минус $40 за ночь и шлюз учёта
−$40 за ночь · ~$300/мес за 100% звонков · 11 сервисов на шлюзе
004
Зависшие сделки в воронке: как их вычислить, оживить и не плодить заново
1,5 года без движения · встреча 55% → договор 22% · факт продажи заметно ниже плана (неделя)
006
Как оценивать звонки: пять критериев вместо полусотни пунктов
66 звонков ручной сверки · цена одной ошибки — заметная доля годового бюджета клиента · 25% охват контролем вручную