АвтопилотЛабстудия автоматизацииОбсудить задачу
Навигация по базе знаний

База знаний · Маркетплейсы и сервисы

Офлайн-конверсии в Яндекс Метрику из CRM через n8n

Как передавать офлайн-конверсии в Яндекс Метрику из CRM через n8n. ClientID в форме, цель, формат CSV, загрузка через API и срок в 21 день.

Опубликовано 4 мин чтения

В этой статье вы настроите передачу оплаченных сделок из 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-токен

  1. На oauth.yandex.ru создайте приложение с вариантом «Для доступа к API или отладки».
  2. Выберите право metrika:offline_data. Оно разрешает только загрузку офлайн-данных, это минимальный нужный доступ.
  3. Откройте ссылку 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

Удобнее загружать конверсии раз в день одним файлом:

  1. Schedule Trigger каждое утро.
  2. HTTP Request к CRM: сделки, перешедшие в «Оплачено» за прошедшие сутки, у которых не стоит отметка «передано в Метрику».
  3. Filter: только сделки с заполненным ClientID.
  4. Edit Fields (Set): колонки ClientId, Target, DateTime, Price, Currency. Время оплаты в Unix-формате:
{{ Math.floor(new Date($json.paid_at).getTime() / 1000) }}
  1. Convert to File с операцией Convert to CSV.
  2. HTTP Request: метод POST, адрес загрузки, тело Form-Data, параметр типа n8n Binary File с именем file.
  3. Отметка «передано в Метрику» в каждой сделке, чтобы не загрузить её повторно.

Если 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. Без хотя бы одного идентификатора конверсия не привяжется к визиту.

Готовые модули по теме