Москва+7 495 215-10-97
Стриминг сырых данных Яндекс Метрики: как забрать хиты, визиты и медийные post-view в свой ClickHouse

Стриминг сырых данных Яндекс Метрики: как забрать хиты, визиты и медийные post-view в свой ClickHouse

19.08.2026

9 мин

Егор Дёмин

Егор Дёмин

Аналитик данных с опытом автоматизации маркетинговой аналитики. Специализируется на работе с рекламными системами, настройке сквозной аналитики и разработке автоматизированных отчётов. Использует Python и SQL для обработки данных — от сбора статистики через API до визуализации в различных BI-системах. Разрабатывает интеллектуальные Telegram-боты с интеграцией нейросетей и подключением к различным базам данных.

Опыт работы:
3 года

Введение

Забрать данные из Метрики можно тремя способами, и все они рабочие. API отчётов отдаёт агрегаты: визиты, источники, достижения целей по нужным группировкам. Logs API отдаёт неагрегированные хиты и визиты, если нужна своя логика поверх сырых событий. Поверх обоих API живут готовые коннекторы, которые складывают данные в хранилище по расписанию.

Упираются в потолок обычно не в удобстве, а в лимитах. У Logs API общая квота на счётчик составляет 10 ГБ подготовленных данных, период одного запроса до года, а статистика текущего дня недоступна: она ещё неполная, и Метрика прямо рекомендует запрашивать прошлые дни. Для крупного трафика и для задач, где важна свежесть, этого мало.

Здесь и появляется Метрика Про. Пакет поднимает квоты, добавляет потоковую передачу неагрегированных данных прямо в ваш ClickHouse и открывает API отчётов Метрики для медийной рекламы, а вместе с ним post-view конверсии, которых нет ни в одном отчёте по сайту.

Дальше по порядку: что входит в пакет, что можно стримить, какие поля появляются сверх Logs API, как забирать медийную статистику и на что смотреть, чтобы цифры в отчёте сходились.

Медийной рекламы у вас нет?

Первая половина статьи про стриминг сырых данных счётчика, она пригодится и без медийки. Если медийных размещений нет, разделы про Метрику для медийной рекламы можно пропустить.

Что входит в Метрику Про

Метрика Про, это пакет расширений поверх обычной Метрики. Вот что в него входит:

Возможности пакета Метрика Про: интеграция с Yandex Cloud, расширенные лимиты, данные без семплирования, API отчётов для медийной рекламы

Аналитику из этого списка интересны четыре пункта.

Интеграция с Yandex Cloud. Тот самый стриминг неагрегированных данных в управляемый кластер ClickHouse, без ограничения по объёму.

Расширенные квоты. Цели 1000 вместо 200, сегменты 1000 вместо 500, события в визите 3000 вместо 1000, запросы к API 20 000 вместо 5000, дашборды на счётчик 100 вместо 5. Выгрузка Logs API поднимается с 10 до 100 ГБ.

Полные данные отчётов без семплирования и Роботность Про, более строгая оценка качества трафика.

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

Цена на странице пакета указана от 300 000 ₽ в месяц за объём до 500 миллионов хитов, кластер в Yandex Cloud оплачивается отдельно. Подключение идёт через маркетплейс Yandex Cloud или через сертифицированных партнёров.

Стриминг сырых данных: чем он отличается от Logs API

Интеграция передаёт неагрегированные данные счётчика в ваш ClickHouse-кластер в Yandex Cloud. Работает в двух режимах:

Справка Метрики про Data Streaming: потоковая передача с задержкой до 15 минут и выгрузка архивных данных

Поток. Задержка от события на сайте до строки в ClickHouse составляет до 15 минут. Объём не ограничен.

Архивная выгрузка. Данные счётчика за всё время его жизни или за выбранный интервал. Запускают её в личном кабинете Метрики Про, вкладка «Интеграции с Облаком».

