В этой статье вы настроите передачу оплаченных сделок из CRM в Яндекс Метрику. Тогда Метрика узнает, какие визиты закончились оплатой, и эту цель можно будет выбрать для обучения стратегии в Директе. Методы сверены с документацией API Метрики в октябре 2026 года.
Зачем это нужно
Обычно Директ учится на заявках с сайта. Но заявка не равна продаже: часть заявок оказывается спамом или нецелевыми обращениями. Когда в Метрику приходят оплаты из CRM, рекламу можно оценивать и настраивать по реальным продажам. Окупаемость такого сценария удобно считать по формуле из статьи об окупаемости автоматизации.
Что понадобится
- Счётчик Метрики на сайте. Ваш логин должен быть владельцем или иметь гостевой доступ с правом редактирования.
- CRM с полем для ClientID и этапом «Оплачено».
- Доступ к коду формы на сайте.
- n8n на своём сервере.
Шаг 1. Сохранять ClientID в форме
ClientID назначает посетителю сама Метрика. Его нужно передать в CRM вместе с заявкой. Добавьте в форму скрытое поле и заполните его методом getClientID:
<input type="hidden" name="ym_client_id" id="ym_client_id">
<script>
ym(XXXXXXXX, 'getClientID', function(clientID) {
document.getElementById('ym_client_id').value = clientID;
});
</script>
Вместо XXXXXXXX укажите номер счётчика. Скрипт должен выполняться после кода счётчика. Затем настройте передачу поля ym_client_id в отдельное поле сделки в CRM. Если посетитель запретил cookie, ClientID может не прийти, поэтому сценарий должен уметь пропускать такие сделки.
Метрика работает через cookie, поэтому проверьте, что сбор данных посетителей отражён в политике обработки персональных данных и в уведомлении о cookie на сайте. Подробнее в статье о 152-ФЗ и автоматизации. Это общая информация, она не заменяет консультацию юриста.
Шаг 2. Создать цель
В Метрике создайте цель типа «JavaScript-событие» с условием «совпадает» и идентификатором, например crm_paid. Используйте латиницу, цифры и подчёркивание. Этот идентификатор вы будете передавать в колонке Target. Цель можно создать и через API методом POST /management/v1/counter/{counterId}/goals.
Шаг 3. Получить OAuth-токен
- На oauth.yandex.ru создайте приложение с вариантом «Для доступа к API или отладки».
- Выберите право metrika:offline_data. Оно разрешает только загрузку офлайн-данных, это минимальный нужный доступ.
- Откройте ссылку
https://oauth.yandex.ru/authorize?response_type=token&client_id=ИДЕНТИФИКАТОР_ПРИЛОЖЕНИЯпод логином с доступом к счётчику и скопируйте токен.
В n8n создайте доступ типа Header Auth:
- Name:
Authorization - Value:
OAuth ВАШ_ТОКЕН
Шаг 4. Подготовить файл
Метрика принимает CSV в кодировке UTF-8. В первой строке названия колонок.
| Колонка | Обязательна | Что содержит |
|---|---|---|
ClientId, UserId, Yclid или PurchaseId |
хотя бы одна | идентификатор посетителя, клика или покупки |
Target |
да | идентификатор цели |
DateTime |
да | время конверсии в Unix-формате, в секундах, только прошедшее |
Price |
нет | сумма, разделитель точка |
Currency |
нет | код валюты ISO 4217, например RUB |
Условный пример файла:
ClientId,Target,DateTime,Price,Currency
1712345678123456789,crm_paid,1791190800,45000.00,RUB
Шаг 5. Загрузить через API
curl -X POST \
-H "Authorization: OAuth $TOKEN" \
-F "file=@conversions.csv" \
"https://api-metrika.yandex.net/management/v1/counter/12345678/offline_conversions/upload?comment=crm"
Файл передаётся как multipart/form-data в поле file, размер до 1 ГБ. В ответе придёт объект uploading с id и status. Статус загрузки проверяется методом:
GET https://api-metrika.yandex.net/management/v1/counter/12345678/offline_conversions/uploading/{id}
Обработка занимает до 3 часов. Результат привязки каждой конверсии виден в отчёте «Офлайн-конверсии».
Шаг 6. Собрать сценарий в n8n
Удобнее загружать конверсии раз в день одним файлом:
- Schedule Trigger каждое утро.
- HTTP Request к CRM: сделки, перешедшие в «Оплачено» за прошедшие сутки, у которых не стоит отметка «передано в Метрику».
- Filter: только сделки с заполненным ClientID.
- Edit Fields (Set): колонки
ClientId,Target,DateTime,Price,Currency. Время оплаты в Unix-формате:
{{ Math.floor(new Date($json.paid_at).getTime() / 1000) }}
- Convert to File с операцией Convert to CSV.
- HTTP Request: метод POST, адрес загрузки, тело Form-Data, параметр типа n8n Binary File с именем
file. - Отметка «передано в Метрику» в каждой сделке, чтобы не загрузить её повторно.
Если CRM умеет отправлять вебхук при смене этапа, сделки можно копить по событию, а загружать по расписанию. Как получить сделки и отправить вебхук из CRM, описано в статьях об amoCRM и n8n и о Битрикс24 и n8n.
Ограничения
- 21 день. Конверсия, которая на момент загрузки старше периода учёта, к визиту не привяжется. Если от заявки до оплаты обычно проходит больше трёх недель, часть продаж Метрика не свяжет с рекламой.
- Только прошедшее время. Будущая дата в
DateTimeвызовет ошибку. - Задержка. Данные появляются в отчётах в течение 3 часов после загрузки.
Частые ошибки
- 401. В заголовке нет слова
OAuthперед токеном или токен перестал действовать после смены пароля. - 403. У токена нет права на загрузку или у логина нет доступа к счётчику.
- Конверсии не привязались. Нет идентификатора, ClientID взят с другого счётчика, конверсия старше 21 дня или
Targetне совпадает с идентификатором цели. - Время сдвинуто на несколько часов. В CRM дата хранится без часового пояса. Укажите пояс явно, например
+03:00, перед переводом в Unix-формат.
Частые вопросы
Сколько дней есть на загрузку офлайн-конверсии?
Метрика привязывает конверсии к визитам только в пределах периода учёта, это 21 день до момента загрузки. Загружайте данные не позднее 21 дня после конверсии, лучше каждый день.
Какой доступ нужен для загрузки офлайн-конверсий?
OAuth-токен с правом metrika:offline_data или metrika:write. Логин, на который выдан токен, должен быть владельцем счётчика или иметь гостевой доступ с правом редактирования.
Что делать, если ClientID в заявке не сохранился?
Можно передать другой идентификатор, UserId, Yclid или PurchaseId. Без хотя бы одного идентификатора конверсия не привяжется к визиту.