Яндекс Метрика собирает массу данных о трафике сайта, но её интерфейс не всегда удобен для глубокой аналитики: хочется свести статистику с рекламой, продажами из CRM и хранить историю без ограничений. Забрать данные к себе в базу помогает API.
В этой статье покажу, как выгружать данные из Яндекс Метрики через API на Python и складывать их в базу данных: ClickHouse, PostgreSQL или MySQL. Использовать будем бесплатную библиотеку morin, а начнём с простой демонстрации, которую можно запустить локально без сервера и без Docker.
Зачем выгружать данные из Яндекс Метрики
Интерфейс Метрики хорош для быстрых отчётов, но упирается в потолок:
- Сэмплирование на больших объёмах искажает цифры.
- Свести данные Метрики с другими источниками внутри интерфейса нельзя.
- Строить свои сложные срезы и метрики неудобно.
- Автоматизировать ежедневную выгрузку под дашборд руками невозможно.
Решение: забрать данные из Яндекс Метрики через API в свою базу данных и работать уже там.
Что такое API Яндекс Метрики
У Метрики есть API отчётов (Reporting API) - интерфейс, через который программа получает статистику счётчика в нужных разрезах. Через api яндекс метрики можно вытянуть посещения, источники трафика, конверсии и другие метрики по дням.
Работает api метрики так: вы задаёте измерения (dimensions) и метрики (metrics), отправляете запрос с OAuth-токеном и номером счётчика, а в ответ получаете данные. Библиотека morin прячет постраничную выгрузку и разбор ответа внутри.
Получаем доступ к API: токен и номер счётчика
Для работы с API Яндекс Метрики нужны два параметра:
- OAuth-токен - ключ авторизации.
- номер счётчика - идентификатор счётчика Метрики, данные которого забираем (тут он будет называться login).
OAuth-токен получают через Яндекс OAuth (можно получить по этой ссылке), номер счётчика виден в настройках Метрики. Токен даёт доступ к данным счётчика, поэтому храните его в секрете.
Устанавливаем библиотеку morin
pip install morinДрайверы для ClickHouse, PostgreSQL и MySQL ставятся автоматически вместе с morin, отдельно доустанавливать ничего не нужно.
Для первой демонстрации без базы хватит одной morin.
Бесплатный старт: получаем данные Яндекс Метрики на Python
Вытащим статистику счётчика в Python. Указываем измерения и метрики - что и в каком разрезе получить:
from morin import YMbyDate
ym = YMbyDate(
login='НОМЕР_СЧЁТЧИКА', # id счётчика Метрики
token='ВАШ_OAUTH_ТОКЕН',
add_name='site1',
start='2025-01-01',
report='date',
dimensions='ym:s:date', # разрез: по дате
metrics='ym:s:visits,ym:s:users,ym:s:pageviews', # метрики
)
stats = ym.get_data()
for row in stats[:5]:
print(row)На выходе - список словарей со статистикой по дням: визиты, пользователи, просмотры. Уже на этом этапе morin работает как обычный клиент api яндекс метрики. Измерения и метрики указываются через dimensions и metrics - можно выбрать нужный список параметров и показателей.
Загрузка данных Яндекс Метрики в ClickHouse
Давайте загрузим данные в БД. Начнём с ClickHouse - аналитической СУБД, которая отлично подходит под данные Метрики. Нужен запущенный ClickHouse: локально его поднимают одной командой Docker или ставят на сервер.
from morin import YMbyDate
ym = YMbyDate(
subd='clickhouse',
host='localhost', port='8123',
username='default', password='',
database='metrika',
add_name='site1',
login='НОМЕР_СЧЁТЧИКА',
token='ВАШ_OAUTH_ТОКЕН',
start='2025-01-01',
backfill_days=3,
report='date',
dimensions='ym:s:date',
metrics='ym:s:visits,ym:s:users,ym:s:pageviews',
)
ym.collecting_manager()Что делает collecting_manager:
- сам создаёт таблицу в ClickHouse и определяет столбцы по данным;
- работает по принципу Airflow - фиксирует собранные дни в служебной таблице;
- при повторном запуске догружает только недостающие дни;
backfill_daysперезабирает несколько последних дней.
То же самое в PostgreSQL и MySQL
Чтобы грузить не в ClickHouse, а в PostgreSQL или MySQL, меняется один параметр - subd.
Для PostgreSQL:
ym = YMbyDate(
subd='postgresql',
host='localhost', port='5432',
username='postgres', password='postgres',
database='metrika',
add_name='site1',
login='НОМЕР_СЧЁТЧИКА', token='ВАШ_OAUTH_ТОКЕН',
start='2025-01-01', backfill_days=3,
report='date',
dimensions='ym:s:date',
metrics='ym:s:visits,ym:s:users,ym:s:pageviews',
)
ym.collecting_manager()Для MySQL меняем subd на 'mysql' и порт на 3306. morin сама подберёт типы столбцов под выбранную базу данных.
Режимы отчёта и разрезы
У коннектора Метрики два режима, они задаются параметром report:
date- статистика по дням, обновляется инкрементально по датам (основной режим), функцияget_stat()nodate- сводная статистика за весь период без разбивки по дням, функцияget_data()
Что именно получить оеределяют dimensions (разрезы: дата, источник, страна, устройство, итд) и metrics (визиты, пользователи, просмотры, конверсии). Полный список полей есть в документации API Яндекс Метрики.
Автоматизация через Docker
Чтобы данные Метрики обновлялись сами каждый день, morin разворачивают в Docker - сбор идёт по расписанию, с логами и уведомлениями в Telegram. Подробно этот сценарий разобран в отдельной статье про коннекторы к API в ClickHouse на Docker.
FAQ
Как получить данные из Яндекс Метрики через API на Python?
Установите библиотеку morin (pip install morin), создайте объект YMbyDate с OAuth-токеном, номером счётчика, измерениями и метриками и вызовите метод get_data.
Что нужно для доступа к API Яндекс Метрики?
OAuth-токен и номер счётчика Метрики. Токен получают через Яндекс OAuth, номер счётчика виден в настройках Метрики.
В какую базу данных можно грузить данные Метрики?
Коннектор morin умеет ClickHouse, PostgreSQL и MySQL. База выбирается одним параметром subd.
Заключение
Мы разобрали, как выгружать данные из Яндекс Метрики через API на Python и грузить их в ClickHouse, PostgreSQL или MySQL с помощью бесплатной библиотеки morin. Задаёте измерения и метрики, выбираете базу одним параметром - и статистика счётчика копится в вашей базе данных. По такому же принципу morin работает с Директом, OZON, Wildberries и другими источниками.