Дело тут не в одной скорости. Logs API, это выгрузка: вы формируете запрос, ждёте подготовку, скачиваете файл и складываете его в хранилище сами, укладываясь в квоту. Стриминг, это подписка: данные идут в вашу таблицу постоянно, свежие через четверть часа, без ограничения по объёму. И набор полей у стриминга шире, справка так и называет его расширенным по сравнению с Logs API.

Форматы несовместимы

Стриминг не обратно совместим с Logs API по формату данных. Если пайплайн на Logs API у вас уже собран, вьюхи и витрины поверх новых таблиц придётся переписывать. Поменять адрес источника и жить дальше не выйдет.

Технически цепочка выглядит так: Метрика отдаёт данные в свой брокер, оттуда их забирает Data Transfer в Yandex Cloud и пишет в ClickHouse. Схема из справки:

Схема работы Data Streaming: Metrica Backend и LogBroker передают данные в Data Transfer, который пишет их в ClickHouse

По ролям тут разведено удобно: администратор счётчика выдаёт OAuth-токен с правом на редактирование, а доступ к самому кластеру и данным в нём вы раздаёте уже средствами облака. Аналитики получают данные и при этом не лезут в настройки счётчика.

Какие поля можно грузить

Данные доступны на двух уровнях: хиты (события) и визиты. Набор полей вы выбираете сами при настройке. Три категории справка отдельно отмечает как расширение по сравнению с Logs API:

Таблица расширенного набора полей стриминга: данные контентной аналитики, детализация источников, данные о клиентах и заказах из CRM

Контентная аналитика: тематики и авторы статьи, источник трафика, переходы на другие статьи, идентификатор статьи, с которой перешли, время просмотра и доскроллы. Детализация источников: YCLID, идентификатор объявления, площадка размещения, переход по QR-коду. Данные о клиентах и заказах из CRM: Hash OrderID и Hash UserID, версия и статус заказа, время создания и изменения, названия и количество товаров.

Остальное, что обычно берут, знакомо по Logs API: WatchID, VisitID, CounterID, UTM-метки, DirectCLID, GCLID, SBCLID, URL, Title, Referer, GoalsReached, ParsedParams.Key1 до ParsedParams.Key10, поля электронной коммерции. Полные списки полей лежат в справке отдельными страницами для хитов и для визитов, там же указано, с какой даты поле доступно.

Для контентных проектов разница заметнее всего: доскроллы, время чтения и переходы между статьями обычно собирают своими событиями, а тут они приезжают из коробки.

Как включить стриминг

Порядок действий такой:

  1. Подключить Метрику Про или отдельно Data Streaming.
  2. Создать кластер ClickHouse в Yandex Cloud.
  3. Настроить подключение к созданному кластеру.
  4. В Data Transfer подключить источник: выбрать тип данных (хиты или визиты), нужные поля, счётчики, OAuth-токен пользователя с доступом к счётчику на редактирование, а для исторической выгрузки ещё и диапазон дат.
  5. Связать источник и приёмник трансфером: Репликация для потока, Копирование для истории.
  6. Настроить мониторинг состояния трансфера и алерты.
  7. Запустить трансфер.

Про архивную выгрузку

Одновременно можно выполнить не больше 10 выгрузок, а доступный период начинается более чем за 7 дней до текущей даты. Пример из справки: 14 августа выгрузить можно данные до 6 августа включительно. Свежие дни закрывает поток, архивом их не догнать.

Шестой шаг с мониторингом не формальность. В Data Transfer есть метрики и логи трансфера, и смотреть стоит на них, а не на то, что задача в вашем оркестраторе зелёная.

Медийная реклама: то, чего нет в данных сайта

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

Зачем её забирать, если интерфейс есть? Затем, что медийку не измерить кликами. Человек увидел баннер, а пришёл через неделю из поиска или напрямую, и по обычной модели заявку запишет себе поиск. Медийная Метрика умеет привязывать конверсии к просмотру:

Определения post-view и post-click в справке Метрики для медийной рекламы, окна атрибуции 90 и 30 дней

