Яндекс.Метрика умеет принимать «офлайн-конверсии» — события, которые случились уже после визита на сайт. Именно так RetailCRM возвращает в Метрику подтверждённые продажи и делает отчёты по каналам честными.
Что даёт связка с Метрикой
Яндекс.Метрика хорошо считает визиты и достижения целей на сайте, но не знает, чем закончился заказ. Заявка, отменённая через час, для Метрики остаётся конверсией. RetailCRM хранит финальный статус и сумму, поэтому её данные нужно вернуть в Метрику через механизм офлайн-конверсий.
- Реальные продажи вместо оформленных заявок в отчётах по источникам.
- Выручка по каналам с учётом отмен и частичных возвратов.
- Оптимизация Директа по конверсиям, которые действительно принесли деньги.
ClientID — ключ к сшивке
Метрика идентифицирует посетителя по параметру ClientID. Чтобы связать заказ RetailCRM с визитом, этот идентификатор нужно перехватить на сайте и сохранить в заказе.
Достаётся он из объекта счётчика асинхронно:
ym(XXXXXX, 'getClientID', function(id) { document.querySelector('[name=ym_client_id]').value = id; });
Значение через API RetailCRM пишется в кастомное поле заказа, например customFields[ym_client_id]. Именно по этому полю Метрика позже «приклеит» офлайн-конверсию к нужному визиту и его источнику.
Формат файла офлайн-конверсий
Метрика принимает офлайн-конверсии как CSV-файл или через API загрузки. Обязательные колонки:
| Колонка | Значение |
|---|---|
| ClientId | идентификатор из getClientID |
| Target | идентификатор цели (напр. order_paid) |
| DateTime | Unix-время достижения цели |
| Price | сумма заказа |
| Currency | RUB |
Пример строки: 1680000000123456789,order_paid,1680500000,5400,RUB. Файл отправляется на эндпоинт /management/v1/counter/{id}/offline_conversions/upload с заголовком, указывающим тип идентификатора — ClientId или UserId.
Настройка целей под статусы
Под ключевые статусы заказа удобно завести отдельные цели-идентификаторы в Метрике. Тогда воронка в отчётах повторяет вашу статусную модель RetailCRM.
- order_created — заказ оформлен (можно оставить обычной JS-целью на сайте).
- order_paid — оплачен, приходит офлайн-конверсией из CRM.
- order_completed — выполнен, финальная точка с выручкой.
Разделение целей позволяет видеть в Метрике переходы между этапами и считать, какой канал даёт не просто заявки, а доведённые до конца сделки.
- Не смешивайте онлайн- и офлайн-достижения одной цели — это путает атрибуцию.
- Для цели с выручкой обязательно передавайте Price, иначе отчёт по доходу останется пустым.
Автоматизация выгрузки
Разовая ручная загрузка CSV годится для проверки, но в бою нужен регулярный процесс. Есть три подхода:
| Способ | Как работает | Кому подходит |
|---|---|---|
| Веб-хук | событие смены статуса сразу шлёт конверсию | нужна оперативность |
| Периодическая выгрузка | скрипт раз в час собирает заказы через API и грузит файл | большие объёмы |
| Коннектор | Albato/ApiX-Drive связывают CRM и Метрику без кода | быстрый старт |
Для выборки заказов используйте метод API GET /api/v5/orders с фильтром по дате изменения и статусу. Так вы заберёте только то, что поменялось с прошлой выгрузки.
Проверка и типичные ошибки
После первой загрузки данные появляются в отчёте «Источники → офлайн-конверсии» с задержкой до суток. Что проверить, если конверсии не сшиваются:
- Пустой ClientID — getClientID вызван до инициализации счётчика.
- Неверное время — DateTime должен быть в прошлом и в секундах Unix, не в миллисекундах.
- Незнакомый ClientID — визита с таким идентификатором в базе Метрики нет (клиент чистил cookie или зашёл с другого устройства).
- Дубли — одна и та же конверсия загружена дважды; ведите флаг отправки в заказе.
Итог
Интеграция RetailCRM с Яндекс.Метрикой строится на офлайн-конверсиях: перехват ClientID на сайте, запись его в заказ, цели под статусы и регулярная выгрузка подтверждённых продаж с суммой. В результате отчёты Метрики и оптимизация Директа опираются на реальные деньги, а не на сырые заявки.
Мы настраиваем перехват идентификатора, проектируем цели под вашу воронку и автоматизируем выгрузку — веб-хуком, скриптом или готовым коннектором. Если нужно, чтобы реклама оптимизировалась по выполненным заказам, а не по отменённым, поможем связать CRM и Метрику корректно.
Частые вопросы
Чем офлайн-конверсия отличается от обычной цели?
Обычная цель достигается на сайте в реальном времени, а офлайн-конверсия загружается позже — когда заказ подтверждён в CRM. Она привязывается к прошлому визиту по ClientID.
Как получить ClientID из Метрики?
Асинхронным методом ym(id, 'getClientID', callback). Вызывать его нужно в колбэке после инициализации счётчика, иначе значение будет пустым.
Что если клиент заказал по телефону?
У такого заказа не будет ClientID, и в Метрику он попадёт без сшивки с визитом. Его можно грузить с меткой офлайн-канала или не грузить вовсе, если атрибуция невозможна.
В каком формате указывать время конверсии?
В секундах Unix и обязательно в прошлом. Частая ошибка — передать миллисекунды или будущее время, тогда Метрика отклонит строку.
Можно ли автоматизировать выгрузку без программиста?
Да, через коннекторы Albato или ApiX-Drive, которые ловят смену статуса в RetailCRM и отправляют конверсию в Метрику. Для больших объёмов надёжнее собственный скрипт на API.
Почему часть конверсий не подтянулась?
Обычно потому, что визита с таким ClientID нет в базе Метрики: клиент очистил cookie, сменил устройство или заказ слишком старый. Свежие заказы сшиваются заметно лучше.
Не сломает ли это существующие цели на сайте?
Нет. Офлайн-конверсии используют отдельные идентификаторы целей и не пересекаются с JS-целями. Их лучше разводить, чтобы не смешивать онлайн- и офлайн-достижения.
Поможем с настройкой и поддержкой RetailCRM
Поможем с настройкой, доработкой и поддержкой RetailCRM.