Расходы из VK Ads и Яндекс.Директа автоматически: подключение и сопоставление с потоками
Расход подтягивается из кабинета раз в час и ложится на те же кампании и объявления, что и клики. Как подключить и почему расход привязан к кампании, а не к потоку.
ROI в трекере честен ровно настолько, насколько честен расход. Доход приходит постбеками сам, а расход обычно переносят руками: открыл кабинет, выписал цифру, вбил в таблицу. Через неделю таблица отстаёт, через месяц в ней ошибка, которую уже никто не найдёт.
В inotrack расходы VK Рекламы и Яндекс.Директа подтягиваются по API раз в час и ложатся на те же кампании, группы и объявления, по которым идут клики. Ниже — как это подключить на своём сервере, как устроено сопоставление и почему расход привязан к кампании, а не к потоку.
Как расход находит свои клики
Сначала механика — без неё настройка превращается в набор заклинаний.
Строка расхода из кабинета — это «кампания, группа, объявление, день, сумма». Клик в трекере — это «поток, источник, параметры ссылки». Чтобы посчитать ROI, их нужно связать. В inotrack связь идёт по четырём ключам:
- источник трафика — к нему привязывается подключение кабинета;
- кампания — клик берёт её из
utm_campaign(илиcampaign,campaign_id); - группа объявлений — из
utm_content(илиadset); - объявление — из
utm_term(илиcreative).
Интеграция пишет расход в те же ключи. Если в ссылке объявления стоят идентификаторы из кабинета, а интеграция настроена на связь по ID, расход и клики встречаются в одной строке отчёта.
Отсюда главное правило: шаблон ссылки в объявлении и режим связи в интеграции должны говорить на одном языке. ID с ID, названия с названиями.
Что нужно на своём сервере
У self-hosted есть особенность: вход «одной кнопкой» работает через OAuth-приложение, и на своём сервере это приложение — ваше.
Владелец инстанса один раз регистрирует приложение в консоли разработчика площадки и вписывает его идентификатор и секрет в файл настроек сервера:
- для Яндекса —
INOTRACK_YANDEX_CLIENT_IDиINOTRACK_YANDEX_CLIENT_SECRET; одно приложение Яндекса может обслуживать Директ, Метрику и Вебмастер, если в нём включены нужные права. Для Директа это доступ к API Директа; - для VK Рекламы —
INOTRACK_VK_CLIENT_IDиINOTRACK_VK_CLIENT_SECRET.
Адрес возврата, который нужно указать в приложении, — на домене вашей панели:
https://<панель>/api/integrations/oauth/yandex_direct/callback
https://<панель>/api/integrations/oauth/vk_ads/callback
Без этих настроек кнопка входа ответит, что OAuth-приложение на сервере не настроено. Токены можно вставить и вручную — в форме есть поля «Access token» и «Refresh token», — но обновляться сами они не смогут. Для VK Рекламы это существенно: её токен доступа живёт сутки.
Ещё одно условие: на сервере должен быть задан ключ шифрования интеграций. Установщик генерирует его сам. Токены кабинетов хранятся на вашем сервере зашифрованными и обратно в форму не отдаются.
Шаг 1. Источник и шаблон ссылки
Откройте «Источники» → «Новый источник». Источник хранит шаблон параметров для ссылки объявления и связывает клики с расходами кабинета.
VK Реклама. Тип — «ВКонтакте». В поле «Параметры ссылки»:
utm_campaign={{ad_plan_id}}&utm_content={{campaign_id}}&utm_term={{banner_id}}
Здесь есть ловушка: в макросах VK campaign_id означает группу объявлений, а кампания — это ad_plan_id. Перепутаете — расход ляжет мимо кликов. Собственный идентификатор клика VK дописывает к ссылке сам, трекер его сохраняет.
Яндекс.Директ. Тип — «Яндекс.Директ». Параметры:
utm_campaign={campaign_id}&utm_content={gbid}&utm_term={ad_id}
{gbid} — идентификатор группы, {ad_id} — объявления.
Шаблон можно не собирать вручную: его подсказывают форма источника и конструктор ссылки потока.
Шаг 2. Подключение кабинета
«Интеграции» → «Рекламные площадки» → «Подключение».

- Вид подключения — «VK Реклама» или «Яндекс.Директ».
- Источник трафика — источник из первого шага. Через него расход свяжется с кликами.
- Связь с кликами трекера — «По ID кампании, группы и объявления». Это режим по умолчанию, и он соответствует шаблонам выше. Режим «По названиям» нужен, только если в метках ссылки у вас названия.
- Вход. Кнопка входа откроет страницу площадки. Войдите под аккаунтом с доступом к рекламному кабинету и разрешите доступ.
- Выбор кабинета. После возврата трекер покажет список кабинетов аккаунта. Отметьте нужный и нажмите «Сохранить выбор».
У Директа в списке будет ваш собственный аккаунт, а если вы входите под агентством — ещё и клиенты агентства: расход берётся по выбранному клиенту.
Одно подключение — один кабинет. Несколько кабинетов подключаются отдельными записями; каждую можно привязать к своему источнику.
Шаг 3. Ссылка в объявлении
Ссылку для объявления берите на странице потока: там есть вариант «для кабинета площадки» — трекинговая ссылка, к которой уже дописан шаблон источника. Её и вставляйте в объявление.
Проверка простая: откройте объявление, посмотрите итоговый адрес. Вместо макросов в нём должны стоять числа. Если видите фигурные скобки — площадка их не подставила, шаблон введён не в то поле.
Шаг 4. Первый цикл
Синхронизация запускается при старте трекера и дальше раз в час. Не ждать помогает кнопка «Запустить синхронизацию» в строке подключения.

