Расходы в Roistat не сходятся с кабинетом Яндекса: где теряются деньги и как свести цифры до факта
Разбираю, почему сумма расхода в Roistat отличается от кабинета Яндекс.Директ — НДС, комиссии, разметка, сроки данных — и как свести расход до факта для честног

Собственник видит две суммы расхода — и вся окупаемость поехала
Картина знакомая: открываю Roistat, открываю рекламный кабинет Яндекс.Директ за один и тот же период — суммы расхода разные. Первая реакция собственника: «интеграция врёт, цифрам верить нельзя». На деле расхождение складывается из нескольких предсказуемых слоёв, и пока их не развести, расход в отчёте искажён.
Проблема здесь денежная. Если в знаменателе окупаемости лежит кривой расход, то ROMI по каждому каналу тоже кривой. На таких цифрах принимаются решения — что отключить, куда добавить бюджет, — и каждое из них уводит деньги не туда. Поэтому порядок работы я держу обратным привычному: сначала свожу сам расход до фактически списанных денег, и только потом смотрю окупаемость.
Разберу слои по очереди.
Слой первый: НДС, комиссия и наценка площадки не заданы в настройках
Roistat подтягивает расход Яндекс.Директ автоматически — по текстово-графическим, динамическим и медийным кампаниям. Сумма грузится даже без метки roistat в ссылках, само списание видно.
Дальше начинается арифметика надбавок. В настройках интеграции НДС, комиссию агентства и скидку площадки задают по периодам с датами — например, НДС 20% с 1 апреля 2021 года. Если надбавка не указана или указана неверно, сумма в Roistat закономерно отходит от фактического списания в кабинете. Для расчёта окупаемости расход берётся с НДС и с учётом комиссий и наценок площадки — они съедают порядка 10–20% бюджета, поэтому «чистая» цифра из кабинета не совпадает с реально ушедшими деньгами.
Один момент проверяю до всего остального. Прямым источником не подтверждено, показывает Яндекс.Директ сумму в кабинете с НДС или без. Это критично: сам по себе НДС 20% даёт ровно 20% «расхождения», если в Roistat и в кабинете сравнивают суммы в разной базе. Пока база не сведена к одной, все дальнейшие сверки бессмысленны.
Слой второй: сломанная разметка — расход есть, привязки к заявкам нет

Сумма расхода грузится в Roistat и без разметки, но без корректных UTM и параметра клика yclid эти деньги не привязываются к заявкам. Расход в отчёте виден, а к какому источнику отнести пришедшие по нему заявки — система не знает, деньги остаются без атрибуции.
Отдельный случай — когда ломается автоматическая разметка: отключена авторазметка или параметр клика теряется в цепочке редиректов. Тогда платный трафик уезжает в «органику»: в кабинете расход списан, а в системе аналитики эти визиты с рекламой не связываются. Это и есть классическая причина картины «в кабинете деньги ушли, в системе их не видно». Расход и заявки живут в разных срезах, и окупаемость по каналу считается по неполной базе.
Слой третий: сроки данных и возвраты за скликивание
Сравнивать расход за «сегодня» смысла нет. Кабинет показывает списание почти в реальном времени, система аналитики отдаёт полные данные с задержкой 24–48 часов. Корректно сверять только закрытые сутки — я беру период, который уже точно устоялся.
Второй источник сдвига — недействительные и мошеннические клики. Кабинет их фильтрует и возвращает за них деньги, а внешняя аналитика этого не видит сразу, пока возврат не отразится в отчёте. По связке Roistat ↔ Яндекс.Директ открытые источники не дают точную величину задержки финальных данных и порядок обработки таких возвратов задним числом, поэтому эту величину я снимаю на своих данных за несколько закрытых периодов — так видно реальный лаг именно на конкретном проекте.
И часовой пояс. Он сдвигает границы суток при суточной сверке, величина сдвига в источниках не измерена, поэтому сверку веду в едином часовом поясе для кабинета и для системы аналитики.
Что расходится по конструкции, а не по ошибке
Часть расхождений заложена в устройство систем, чинить их не нужно. «Клики» в кабинете и «визиты» в аналитике — разные по природе метрики: несколько кликов одного пользователя за короткий промежуток схлопываются в одну сессию, поэтому числа не обязаны совпадать.
По конверсиям и сессиям есть рабочие ориентиры: расхождение до 5–10% считается нормой, 10–20% — повод для аудита разметки и настроек атрибуции, свыше 20% — сигнал разбираться немедленно. Важно, что эти проценты относятся к конверсиям и сессиям.
С деньгами планка другая. Русская практика сверяет расход близко к рублю: разница в сумме списания должна сходиться почти точно. Конверсии же расходятся по определению — из-за разных окон атрибуции у платформ (например, у части систем по умолчанию 30-дневное окно по клику одну и ту же продажу засчитывают в разные дни). Смешивать эти два расхождения нельзя: деньги обязаны сойтись, конверсии — нет. Как окно атрибуции задним числом переписывает выручку по каналам, я отдельно разбирал в материале про то, как модель атрибуции приписывает выручку не тому источнику.
Что это даёт для окупаемости, когда расход сведён
Сведённый расход — половина честного ROMI. Вторая половина в числителе. Рекламный кабинет не знает суммы чека и не видит отложенные, телефонные и офлайн-продажи, поэтому его отдача занижена. В одном публичном кейсе внедрения окупаемость через сквозную аналитику оказалась вдвое выше кабинетной — 4,0 против 2,5 (привожу как иллюстрацию, не как свой клиентский результат). Переход на серверный сбор данных о конверсиях типично прибавляет 20–40% фиксируемых продаж — часть недосчитанных заявок возвращается в отчёт и меняет разрыв между кабинетом и системой аналитики.
Связка складывается так: в знаменателе — расход, сведённый до фактически списанных денег; в числителе — полная выручка со всеми продажами, включая телефон и офлайн. На таком ROMI можно принимать решения по бюджету: цена заявки и отдача каждого канала считаются по реальным деньгам. Как это выглядит на одной воронке от клика до оплаты, я показывал в разборе расчёта окупаемости по шагам.
Довести интеграцию до состояния, когда расход и продажи сходятся с первого раза, — это отдельная настройка Roistat под свод расхода до факта: проставленные по периодам НДS и комиссии, целая разметка с yclid, сверка по закрытым суткам в едином часовом поясе. После этого цифрам в отчёте можно верить, и окупаемость показывает деньги, а не артефакты интеграции.

Никита Бердников
Официальный партнёр amoCRM (ID 28602378), Roistat и SIPUNI. 5+ лет настраиваю CRM, сквозную аналитику и телефонию под выручку — лично, без агентских посредников. 25+ проектов, ₽100M+ выручки клиентов.
Похожие статьи

Чат-бот в amoCRM по шагам воронки: где автоответ ускоряет реакцию, а где нужен живой менеджер
Разбираю, на каких шагах воронки бот в amoCRM ускоряет реакцию и квалифицирует заявку, где нужен живой менеджер и какие ошибки ломают атрибуцию.

amoCRM для автосервиса: как возвращать клиентов на плановое ТО и видеть, какая реклама приводит платящих
Как настроить воронку и напоминания о ТО в amoCRM, чтобы возвращать клиентов на регламентное обслуживание и связывать заявку с источником оплаты.

Окупаемость рекламы в Avito Ads, когда площадка не связывает объявление с оплатившим клиентом
Встроенная статистика Avito показывает звонки по объявлениям, но не выручку. Разбираю, как сшить расход по объявлению с оплатой в рублях и посчитать ROAS.