API Яндекс Метрики API

Отрасль: Реклама и аналитика. Актуально на 2026-10-24.

API веб-аналитики Яндекс Метрики: API управления (счётчики, цели), API отчётов (таблицы, данные по времени, drill down, сравнение сегментов) и Logs API для выгрузки сырых данных о визитах и хитах. Ответы — UTF-8, JSON по умолчанию, отчёты также в CSV (суффикс .csv в пути).

Сценарии

Получить посещаемость и источники трафика за период

Визиты, посетители и источники — для своего дашборда или отчёта клиенту.

  1. Получи OAuth-токен с доступом к Метрике и передавай его в заголовке Authorization: OAuth <токен>.
  2. Узнай ID счётчика: GET /management/v1/counters — в counters[] id и название.
  3. Запроси отчёт: GET /stat/v1/data с ids, metrics (например, ym:s:visits,ym:s:users,ym:s:bounceRate), dimensions (ym:s:lastTrafficSource), date1 и date2.
  4. В ответе data[] — для каждой строки dimensions и metrics, итоги — в totals. sampled = true значит, что отчёт построен по выборке; accuracy = full даёт точные данные, но медленнее.
  5. Метрики визитов (ym:s:) и хитов (ym:pv:) в одном запросе смешивать нельзя. Для CSV добавь .csv к пути.
curl -G https://api-metrika.yandex.net/stat/v1/data \
  -H "Authorization: OAuth $METRIKA_TOKEN" \
  -d ids=44147844 \
  -d metrics=ym:s:visits,ym:s:users,ym:s:bounceRate \
  -d dimensions=ym:s:lastTrafficSource \
  -d date1=2026-10-01 -d date2=2026-10-23 -d accuracy=full

Построить график посещаемости по дням

Динамика визитов или конверсий во времени для графика.

  1. Запроси данные: GET /stat/v1/data/bytime с теми же ids, metrics и датами плюс group = day (или week, month, hour).
  2. В ответе для каждой метрики — массив значений по периодам; даты периодов — в time_intervals.
  3. С dimensions можно получить отдельные ряды по группировке (например, по источникам): top_keys задаёт, сколько рядов вернуть (до 30).
curl -G https://api-metrika.yandex.net/stat/v1/data/bytime \
  -H "Authorization: OAuth $METRIKA_TOKEN" \
  -d ids=44147844 -d metrics=ym:s:visits -d date1=30daysAgo -d date2=yesterday -d group=day

Посчитать конверсию по целям

Сколько визитов закончилось заявкой или покупкой — по источникам и кампаниям.

  1. Получи цели счётчика: GET /management/v1/counter/{counterId}/goals — id, name и type каждой цели.
  2. Запроси отчёт: GET /stat/v1/data с metrics вида ym:s:goal<ID цели>reaches и ym:s:goal<ID цели>conversionRate и нужными dimensions, например ym:s:lastTrafficSource.
  3. Новый счётчик для сайта создаётся через POST /management/v1/counters с counter.name и counter.site2.site.
curl -G https://api-metrika.yandex.net/stat/v1/data \
  -H "Authorization: OAuth $METRIKA_TOKEN" \
  -d ids=44147844 \
  -d 'metrics=ym:s:visits,ym:s:goal123456reaches,ym:s:goal123456conversionRate' \
  -d dimensions=ym:s:lastTrafficSource -d date1=2026-10-01 -d date2=2026-10-23

Выгрузить сырые визиты через Logs API

Неагрегированные данные о каждом визите или хите — для своего хранилища и сквозной аналитики.

  1. Проверь, можно ли выгрузить: GET /management/v1/counter/{counterId}/logrequests/evaluate с date1, date2 (не сегодняшний день, период до года), fields (например, ym:s:visitID,ym:s:dateTime,ym:s:lastTrafficSource,ym:s:goalsID) и source = visits.
  2. Создай запрос: POST /management/v1/counter/{counterId}/logrequests с теми же параметрами. В ответе log_request с request_id.
  3. Опрашивай статус: GET /management/v1/counter/{counterId}/logrequest/{requestId}, пока status не станет processed. Тогда в parts[] — номера частей.
  4. Скачай каждую часть: GET /management/v1/counter/{counterId}/logrequest/{requestId}/part/{partNumber}/download — данные в TSV.
  5. После скачивания очисти запрос: POST /management/v1/counter/{counterId}/logrequest/{requestId}/clean — подготовленные логи занимают квоту.
