Открываете отчёт - Метрика показывает 120 достижений цели, заходите в CRM - там 87 заявок. Или наоборот: в CRM 200 лидов, а Метрика «видит» только 150. Ни то ни другое не означает, что системы сломаны. Это значит, что они считают разные вещи - и нужно разобраться, почему.
В этой статье - системный разбор причин расхождений, пошаговая настройка передачи ClientID, инструкция по офлайн-конверсиям и диагностический чеклист. После прочтения вы сможете свести расхождение до допустимых 5–10%.
Почему данные расходятся: системный разбор
Метрика и CRM живут в разных мирах. Метрика - браузерный инструмент: она фиксирует событие в момент, когда JavaScript счётчика отправляет данные на сервер Яндекса. CRM - система учёта: она создаёт заявку, когда менеджер или автоматика вносят данные клиента.
Между этими двумя моментами - бездна технических и организационных нюансов.
Метрика считает больше, чем CRM
Это самый частый сценарий. Метрика фиксирует попытку отправки формы или клик по кнопке - даже если форма отправилась с ошибкой, номер телефона оказался невалидным или заявку «потерял» менеджер. CRM создаёт запись только при успешной обработке.
Три главных причины:
- Срабатывание цели на кнопку «Отправить» без реальной отправки данных
- Тестовые заявки от разработчиков и QA
- Дублирование: один и тот же пользователь отправил форму дважды, CRM смержила дубли, Метрика посчитала оба события
CRM считает больше, чем Метрика
Тут логика обратная: в CRM есть заявки, о которых Метрика вообще ничего не знает.
Основные причины:
- Звонки через коллтрекинг - если коллтрекинг не интегрирован с Метрикой, звонки видит только CRM
- Заявки из мессенджеров, Telegram-ботов и чатов без JS-трекинга
- Заявки, которые менеджеры создают вручную - «пришёл сам», «позвонил напрямую»
- Блокировщики рекламы: часть пользователей открывает сайт с AdBlock, uBlock или похожими расширениями, которые блокируют счётчик Метрики
Расхождение по выручке
Отдельная история - когда количество заказов совпадает, а сумма выручки нет. Метрика берёт значение revenue в момент передачи данных, CRM может обновить сумму после редактирования заказа. Если синхронизация статусов не настроена, версии разойдутся навсегда.
Авторская ремарка. Расхождение до 15% - рабочая норма для большинства бизнесов. Если у вас 10–12% - скорее всего, это блокировщики и несинхронизированные звонки. Если больше 20% - копайте техническую причину.
7 технических причин расхождений
Разберём каждую причину с конкретным решением.
1. Блокировщики рекламы и VPN
Браузерные расширения типа AdBlock, uBlock Origin и Brave Shield блокируют запросы к mc.yandex.ru - домену, на который Метрика отправляет данные. По разным оценкам, среди B2C-аудитории 15–25% пользователей используют блокировщики; в B2B, особенно среди IT-специалистов, этот показатель выше.
VPN тоже может влиять: часть VPN-клиентов подменяет DNS или блокирует трекеры на уровне системы.
Решение: используйте Метрику с первой стороной (первопартийный домен) - тогда запросы идут через ваш домен, а не через mc.yandex.ru, и блокировщики их пропускают значительно чаще.
2. Iframe-формы и сторонние виджеты
Если форма заявки загружена в <iframe> с другого домена - Метрика не видит событий внутри этого фрейма. Счётчик работает в контексте родительской страницы, а форма - в изолировантом контексте чужого домена.
Решение: переведите форму на ваш домен или настройте передачу события через window.postMessage из iframe в родительскую страницу, а оттуда вызывайте ym(COUNTER_ID, 'reachGoal', 'GOAL_ID').
3. SPA-сайты (React, Vue, Angular)
На одностраничных приложениях URL не меняется при переходе между разделами, а счётчик Метрики инициализируется один раз. Если цель настроена на посещение страницы «спасибо», она просто никогда не сработает - страницы как таковой нет.
Решение: используйте JavaScript-цели вместо URL-целей. Вызывайте ym(COUNTER_ID, 'reachGoal', 'FORM_SUBMIT') явно в обработчике успешной отправки формы.
4. Потеря ClientID
ClientID - уникальный идентификатор, который Метрика присваивает браузеру посетителя и хранит в cookie. Именно по нему можно связать заявку из CRM с конкретным визитом в Метрике. Без ClientID синхронизация невозможна.
Три ситуации потери ClientID:
- Форма отправляется раньше, чем Метрика успела инициализироваться (быстрые клики)
- ClientID не передаётся в поле формы или в запрос к CRM
- Пользователь очистил cookies или зашёл в режиме инкогнито
Решение описано в следующем разделе.
5. Дублирование заявок в CRM
Пользователь кликает «Отправить» дважды - два идентичных события попадают в Метрику. CRM смержила их в одну запись по номеру телефона. Итог: Метрика +2, CRM +1.
Решение: настройте дедупликацию на уровне CRM (проверка по телефону/email перед созданием новой записи) и/или добавьте защиту от двойной отправки на стороне формы - деактивируйте кнопку после первого клика.
6. Спам-заявки и тестовые записи
CRM фиксирует абсолютно все заявки - включая спам-ботов и тесты разработчиков. В Метрике все эти события тоже посчитаны как достижения цели.
Решение: для Яндекс Метрики предусмотрен статус SPAM - передавайте туда нецелевые заявки, и Метрика исключит их из расчёта конверсий. В CRM настройте отдельный этап «Спам» и передавайте его через API.
7. Временны́е задержки
Метрика фиксирует событие мгновенно. CRM может обрабатывать заявки батчем - раз в час или раз в сутки. Если сравнивать отчёты за «сегодня», вы всегда увидите расхождение, которое исчезнет завтра.
Решение: сверяйте данные за периоды не менее 7 дней. Данные за «вчера» и «сегодня» могут меняться, пока CRM не завершила обработку.
Как передать ClientID в CRM
Это ключевой шаг для точной сквозной аналитики. ClientID позволяет связать любую заявку из CRM с конкретным визитом, источником трафика и поведением пользователя на сайте.
Скрытое поле в форме
Самый простой и надёжный способ - добавить в форму скрытое поле и подставить туда ClientID через JavaScript:
<input type="hidden" name="ym_client_id" id="ym_client_id" value="" />
// Получаем ClientID и записываем в скрытое поле
window.onload = function () {
try {
ym(ВАШ_COUNTER_ID, "getClientID", function (clientID) {
document.getElementById("ym_client_id").value = clientID;
});
} catch (e) {
console.warn("Метрика не загружена:", e);
}
};
Теперь при отправке формы значение ClientID уйдёт вместе с остальными данными. На стороне CRM сохраните его в отдельное поле карточки клиента.
Передача через API Метрики
Когда ClientID есть в CRM - можно передавать статусы заказов обратно в Метрику через API. Это позволит видеть в Метрике не просто «заявку», а полный путь: создан → в работе → оплачен.
Пример тела запроса:
{
"orders": [
{
"client_type": "CONTACT",
"client_uniq_id": "12345",
"create_date_time": "2026-06-01",
"currency": "RUB",
"id": "ORDER-001",
"order_status": "PAID",
"revenue": 45000.0
}
]
}
Endpoint: POST https://api-metrika.yandex.net/management/v1/counter/{counterId}/offline_conversions/upload
Авторизация - через OAuth-токен Яндекса.
Настройка для популярных CRM
Для Битрикс24 и amoCRM есть готовые виджеты и интеграции - они автоматически подхватывают ClientID из формы и сохраняют в сделку.
Для RetailCRM алгоритм такой:
- Создайте отдельное поле в профиле клиента для ClientID
- Добавьте скрытое поле в форму заказа
- При входе пользователя в личный кабинет - обновляйте ClientID в профиле
- При передаче заказа в Метрику - включайте ClientID в тело запроса
Для самописной CRM порядок аналогичный, но потребуется разработка endpoint по ТЗ - пример структуры ТЗ есть в документации Яндекс Метрики.
Авторская ремарка. Важный нюанс: ClientID привязан к браузеру. Если пользователь отправил заявку на телефоне, а потом позвонил с другого номера - это разные «посетители» для Метрики. Для кросс-девайс трекинга используйте UserID Метрики, когда пользователь авторизован на сайте.
Офлайн-конверсии: как подтянуть статусы из CRM
Офлайн-конверсии - это действия клиентов, которые произошли вне сайта: оплата через менеджера, визит в офис, звонок. По умолчанию Метрика их не видит, даже если сохранила ClientID при первом визите.
Загрузка через CSV
Подходит для ручного или периодического импорта. Формат файла описан в справке Яндекс Метрики.
Обязательные поля: ClientID или yclid, target, date_time.
Загрузить можно в интерфейсе Метрики: Настройки → Загрузка офлайн-конверсий. Подходит для небольшого объёма (до нескольких тысяч конверсий в месяц).
Передача по API: статусы IN_PROGRESS, PAID, CANCELLED
Для автоматической синхронизации используйте API. Метрика поддерживает следующие стандартные статусы заказов:
| Статус CRM | goal_action_id | Значение |
|---|---|---|
| Заявка создана | IN_PROGRESS | Лид взят в работу |
| Заказ оплачен | PAID | Реальная продажа |
| Заказ отменён | CANCELLED | Отказ или возврат |
| Спам / нецелевая | SPAM | Исключить из аналитики |
Передавать статусы нужно через webhook или при каждом изменении статуса в CRM - тогда в Метрике появится полная воронка по каждому источнику трафика.
Чек-лист статусов для настройки
Перед разработкой ТЗ для программиста составьте таблицу:
- Какие статусы из вашей CRM соответствуют IN_PROGRESS / PAID / CANCELLED
- Нужно ли передавать промежуточные статусы (например, «коммерческое предложение отправлено»)
- Какие воронки передавать, а какие нет (исключить тест, обучение, B2B если не нужно)
Подробный пример такого ТЗ с реальным кейсом «Московские окна» - в материале Kokoc.com.
Как сверить данные и устранить расхождение
Прежде чем что-то чинить - нужно понять масштаб проблемы и её источник.
Диагностический чеклист
Пройдитесь по каждому пункту последовательно:
- Счётчик установлен на всех страницах? Проверьте в Яндекс Вебмастере или через расширение Яндекс.Метрика. Особенно - страница «Спасибо» и личный кабинет
- Цель настроена как JavaScript-событие, а не URL? Для SPA и AJAX-форм URL-цели не работают
- ClientID передаётся в CRM? Откройте несколько тестовых заявок в CRM - есть ли поле с ClientID?
- Форма внутри iframe? Откройте DevTools → Elements, найдите форму - нет ли тега
<iframe>вокруг неё - Коллтрекинг интегрирован с Метрикой? Если нет - звонки не попадают в цели
- Спам-заявки фильтруются? Посмотрите долю «Спам» и «Тест» в CRM за последний месяц
- Периоды сравнения совпадают? Убедитесь, что смотрите одинаковые даты, учитывая часовой пояс
Формула допустимого расхождения
Расхождение (%) = (|Метрика − CRM| / CRM) × 100
- < 10% - норма, можно не трогать
- 10–20% - стоит разобраться, скорее всего блокировщики или незакрытые каналы (звонки, чаты)
- > 20% - серьёзная проблема, требует технического аудита
Инструменты и альтернативы
Если стандартного функционала Метрики не хватает - рассмотрите:
- Roistat - сквозная аналитика с готовой интеграцией в CRM и детальной воронкой
- Яндекс Метрика Про - расширенные лимиты на хранение данных и более детальная сегментация
- Собственный BI - если данных много, строите дашборд на ClickHouse или Google Looker Studio с прямыми выгрузками из CRM и Метрики через API
Альтернативный взгляд
Часть аналитиков считает, что тратить время на идеальную синхронизацию Метрики и CRM - неоправданно. Их аргумент: достаточно хорошей корреляции (15–20% расхождение приемлемо) и правильных тенденций, а не абсолютных цифр. Если Метрика показывает рост конверсий на 20% - это полезный сигнал, даже если абсолютные числа расходятся. Этот подход имеет право на жизнь для небольших бизнесов, где стоимость разработки интеграции превышает ценность точной аналитики.
Интересный факт
Яндекс, судя по всему, пытается решить проблему офлайн-конверсий на уровне Яндекс ID. Гипотеза: пользователь, авторизованный через Яндекс на смартфоне и десктопе, получает ClientID в Метрике при посещении сайта. Когда он приходит в офлайн-точку - Яндекс.Карты могут зафиксировать его геолокацию и сопоставить с ранее присвоенным ClientID. Это позволило бы автоматически атрибутировать офлайн-покупки к онлайн-источникам трафика. ⚠️ Предположительно - Яндекс не описывал этот механизм публично.
FAQ
Почему Яндекс Метрика показывает больше заявок, чем CRM?
Метрика фиксирует событие в браузере - включая ошибочные отправки, дубли и тесты. CRM создаёт запись только после успешной обработки. Разница - это «технический шум».
Что такое ClientID и зачем его передавать в CRM?
ClientID - уникальный идентификатор браузера, который присваивает Метрика. Передав его в CRM, вы можете связать конкретную сделку с источником трафика, рекламной кампанией в Директе и поведением пользователя на сайте.
Какое расхождение считается допустимым?
До 10–15% - норма. Выше 20% - серьёзная проблема, требующая технического аудита по чеклисту из этой статьи.
Почему форма внутри iframe не попадает в Метрику?
Счётчик работает в контексте родительской страницы. iframe с другого домена изолирован. Решение - передавать событие через window.postMessage в родительский контекст.
Как передавать статусы заказов из CRM в Метрику?
Через API Яндекс Метрики: POST-запрос на /offline_conversions/upload с массивом orders, где каждый заказ содержит client_uniq_id, order_status (IN_PROGRESS / PAID / CANCELLED / SPAM) и revenue.
Чем yclid отличается от ClientID?
yclid - идентификатор клика из Яндекс Директа, существует 90 дней. ClientID - идентификатор браузера для любого источника трафика. Для передачи офлайн-конверсий из рекламы удобен yclid; для полной сквозной аналитики - ClientID.
Влияют ли блокировщики рекламы на статистику Метрики?
Да. AdBlock, uBlock и аналоги блокируют запросы к mc.yandex.ru. Настройте первопартийный домен - тогда счётчик будет работать через ваш домен и блокировщики его реже пропустят.
Источники
- Kokoc.com - «Передача данных из CRM в Яндекс Метрику за 3 шага и 4 способа»
- Roistat Help - «Отправка информации о звонках в Яндекс Метрику»
- ruward.ru - «Сквозная аналитика для e-commerce: как связать 93% заказов с визитами»
- Яндекс Метрика - Справка по загрузке офлайн-конверсий



.svg.webp)