Что забирается:
- расход, показы и клики по дням — на уровне кампании, группы и объявления;
- за текущий день — каждый час;
- за вчерашний — ещё раз при первом прогоне новых суток: кабинеты досчитывают расход задним числом.
Сутки считаются по UTC. Поэтому «вчерашний» расход окончательно сходится с кабинетом не в полночь по Москве, а после первого прогона нового дня.
Особенности площадок
Яндекс.Директ
- Суммы без НДС. Трекер запрашивает отчёт без НДС. Если вы привыкли к цифрам кабинета с НДС, расход в трекере будет меньше — это не ошибка.
- Отчёт строится не мгновенно. Директ может поставить отчёт в очередь. Трекер ждёт его готовности в рамках того же прогона, а не откладывает на час.
- Уровень объявлений. Расход приходит с идентификаторами кампании, группы и объявления — как раз тем, что стоит в шаблоне ссылки.
VK Реклама
- Три уровня с другими названиями. Кампания — это «ad plan», группа — «ad group», объявление — «banner». В отчётах трекера они называются привычно.
- Удалённые объявления. Статистика запрашивается по списку объявлений кабинета, а удалённые в этот список по умолчанию не входят. Расход объявления, которое удалили в течение дня, не подтянется. Останавливайте объявления, а не удаляйте, пока день не закрыт.
- Валюта кабинета. По умолчанию расход считается в рублях.
Валюты
Расход в рублях, выплата сети в долларах — обычная ситуация. Каждая строка расхода пересчитывается по курсу ЦБ на свою дату; курсы обновляются раз в сутки. Строка, для которой курса нет, не записывается нулём, а попадает в ошибки синхронизации. Нулевой расход в отчёте опаснее отсутствующего: он делает убыточную кампанию «бесплатной».
Расход и потоки
Теперь о том, что часто понимают неправильно.
Расход в inotrack привязан к источнику и кампании, а не к потоку. Кабинет ничего не знает о потоках трекера: он отдаёт сумму по кампании, группе и объявлению. Поэтому:
- отчёт по источнику, кампании, группе и объявлению показывает расход, прибыль и ROI;
- отчёт в разрезе потока расход не показывает: панель не предлагает такое сочетание, а API отвечает ошибкой, вместо того чтобы нарисовать ноль;
- по этой же причине расход, прибыль и ROI недоступны роли баера: его отчёты ограничены его потоками, а источник бывает общим у нескольких баеров.
Как с этим жить на практике:
- Одна кампания — один поток. Если каждая рекламная кампания ведёт на свой поток, отчёт по кампании и есть отчёт по потоку.
- Называйте одинаково. Кампания в кабинете и поток в трекере с общим префиксом легко сопоставляются глазами.
- Не разводите одну кампанию по нескольким потокам. Клики разойдутся по потокам, а расход останется одной строкой.
- Отдельный источник на кабинет. Если на одной площадке у вас несколько кабинетов, заведите на каждый свой источник — расходы не смешаются.
Общая картина по деньгам — в P&L финмодуля: подтверждённый доход минус расход на трафик минус прочие расходы, с разбивкой по источникам.
Если расход не сходится
Сравнивайте одну кампанию за один день в одной валюте.
- Расхода нет вообще. Откройте подключение: ошибка последней синхронизации написана в его карточке. Чаще всего это истёкший токен или не выбранный кабинет.
- Расход есть, но не в тех строках, где клики. Ключи не совпали. В ссылке объявления стоят названия, а интеграция настроена на ID, — или наоборот. Либо в шаблоне перепутаны кампания и группа.
- Клики есть, расход ноль. Трафик идёт по ссылке без шаблона источника: объявление создано до настройки или ссылка вставлена без параметров.
- Расход меньше, чем в кабинете Директа. Сравните с суммой без НДС.
- За вчера не сходится. Дождитесь первого прогона новых суток по UTC.
- Расход VK меньше. Проверьте, не удаляли ли объявления в этот день.
Площадки без API
Для источников, которых нет в списке интеграций, расход вносится вручную в карточке источника: суммой за период или ценой клика. Во втором режиме трекер умножает цену на число кликов источника, не считая ботов и тестовые клики. Ручной расход участвует в тех же отчётах, что и импортированный.
Итог
Автоматический расход держится на трёх вещах: OAuth-приложение на вашем сервере, шаблон ссылки с идентификаторами кабинета и подключение, привязанное к источнику. После этого расход приходит сам каждый час, а ROI по кампаниям и объявлениям считается без таблиц.
Что ещё почитать: возможности импорта расходов, полный список площадок в каталоге интеграций, пошаговая инструкция по связке с VK Рекламой со скриншотами каждого экрана, отчёты и аналитика, финмодуль и общая схема в статье о сквозной аналитике расходов. Чтобы площадка оптимизировалась под заявки, а не под клики, настройте отдачу конверсий в рекламные кабинеты.