Данные VK Ads через API в ClickHouse, Postgres и MySQL на Python

Данные VK Ads через API в ClickHouse, Postgres и MySQL на Python

Сервис VK Ads (бывший myTarget и реклама ВКонтакте) даёт подробную статистику по кампаниям, но для сквозной аналитики её удобнее забрать к себе в базу: свести с продажами, посчитать ДРР, хранить историю. Помогает в этом API.

В этой статье покажу, как выгружать статистику из VK Ads через API на Python и складывать её в базу данных: ClickHouse, PostgreSQL или MySQL. Использовать будем бесплатную библиотеку morin, а начнём с простой демонстрации, которую можно запустить локально без сервера и без Docker.

Зачем выгружать данные из VK Ads

Кабинет VK Ads хорош для управления рекламой, но не для аналитики:

  • Свести расходы на рекламу с продажами внутри кабинета нельзя.
  • Хранить историю по всем кампаниям за всё время неудобно.
  • Строить свои метрики (ДРР, ROMI) и срезы невозможно.
  • Автоматизировать ежедневную выгрузку под дашборд руками нельзя.

Решение: забрать статистику из VK Ads через API в свою базу данных и работать уже там.

Что такое API VK Ads

API VK Ads - это интерфейс, через который программа получает данные рекламного кабинета напрямую. Через vk ads api можно вытянуть список кампаний, групп объявлений и баннеров, а также статистику показов, кликов и расходов по ним.

Работает это так: вы отправляете HTTP-запрос с токеном, а в ответ получаете данные в JSON. Библиотека morin прячет постраничную выгрузку и разбор ответов внутри, отдавая готовые строки для базы данных.

Получаем доступ к API: токен

Для работы с API VK Ads нужен один параметр - токен доступа (access token). Он берётся в разделе доступа к API рекламного кабинета VK Ads. Токен даёт доступ к данным кабинета, поэтому храните его в секрете.

Устанавливаем библиотеку morin

pip install morin

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

Бесплатный старт: получаем данные VK Ads на Python

Вытащим данные кабинета в Python. База и Docker пока не нужны, всё запускается локально и бесплатно.

from morin import VKbyDate

vk = VKbyDate(
    token='ВАШ_ТОКЕН_VK_ADS',
    add_name='account1',
    start='2025-01-01',
)

Список кампаний. Проверим доступ:

campaigns = vk.get_campaigns_list()
for c in campaigns[:5]:
    print(c)

Статистика по кампаниям за день:

stat = vk.get_campaigns_stat('2025-06-01')
print(f'Строк статистики: {len(stat)}')

На выходе - списки словарей, готовые к анализу. Уже на этом этапе morin работает как обычный клиент vk ads api.

Загрузка данных VK Ads в ClickHouse

Сложим статистику в базу. Начнём с ClickHouse - аналитической СУБД, которая отлично подходит под рекламные данные. Нужен запущенный ClickHouse: локально его поднимают одной командой Docker или ставят на сервер.

Добавляем параметры подключения и указываем отчёты через запятую:

from morin import VKbyDate

vk = VKbyDate(
    subd='clickhouse',
    host='localhost', port='8123',
    username='default', password='',
    database='vkads',
    add_name='account1',
    token='ВАШ_ТОКЕН_VK_ADS',
    start='2025-01-01',
    backfill_days=3,
    reports='campaigns_stat,groups_stat,banners_stat',
)

vk.collecting_manager()

Что делает collecting_manager:

  • сам создаёт таблицы в ClickHouse и определяет столбцы по данным;
  • работает по принципу Airflow - фиксирует собранные дни в служебной таблице;
  • при повторном запуске догружает только недостающие дни;
  • backfill_days перезабирает несколько последних дней.

То же самое в PostgreSQL и MySQL

Чтобы грузить не в ClickHouse, а в PostgreSQL или MySQL, меняется один параметр - subd.

Для PostgreSQL:

vk = VKbyDate(
    subd='postgresql',
    host='localhost', port='5432',
    username='postgres', password='postgres',
    database='vkads',
    add_name='account1',
    token='ВАШ_ТОКЕН_VK_ADS',
    start='2025-01-01', backfill_days=3,
    reports='campaigns_stat,groups_stat,banners_stat',
)
vk.collecting_manager()

Для MySQL меняем subd на 'mysql' и порт на 3306. morin сама подберёт типы столбцов под выбранную базу данных.

Какие отчёты умеет коннектор VK Ads

Отчёты задаются параметром reports (через запятую). Полный список - с функцией, которая вызывает каждый отчёт:

  • campaigns_stat - статистика по кампаниям, функция get_campaigns_stat()
  • groups_stat - статистика по группам объявлений, функция get_groups_stat()
  • banners_stat - статистика по объявлениям (баннерам), функция get_banners_stat()
  • campaigns_list - справочник кампаний, функция get_campaigns_list()
  • groups_list - справочник групп объявлений, функция get_groups_list()
  • banners_list - справочник объявлений, функция get_banners_list()

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

Автоматизация через Docker

Чтобы данные VK Ads обновлялись сами каждый день, morin разворачивают в Docker - сбор идёт по расписанию, с логами и уведомлениями в Telegram. Подробно этот сценарий разобран в отдельной статье про коннекторы к API в ClickHouse на Docker.

FAQ

Как получить данные из VK Ads через API на Python?

Установите библиотеку morin (pip install morin), создайте объект VKbyDate с токеном и вызовите методы get_campaigns_list, get_campaigns_stat. Данные вернутся списком словарей.

Где взять токен VK Ads API?

В разделе доступа к API рекламного кабинета VK Ads. Токен даёт доступ к данным кабинета.

В какую базу данных можно грузить данные VK Ads?

Коннектор morin умеет ClickHouse, PostgreSQL и MySQL. База выбирается одним параметром subd.

Заключение

Мы разобрали, как выгружать статистику из VK Ads через API на Python и грузить её в ClickHouse, PostgreSQL или MySQL с помощью бесплатной библиотеки morin. Список отчётов задаётся через запятую, база - одним параметром. По такому же принципу morin работает с Яндекс Директом, OZON, Wildberries и другими источниками.

Полезные ссылки