H="Authorization: OAuth $METRIKA_TOKEN"
API=https://api-metrika.yandex.net/management/v1/counter/44147844
FIELDS=ym:s:visitID,ym:s:dateTime,ym:s:clientID,ym:s:lastTrafficSource,ym:s:goalsID

REQ=$(curl -s -X POST "$API/logrequests?date1=2026-10-01&date2=2026-10-23&source=visits&fields=$FIELDS" -H "$H" | jq -r .log_request.request_id)
curl -s "$API/logrequest/$REQ" -H "$H" | jq .log_request.status        # повторять до processed
curl -s "$API/logrequest/$REQ/part/0/download" -H "$H" -o visits-part0.tsv
curl -s -X POST "$API/logrequest/$REQ/clean" -H "$H"

Базовые URL

Авторизация

Тип: OAuth 2.0

OAuth-токен Яндекса передаётся в заголовке Authorization в каждом запросе. Без токена или с недействительным токеном сервер отвечает 401.

Authorization: OAuth <токен>

Методы

GET /management/v1/counters — Список счётчиков

В ответе: rows (всего счётчиков) и counters[] (id, name, status, type, owner_login, permission и др.).

Параметр Где Тип Обяз. Описание
counter_ids query array нет ID счётчиков, которые нужно вернуть
favorite query boolean нет Только избранные, по умолчанию false
field query string нет Доп. поля: goals,mirrors,grants,filters,operations,counter_flags,measurement_tokens
label_id query integer нет Фильтр по метке
offset query integer нет Номер первого элемента (с 1), по умолчанию 1
per_page query integer нет Счётчиков в ответе, по умолчанию 1000, максимум 10 000
permission query string нет own, view, edit; можно несколько через запятую
search_string query string нет Поиск по ID, названию, адресу сайта
sort query string нет None, Default, Visits, Hits, Uniques, Name
status query string нет Active (по умолчанию) или Deleted
type query string нет simple или partner

POST /management/v1/counters — Создание счётчика

Параметр Где Тип Обяз. Описание
field query string нет Доп. поля ответа
ytm query boolean нет Использовать систему управления тегами, по умолчанию false
counter.name body string нет Название счётчика, до 255 символов
counter.site2.site body string нет Полный домен сайта, до 255 символов

GET /management/v1/counter/{counterId}/goals — Список целей

В ответе — goals[]: id, name, type, default_price, goal_source, is_favorite, status и поля, зависящие от типа цели.

Параметр Где Тип Обяз. Описание
counterId path integer да ID счётчика
useDeleted query boolean нет Включать удалённые цели, по умолчанию false

GET /stat/v1/data — Отчёт «Таблица»

В ответе: data[] (dimensions[] и metrics[]), totals, total_rows, sampled, sample_share, query, contains_sensitive_data и др.

Параметр Где Тип Обяз. Описание
ids query array нет ID счётчиков через запятую
metrics query string нет Метрики через запятую, до 20
dimensions query string нет Группировки через запятую, до 10
date1 query string нет Начало периода: YYYY-MM-DD, today, yesterday, ndaysAgo; по умолчанию 6daysAgo
date2 query string нет Конец периода, по умолчанию today
filters query string нет Фильтр сегментации
sort query string нет Поля сортировки; - — по убыванию
limit query string нет Строк на странице, по умолчанию 100, максимум 100 000
offset query string нет Первая строка (с 1)
accuracy query string нет Размер выборки (семплирование)
preset query string нет Шаблон отчёта, например sources_summary
lang query string нет Язык ответа
timezone query string нет Часовой пояс ±hh:mm, + передаётся как %2B
direct_client_logins query array нет Логины клиентов Яндекс Директа
include_undefined query boolean нет Строки с неопределёнными значениями
proposed_accuracy query boolean нет Разрешить API повышать accuracy