Post-view, это целевое действие после просмотра рекламы. Post-click, после клика. Приоритет у клика: если конверсия попала в окно post-click, она уходит к клику, если не попала, но попала в окно post-view, уходит к показу, а если вышла за оба окна, не привяжется никуда.

Схема окон атрибуции: конверсия внутри окна после клика идёт в post-click, внутри окна после просмотра в post-view, за пределами окон не засчитывается

Максимальные окна: 90 дней для просмотра и 30 дней для клика. Задаются они в параметрах рекламодателя:

Настройка окон атрибуции в параметрах рекламодателя: 30 дней для post-click и 90 дней для post-view

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

Как забирать медийную статистику

Данные приходят обычным запросом к https://api.media.metrika.yandex.net/v1/stat/data. Метрики и группировки идут с префиксом am:e:, ответ в JSON или CSV. Кроме таблицы есть drilldown и метод /v1/stat/data/bytime, который отдаёт разбивку по времени.

Что есть в списке группировок и метрик:

  • группировки: площадка am:e:placement, тип рекламы am:e:advType, креатив am:e:creative, домен am:e:domain, регионы am:e:regionCountry, am:e:regionArea, am:e:regionCity, устройство, браузер, ОС, а также соцдем: пол, возраст, доход, интересы;
  • метрики: показы am:e:renders, клики am:e:clicks, охват am:e:users, частота am:e:renderFrequency, am:e:ctr, am:e:cpm, am:e:cpc, и по каждой цели сразу три величины: am:e:goal<goal_id>Reaches, am:e:goal<goal_id>ReachesPostClick, am:e:goal<goal_id>ReachesPostView, плюс конверсии и стоимость цели.

Рабочий минимум на Python:

import requests
 
URL = "https://api.media.metrika.yandex.net/v1/stat/data"
 
params = {
    "ids": CAMPAIGN_ID,          # идентификатор медийной кампании
    "date1": date_from,          # ретро-окно, обычно последние 30 дней
    "date2": date_to,
    "dimensions": "am:e:placement,am:e:advType",
    "metrics": (
        "am:e:renders,am:e:clicks,am:e:users,"
        f"am:e:goal{GOAL_ID}Reaches,"
        f"am:e:goal{GOAL_ID}ReachesPostClick,"
        f"am:e:goal{GOAL_ID}ReachesPostView"
    ),
    "accuracy": "full",
    "limit": 100000,
    "offset": 1,
}
 
rows = []
while True:
    r = requests.get(URL, headers={"Authorization": f"OAuth {TOKEN}"},
                     params=params, timeout=(60, 180))
    r.raise_for_status()
    page = r.json().get("data", [])
    if not page:
        break
    rows.extend(page)
    if len(page) < params["limit"]:
        break
    params["offset"] += len(page)

Три момента, которые стоит заложить сразу:

  • accuracy=full и явная пагинация через offset. На широких разрезах без этого легко получить часть данных и не заметить;
  • ретро-окно вместо «за вчера»: забираем последние 30 дней и перед вставкой удаляем этот же период в таблице. Тогда джоб можно перезапускать сколько угодно, данные не задвоятся;
  • ретраи на 5xx с растущей паузой. Медийный API отвечает медленнее обычного, таймаут в минуту с лишним тут норма.

Как всё это укладывается в одно хранилище

Получается два потока, которые встречаются в ClickHouse и превращаются в витрину:

Схема: сырые данные счётчика через Data Streaming и медийная статистика через API отчётов попадают в ClickHouse, оттуда в витрину и дашборд

Правило простое: каждую цифру берём из той системы, которая её реально считает. Расход и клики из рекламного кабинета, охват и post-view из медийной Метрики, поведение на сайте из сырых данных счётчика. Начнёте дублировать, цифры разъедутся, и отчёту перестанут верить.

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

SELECT
    date,
    placement                             AS platform,
    'Пост-вью'                            AS attribution_type,
    0                                     AS cost,
    renders                               AS impressions,
    users                                 AS reach_daily,
    goal_post_view                        AS conversions
FROM media_metrica_daily
 
UNION ALL
 
