# VK Реклама: как работает коннектор

В этой статье вы узнаете, как коннектор VK Реклама выгружает данные в хранилище ROMI center: с какой периодичностью, что даёт сбор лид-форм и откуда берутся UTM-метки. Полный список полей — в статье [VK Реклама: описание выгружаемых полей](https://help-ru.romi.center/vk-reklama-opisanie-vygruzhaemyh-polej).

## Периодичность

Выгрузка идёт раз в сутки. Окно по умолчанию — от «сегодня минус 7 дней» до вчера включительно, по одному заданию на день (плюс ещё 7 заданий, если включены лид-формы). Текущий день не выгружается.

> **Примечание**
> Параллельность выше, чем у других рекламных коннекторов: очередь VK Рекламы разделена по клиентам — выгрузки разных проектов идут одновременно, внутри одного клиента — строго по очереди.

Кампании, завершившиеся раньше выгружаемого дня, из обработки исключаются. Гранулярность данных: строка = объявление × день. Уровни кампании и группы попадают в ту же строку идентификаторами и названиями.

## Как сохраняет данные

*   **Куда:** хранилище ROMI center на движке ClickHouse.
*   **Имя таблицы:** `vk_ads_<идентификатор кабинета>_<id подключения>`.
*   **Структура таблицы:** движок `MergeTree`, сортировка по `stats_day`, разбиение на партиции по дню статистики.
*   **Порядок колонок:** общие поля (`stats_day`, `utm_*`, `cost`) → колонки конвертации валют → выбранные идентификаторы → выбранные метрики → служебные `rc_import_id`, `rc_created_at`.
*   **Структура догоняется, а не пересоздаётся.** Недостающие колонки добавляются при очередной выгрузке, существующие не удаляются. Снятая галочка поля таблицу не меняет — колонка остаётся со старыми значениями.

## Перезапись за 7 дней

VK Реклама уточняет статистику задним числом, поэтому каждую ночь перезагружаются последние 7 завершённых дней. Каждый день — отдельное задание: если строк нет, день пропускается и прежние данные сохраняются; если строки есть, весь день удаляется и записывается заново.

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

## Дополнительные настройки

| Настройка | Что делает |
| --- | --- |
| Кабинет и клиент агентства | Кабинет — авторизованный аккаунт VK Рекламы; для агентств и менеджеров дополнительно выбирается клиент, статистика которого выгружается. Идентификатор кабинета входит в имя таблицы. |
| Выбор полей | Задаёт набор колонок таблицы. Показы и клики выгружаются всегда. |
| Лид-формы | Отдельный тумблер. При включении подключение начинает собирать вторую таблицу — `vk_ads_leads_<кабинет>_<id>`, строка на заявку: дата, идентификатор лида, форма, кампания, группа, объявление и время получения лида. Ответов на вопросы формы и расходов в этой таблице нет. Ключ для связи с таблицей расходов — `form_id` ↔ `lead_form_id`. |
| НДС | Расходы приходят из VK Рекламы без НДС; при включённой настройке ROMI center добавляет его по указанной ставке. |
| Конвертация валют | На каждую выбранную валюту добавляется колонка `cost_converted_<валюта>` — расход, пересчитанный по курсу на дату строки. Исходная валюта — валюта кабинета VK. |
| UTM-метки для всех кампаний | Подменяет `utm_source`, `utm_medium`, `utm_campaign` заданными значениями во всех строках. |
| UTM-метки для выбранных кампаний | То же, но покампанийно; индивидуальное значение приоритетнее общего. |
| Пауза коннектора | Останавливает создание новых заданий. |

> **Примечание**
> Настройка «Фильтр кампаний» осталась от старого интерфейса: новый визард её не задаёт и при каждом сохранении обнуляет. В отличие от Facebook и TikTok, у VK Рекламы фильтр поддерживает два режима — «только выбранные» и «все, кроме выбранных».

Отозванный доступ к кабинету или к клиенту агентства переводит подключение в состояние ошибки; до починки выгрузка не идёт.

## Откуда берутся UTM-метки

Порядок источников для одной строки:

1.  **Автоматическая разметка группы объявлений.** Если в группе включена авторазметка VK, берётся её шаблон; при пустом шаблоне применяется стандартный `utm_medium=cpc&utm_source=vk_ads&utm_campaign={{campaign_id}}&utm_content={{banner_id}}`.
2.  **Ссылка объявления.** Если авторазметки нет, метки читаются из адреса перехода. У объявлений, ведущих на лид-форму, ссылки с метками нет — метки останутся значениями по умолчанию.
3.  **Значения по умолчанию**, если разметка не нашлась: `rc-vk_ads` (`utm_source`), `rc-cpc` (`utm_medium`); для `utm_campaign` и `utm_id` итог зависит от того, была ли разметка вообще, но метки в ней не было (тогда `utm_campaign` — название группы объявлений, `utm_id` — идентификатор кампании), или разметки не было совсем (тогда оба поля — `rc-vk_ads`).
4.  **Пользовательские метки** из настроек подключения — общие или покампанийные.
5.  **Подстановка макросов VK** в получившихся значениях: `{{advertiser_id}}` — идентификатор кабинета, `{{campaign_id}}` и `{{campaign_name}}` — идентификатор и название **группы объявлений** (так устроена разметка VK), `{{ad_plan_id}}` — идентификатор кампании, `{{banner_id}}` — идентификатор объявления, `{{lead_form_id}}` — идентификатор лид-формы.

> **Важно**
> Признак «метки собрались не полностью» у VK Рекламы ненадёжен. Он пересчитывается заново на каждом объявлении и снимается только тогда, когда в разметке есть сразу все четыре метки. Из-за этого в результатах выгрузки остаётся состояние последнего обработанного объявления, а не вывод по всем строкам. Ориентироваться лучше на сами данные в таблице.

## Технические поля

| Поле | Тип | Что означает |
| --- | --- | --- |
| `rc_import_id` | Целое число | Идентификатор прогона выгрузки, которым записана строка. |
| `rc_created_at` | Дата и время | Момент записи строки в хранилище (не время события). При перезаписи дня обновляется у всех строк дня. |

В таблицах VK Рекламы нет `rc_updated_at` и `rc_datasource` — строки не обновляются точечно, а у каждого подключения своя таблица.
