Search
Write a publication
Pull to refresh

Три уровня отслеживания в Яндекс Метрике: Level 2 — офлайн-конверсии

Level of difficultyMedium
Reading time4 min
Views216

Когда маркетолог говорит «давайте отслеживать всё», разработчик обычно слышит «давайте усложним жизнь прямо сегодня». И, как ни странно, оба правы. Потому что базовых целей в Яндекс.Метрике вроде «клик по кнопке» или «отправка формы» хватает ровно до того момента, пока бюджет на рекламу не становится больше бюджета на кофе в офисе.

В прошлой статье я рассмотрел самый простой вариант кастомизации целей, когда мы начинаем собирать не просто факт отправки, например, формы, но и смысл, с какими доп параметрами эта форма отправлялась. Сегодня рассмотрим вариант, когда события произошедшие уже офлайн, отправляются обратно в онлайн статистику Яндекс Метрики и обогащают ее. Это позволит делать рекламу и собирать аудитории в Яндекс Директе точнее еще на 30-35%.

А в своем Телеграм канале пишу еще больше про всякое из реального маркетинга.

Что это такое

Это способ подтянуть в Метрику данные о событиях, которые произошли за пределами сайта: звонки, сделки в CRM, визиты в шоурум.

Зачем это нужно маркетологам

Чаще всего это нужно для учёта продаж, которые закрывает отдел продаж — например, в B2B, недвижимости или автосфере. Также часто используется связка «онлайн-заявка → подтверждённая сделка в CRM», чтобы видеть реальный результат рекламных кампаний. Ещё один пример — коллтрекинг с последующей привязкой звонка к конкретному визиту на сайте.

Ограничения

  • Нужен ClientID или UserID, чтобы связать офлайн-событие с визитом. Т.е. стоит позаботиться его сбором заранее.

  • Данные попадают в Метрику с задержкой (до 6 часов).

  • 100% соответствие визитов и офлайн-событий не всегда достижимо. Более того потеря до 20% конверсий вполне нормальна.

Пример кода (Python, загрузка CSV в Метрику через API)

# Токен и ID счётчика
TOKEN = "ваш_oauth_токен"
COUNTER_ID = "12345678"

# CSV-файл с офлайн-конверсиями
files = {
    'file': open('offline_conversions.csv', 'rb')
}

# Запрос к API Метрики
url = f"https://api-metrika.yandex.net/management/v1/counter/{COUNTER_ID}/offline_conversions/upload"

headers = {
    "Authorization": f"OAuth {TOKEN}"
}

response = requests.post(url, headers=headers, files=files)

print(response.status_code)
print(response.json())

Кейc: автосалон и подтверждённые заявки

Представим (на самом деле даже не представим, а у меня был совершенно конкретный автосалон, но он пожелал остаться инкогнито))) автосалон, который получает лиды с сайта через форму «Запишись на тест-драйв». Пользователь оставляет заявку онлайн, но окончательная сделка закрывается офлайн, когда менеджер договаривается о покупке автомобиля.

Задача: привязать каждую офлайн-сделку к визиту, чтобы маркетолог видел, какие каналы приносят реальные продажи, а не просто заявки.

Для этого нужен ClientID или UserID, который мы собираем на сайте сразу при заполнении формы.

Скрипт для сбора ClientID и UserID

// Получаем ClientID Метрики
ym(12345678, 'getClientID', function(clientId) {
    
    // Генерация собственного UserID для авторизованных пользователей
    function getOrCreateUserId() {
        // Обычно UserID берём из авторизации на сайте
        // Если нет, генерируем уникальный
        return 'user_' + Date.now() + '_' + Math.floor(Math.random()*1000);
    }

    var userId = getOrCreateUserId();

    // Формируем строку CSV: client_id,user_id,timestamp
    var timestamp = new Date().toISOString();
    var csvLine = `"${clientId}","${userId}","${timestamp}"\n`;

    // Отправляем CSV на сервер через fetch для последующего хранения
    fetch('/save_ids_csv', {
        method: 'POST',
        headers: {
            'Content-Type': 'text/csv'
        },
        body: csvLine
    })
    .then(response => console.log('ClientID/UserID сохранены в CSV', response.status))
    .catch(error => console.error('Ошибка при сохранении ClientID/UserID', error));
});

В скрипте привел пример как собирать их просто в таблику, дальше уже модифицируете самостоятельно, чтобы собирать это все в вашу CRM.

Теперь у нас есть постоянный ClientID для визита и уникальный UserID для зарегистрированного пользователя. Эти значения сохраняются локально и потом передаются при загрузке офлайн-конверсий.

Пример загрузки офлайн-конверсии в Метрику (Python, CSV через API)

CSV может выглядеть так:

client_id,user_id,goal_name,goal_time,param1,param2
1234567890,,test_drive,2025-08-18T12:34:00,car_model:BMW_X5,deal_amount:55000
, user_987654321,test_drive,2025-08-18T12:50:00,car_model:Audi_Q7,deal_amount:72000

Python-код для загрузки:

import requests

TOKEN = "ваш_oauth_токен"
COUNTER_ID = "12345678"

files = {
    'file': open('offline_conversions.csv', 'rb')
}

url = f"https://api-metrika.yandex.net/management/v1/counter/{COUNTER_ID}/offline_conversions/upload"

headers = {
    "Authorization": f"OAuth {TOKEN}"
}

response = requests.post(url, headers=headers, files=files)

print(response.status_code)
print(response.json())

Настройки в Метрике

  • Цели, по которым будут загружаться офлайн-конверсии, должны быть созданы заранее в интерфейсе Метрики.

  • В настройках счётчика убедитесь, что разрешено использовать API для загрузки офлайн-конверсий. Настройка → Загрузка данных

  • Для корректной привязки событий к визитам обязательно передавать ClientID или UserID.

  • Для удобного анализа создайте отдельные сегменты по типу офлайн-конверсий и параметрам (car_model, deal_amount), чтобы маркетолог сразу считал ROI по каналам.

Где смотреть результат в Метрике

  1. В отчётах Метрики выберите счётчик, куда загружали офлайн-конверсии.

  2. Перейдите в Отчёты → Цели. Здесь будут видны все события, включая офлайн-конверсии, с переданными параметрами (param1, param2).

  3. Если хотите связать визиты с офлайн-событиями по UserID, нужно убедиться, что этот параметр передаётся в CSV и корректно отображается в отчётах.

На сегодня пока достаточно. В следующий раз поговорим об уровне когда вы становитесь полновластным владельцем визитов своих пользователей на сайте и вручную можете отправлять в статистику любые важные для вас данные, не только на сайте, но и за пределами его в любых других системах, без каких-либо ограничений, главное не забывайте собирать user и clientID.

Tags:
Hubs:
+4
Comments0

Articles