SELECT
    date,
    platform,
    'Пост-клик'                           AS attribution_type,
    cost,
    impressions,
    0                                     AS reach_daily,
    goal_reaches                          AS conversions
FROM site_and_ads_daily

Дальше attribution_type становится фильтром на дашборде, и одна витрина отвечает на два разных вопроса: сколько заявок принёс перформанс и сколько всего касаний привело к действию, включая тех, кто не кликал.

Что показывать в отчёте

Первым делом соберите конверсии по неделям и разделите их по модели атрибуции. Так сразу видно, какую часть результата вы раньше не считали вовсе:

Столбчатая диаграмма: конверсии по неделям с разделением на post-click и post-view

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

Дальше идёт скучная на вид таблица по площадкам: охват, показы, частота, post-view, CPA. Именно она показывает, кто из площадок только мелькает перед аудиторией, а кто доводит до заявки. Рядом стоит держать стоимость контакта против плана: для медийных кампаний это чаще главный KPI, чем конверсии, и считать её нужно на охвате из медийной Метрики, а не на показах из кабинета.

А когда в ClickHouse лежат сырые хиты, появляется отчёт, которого в интерфейсе нет вообще: сколько визитов и дней проходит между первым касанием и целью. Не среднее по больнице, а распределение.

На что смотреть, чтобы цифры сходились

Дальше несколько тонкостей, которые всплывают уже на данных. Ничего особенного, но узнать о них лучше заранее, а не когда отчёт уже собран.

Охват живёт в am:e:users, метрики am:e:reach в API нет. Заглянуть в список группировок и метрик стоит заранее: там есть users, renders, renderFrequency, но не reach. И главное, охват считается внутри выбранного среза. Если группируете по дням, сумма за период будет суммой дневных охватов, а не числом уникальных людей. Метрику в BI лучше так и назвать, чтобы её никто не сложил по ошибке.

Показы медийки не смешиваются с показами контекста. Стоит вылить их в один столбец, и CTR по всему аккаунту падает в разы, а стоимость контакта считается по неверной базе. Медийные строки должны жить своим измерением, иначе агрегаты по кабинету теряют смысл.

Клики в медийном отчёте и в рекламном кабинете считаются по-разному. Расхождение бывает кратным, и это не повод искать виноватого: события считают разные системы. Поэтому расход и клики берите из кабинета, а охват и post-view из медийной Метрики.

Post-view и post-click нельзя складывать бездумно. Внутри одной кампании Метрика конверсии не дублирует, но если одновременно идут две кампании, конверсия привяжется и к первой, и ко второй. Складываете кампании в общий итог, получаете сумму больше реального числа заявок. Лечится признаком модели атрибуции в витрине и договорённостью, какой источник конверсий главный для канала.

Конверсии дописываются задним числом. Окно post-view до 90 дней означает, что цифры за прошлый месяц ещё будут меняться. Загрузка «только за вчера» этих правок не увидит никогда, поэтому и нужно ретро-окно.

Кросс-девайс включился 13 сентября 2023 года. Сравнивая динамику с более ранними периодами, помните, что до этой даты конверсии считались иначе.

Итог

Метрика Про решает две разные задачи. Первая, объём и свежесть: сырые данные больше не надо выгружать кусками в пределах квоты, они сами приезжают в ваш ClickHouse с задержкой до 15 минут, и полей в них больше, чем отдаёт Logs API. Вторая, медийная реклама: post-view, охват и площадки становятся обычными строками витрины рядом с контекстом, а не отдельной вкладкой, куда никто не заходит.

Технически подключение занимает несколько дней. Дольше всего обычно идут договорённости: какая модель атрибуции где применяется, какая система считает какую метрику, как часто перезаливается история. Зато после этого медийку наконец можно обсуждать теми же цифрами, что и остальные каналы.

Поможем подключить Метрику Про и настроить выгрузки

Стриминг сырых данных в ваш ClickHouse, медийная статистика по API, витрины и отчёты

+7

Узнавайте первыми
о полезных материалах и новостях

Другие материалы