Сервис 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 и другими источниками.