Пример запроса:

https://api-metrika.yandex.net/stat/v1/data.csv?id=44147844&metrics=ym:s:avgPageViews&dimensions=ym:s:operatingSystem&limit=5

GET /stat/v1/data/bytime — Данные по времени

Параметры как у /stat/v1/data, плюс:

Также доступны GET /stat/v1/data/drilldown (ветвь древовидного отчёта), /stat/v1/data/comparison и /stat/v1/data/comparison/drilldown (сравнение сегментов).

Параметр Где Тип Обяз. Описание
group query string нет Шаг разбивки: all, auto, minute, hour, day, week (по умолчанию), month, quarter, year и др.
top_keys query string нет Число строк без row_ids, по умолчанию 7, максимум 30
row_ids query array нет Выбор строк для графиков
include_annotations query string нет Включать примечания

GET /management/v1/counter/{counterId}/logrequests/evaluate — Оценка возможности выгрузки логов

Параметр Где Тип Обяз. Описание
counterId path integer да ID счётчика
date1 query string да Первый день, например 2016-01-01
date2 query string да Последний день (не текущий)
fields query string да Поля через запятую, например ym:pv:dateTime,ym:pv:referer
source query string да hits (события) или visits (визиты)

POST /management/v1/counter/{counterId}/logrequests — Создание запроса логов

В ответе — log_request: request_id, counter_id, status, size, parts.

Параметр Где Тип Обяз. Описание
counterId path integer да ID счётчика
date1 query string да Первый день периода
date2 query string да Последний день (не текущий)
fields query string да Поля через запятую, до 3000 символов
source query string да hits или visits
attribution query string нет Модель атрибуции: FIRST, LAST, LASTSIGN, LAST_YANDEX_DIRECT_CLICK, AUTOMATIC и др.

GET /management/v1/counter/{counterId}/logrequest/{requestId} — Информация о запросе логов

Статусы: created, canceled, processed, cleaned_by_user, cleaned_automatically_as_too_old, processing_failed, awaiting_retry. Для processed в parts[] — номера и размеры частей.

Параметр Где Тип Обяз. Описание
counterId path integer да ID счётчика
requestId path integer да ID запроса логов

GET /management/v1/counter/{counterId}/logrequest/{requestId}/part/{partNumber}/download — Скачивание части логов

Параметр Где Тип Обяз. Описание
counterId path integer да ID счётчика
requestId path integer да ID запроса логов
partNumber path integer да Номер части

POST /management/v1/counter/{counterId}/logrequest/{requestId}/clean — Очистка подготовленных логов

Параметр Где Тип Обяз. Описание
counterId path integer да ID счётчика
requestId path integer да ID запроса логов

Нюансы

Ошибки

Код Описание
invalid_parameter 400 — параметр задан некорректно
missing_parameter 400 — не передан обязательный параметр
filter_limits 400 — слишком сложный фильтр
query_error 400 — слишком сложный запрос
too_much_rows 400 — запрос читает слишком много данных
invalid_json 400 — неверный JSON (API управления)
limit_exceeded 400 — превышен лимит целей, операций или фильтров
unauthorized 401 — пользователь не авторизован
access_denied 403 — доступ запрещён
invalid_token 403 — неверный OAuth-токен
not_found 404 — объект не найден
not_acceptable 406 — формат не поддерживается
conflict 409 — нарушена целостность данных
quota_requests_by_uid 429 — исчерпан суточный лимит пользователя
quota_requests_by_ip 429 — превышен секундный лимит для IP
quota_parallel_requests 429 — превышен лимит параллельных запросов
backend_error 503 — сбой на стороне сервера
timeout 504 — запрос не уложился во время

Ограничения

Источники


Если этого недостаточно — официальная документация: https://yandex.ru/dev/metrika/ru/ JSON: https://mcp-everything.ru/api/integrations/yandex-metrika. MCP: https://mcp-everything.ru/mcp