Доставка конверсий: проверяем, что каждая конверсия дошла до Meta, Google и трекера
За клик вы уже заплатили. Если депозит, который он принёс, так и не долетел до Meta или Google, оптимизатор платформы продолжает закупать похожих на тех, кто не конвертится. Если S2S-постбэк в партнёрский трекер не прошёл, конверсии нет и в вашей собственной статистике. Страница «Доставка конверсий» - единственный экран, который отвечает на вопрос «долетела ли каждая конверсия на самом деле»: карточки CAPI по каждой площадке, карточки постбэков по каждому правилу, таблица всего застрявшего и кнопка «Переотправить» для ручного восстановления.
Как читать карточки
Вверху страницы - по карточке на каждую CAPI-площадку: Meta, Google и TikTok, все три отправляют серверно. Ниже - по карточке на каждое правило постбэка, по которому была хотя бы одна доставка за последние 7 дней. CAPI-площадка может показать карточку и с нулём доставок: карточку заводит любой из трёх следов за окно - доставка, пропуск или сам клик, отнесённый к этой площадке. Следом считается клик по активной кампании: по кампании на паузе, в черновике или в архиве клик тоже пишется, но карточку не заводит, даже если вы за него заплатили. Площадку клику проставляет его идентификатор - fbclid даёт Meta, gclid, gbraid или wbraid дают Google, ttclid даёт TikTok, - а когда идентификатора нет вовсе, площадка берётся из интеграций кампании в том же порядке: Meta, потом Google, потом TikTok. Кампании, у которой интеграций нет ни одной, клик записывается как Meta, поэтому карточка Meta может появиться и там, где Meta не запускали. Пропуски объясняет блок «Пропущено», о нём ниже.
Каждая карточка считает доставки в двух окнах, «24 ч» и «7 дн», по пяти статусам:
- Отправлено - платформа или трекер приняли конверсию. Готово.
- В очереди - доставка ждёт, воркер подхватит её за секунды.
- Сбои - строки, у которых попытка завершилась ошибкой. У CAPI до 5 попыток с экспоненциальной задержкой (паузы 5с, 10с, 20с и 40с - 75 секунд на всю цепочку); у постбэка до 3 попыток, и он укладывается в секунды. Часто строка сама доезжает до «Отправлено» ещё в этом окне. Когда падает последняя попытка, строка автоматически становится «Мёртвая» - без cron-джобы и без ручных действий.
- Мёртвые - все автоматические попытки исчерпаны. Дальше без вас ничего не произойдёт.
- Подавлено - доставку удержала дедупликация по пользователю: у кампании (для CAPI) или у правила постбэка включён режим, при котором на одного человека уходит одна конверсия. Это честный терминальный статус, а не сбой: такие строки не ретраятся и не становятся мёртвыми. В таблице ниже они лежат под отдельным фильтром «Подавленные», и кнопки «Переотправить» у них нет - ручной повтор обошёл бы сам дедуп.
Бейдж работает как светофор: Без проблем, когда проблем нет, Есть сбои (жёлтый), если что-то упало, Есть мёртвые (красный), если хотя бы одна доставка умерла. На каждой карточке также показан текст последней ошибки с таймстампом - обычно этого достаточно, чтобы опознать протухший токен, не открывая логи.
У карточки любой CAPI-площадки есть ещё один блок - Пропущено (не отправлено). Он появляется, как только за окно набрался хотя бы один пропуск, и показывает счётчики «Сегодня» и «7 дн» с разбивкой по причине: «Площадка не подключена», «Нет CAPI-аккаунта для пикселя», строка про click ID, «Клик устарел» и «Событие не сопоставлено». Строку про click ID подписывает площадка той карточки, на которой она стоит, потому что идентификатор у каждой площадки свой: «Нет Google click ID (gclid)» у Google, «Нет TikTok click ID (ttclid)» у TikTok и нейтральное «Нет click ID» на карточке площадки, которая эту причину не пишет вовсе. Сообщают её ровно два адаптера - Google пропускает клик без gclid/gbraid/wbraid, TikTok - клик без ttclid, - а «Клик устарел» принадлежит одному Google (клик старше 89 дней, сутки запаса под 90-дневным окном загрузки), поэтому на карточке Meta обе строки всегда нули. Третья, «Событие не сопоставлено», общая для площадок: её пишет диспетчер, когда тип события не входит в маппинг площадки и имя события не задано вручную, так что на карточке Meta эта строка вполне может быть ненулевой. Самая первая строка, «Площадка не подключена», отвечает на вопрос раньше всех остальных: у кампании нет ключа этой площадки в интеграциях вовсе, то есть настройку не начинали. Так выглядит запуск трафика до привязки пикселя - клики идут, событий в площадку не уходит ни одного, и до появления этого счётчика такие события не оставляли вообще никакого следа: ни строки доставки, ни ошибки, ни записи в журнале. Отличайте её от следующей строки: там настройку начали и не закончили, и чинится она сверкой идентификаторов, а не привязкой пикселя. Строка «Нет CAPI-аккаунта для пикселя» стоит второй не случайно: остальные причины отсекают часть трафика, а эта означает, что у организации нет CAPI-аккаунта с тем pixel ID, который записан в интеграции кампании, - до площадки не доходит ни одна конверсия этой кампании. Чаще всего пиксель поменяли в одном месте и не поменяли в другом. Ненулевое значение здесь - повод сверить pixel ID кампании с тем, что стоит в CAPI-аккаунте, прежде чем разбираться с чем-либо ещё. Пропуск - это осознанный отказ от отправки, а не сбой: он вообще не создаёт строку доставки и никогда не попадает ни в счётчики сбоев и мёртвых, ни в таблицу ниже. Это и есть прямой ответ на вопрос, почему на смешанной кампании Meta+Google по Google конверсий заметно меньше, чем по Meta - сначала загляните в этот блок, прежде чем считать что-то сломанным.

Таблица проблемных доставок
Под карточками - таблица с пагинацией и двумя рядами переключателей. Верхний выбирает, что показывать: «Сбойные / мёртвые» (открыт по умолчанию) или «Подавленные». Нижний - канал: CAPI и Постбэки. На вкладке CAPI - платформа, Event ID, статус, число попыток, ошибка и время создания. На вкладке «Постбэки» добавляются HTTP-метод и код статуса, который вернул endpoint вашего трекера. 500 от трекера и таймаут сети дебажатся совсем по-разному.
Переотправка: что она делает на самом деле
- Сначала устраните причину: обновите access token Meta, верните доступ сервисному аккаунту Google, включите правило постбэка.
- Нажмите «Переотправить» на строке. Кнопка сменится на В очереди: новая попытка доставки идёт через обычную очередь с полной цепочкой ретраев. В CAPI уходит тот же payload, а постбэк отправляется на текущую цель правила - адрес и метод берутся из самого правила, а не из снимка старой доставки, поэтому исправленный адрес подхватывается сразу. Если цель с тех пор изменилась, экран скажет об этом прямо на строке.
- Доставка асинхронная, но нажимать F5 не нужно: экран перечитывает себя сам - таблица проблемных доставок раз в полминуты, карточки раз в минуту. Если переотправка сработала, строка сама станет «Отправлено» и уйдёт из списка. На фоновой вкладке опрос останавливается и делает внеочередной запрос ровно в тот момент, когда вы на неё вернулись, а неудачный запрос не стирает уже показанные цифры - на экране остаётся последний удачный ответ.
- Если строка не сдвинулась минуты за две, кнопка снова становится нажимаемой. Это не забытый экраном клик: очередь заявку приняла, а обработать её так никто и не обработал, поэтому нажать ещё раз - правильное действие. Если строка возвращается к вам так раз за разом, смотреть надо на воркер, а не на строку.
Переотправка честно отказывает, а не делает вид, что сработала. Переотправить можно только сбойные и мёртвые строки. Если пиксель убрали из кампании, вы получите «Платформа больше не настроена на кампании»: поставить строку в очередь всё равно означало бы получить ещё одну мёртвую строку. Отказ смотрит только на кампанию: если пиксель в ней остался, а сам CAPI-аккаунт удалён, переотправка принимается, площадка молча пропускается, и строка остаётся мёртвой. «Событие не тарифицировано» - защитный отказ: у события статус биллинга не «списано» и не «бесплатно», и повтор всё равно ничего бы не отправил. Переотправка постбэка отказывает точно так же, если правило удалено или отключено: ручной повтор не может тихо обойти правило, которое вы сами выключили.
Защита от задвоения: переотправка постбэка использует тот же самый fire ID, что и оригинал - если первая попытка реально дошла до трекера, повтор гасится ещё до HTTP-запроса. Гасят его два сторожа: отметка в Redis со сроком жизни сутки и долговечная строка леджера в статусе «Отправлено». Оба читаются на пропуск - когда хранилище в этот момент не ответило, доставка не отменяется, а уходит повторно, поэтому обещание честно звучит как «не меньше одного раза», и приёмник на вашей стороне обязан уметь дедуплицировать сам. У CAPI своя защита - дедупликация по event ID на стороне площадки: у Meta окно дедупликации около 48 часов, так что переотправка сильно более старых строк может задвоить конверсии в Ads Manager.
Когда волноваться, а когда нет
- Волноваться стоит, когда «Мёртвые» больше нуля или повторяется одна и та же последняя ошибка: протухший access token, отозванный доступ сервисного аккаунта, неверный dataset или ID действия-конверсии.
- Не волноваться стоит, если на смешанном трафике Google показывает меньше конверсий, чем Meta. У конверсии, пришедшей с Meta-объявления, нет
gclid, поэтому Google осознанно её пропускает, а не роняет с ошибкой - точную причину и счётчик смотрите в блоке «Пропущено» на карточке Google. Ещё Google пропускает клики старше 89 дней - сутки запаса под его 90-дневным окном загрузки.
Письмо, когда доставка начинает сыпаться
На предыдущий раздел есть возражение: он работает, только пока экран у вас открыт. Поэтому у сбоя появился второй канал. Если за час у организации набралось десять и больше доставок в статусах «Сбои» и «Мёртвые» - CAPI и постбэки считаются вместе, одной суммой, - владельцам организации уходит письмо. В нём та же цифра, окно, за которое она посчитана, разбивка по каналам и ссылка прямо на этот экран.
Считаются доставки, созданные за последний час и оставшиеся сбойными или мёртвыми к моменту проверки; проверка идёт раз в пятнадцать минут. Порог в десять подобран так, чтобы одиночный 5xx площадки или ретрай, прошедший со второй попытки, письма не порождали: до десятки за час дотягивает сломанная конфигурация, а не разовое моргание сети.
Одно письмо на организацию в шесть часов - не чаще. Сбой доставки это состояние, а не событие: пока протухший токен не заменили, каждая следующая проверка видит те же сбойные строки, и без этого ограничения одна поломка превратилась бы в рассылку.
Выключается в двух местах, и это разные уровни. Настройки → Уведомления - переключатель на всю организацию; менять его может только владелец, потому что действует он на всех владельцев сразу. Там же ниже, в предпочтениях уведомлений, - личная галочка «Оповещения о сбоях доставки (CAPI и постбэки)»: она снимает письма только с вас и остальных владельцев не трогает.
Частые грабли
- Переотправка без устранения причины просто плодит новые мёртвые строки: кнопка повторяет отправку, а не чинит конфигурацию.
- Строки Meta старше примерно 48 часов рискованно переотправлять: дедупликация площадки их уже не прикрывает.
- Заблокированную биллингом конверсию (организация на паузе, исчерпанный овердрафт) в этой таблице искать бесполезно: строки доставки у неё не создаётся вовсе - она попадает в карточку «Потеряно из-за биллинга» на этом же экране. Досылать руками ничего не нужно: после пополнения баланса такие события уходят сами - сразу при зачислении, а хвост подбирает почасовой проход, - но только пока конверсии не старше шести суток.
- Карточка Google с нулём доставок на трафике, где преобладает Meta - это норма, а не поломка. Причину объясняет блок «Пропущено» на этой карточке.
- Пустое место вместо карточки TikTok - это не «площадку ещё не запустили»: серверная доставка в TikTok живая наравне с Meta и Google. Карточку заводит любой след площадки за окно - доставка, пропуск или клик, отнесённый к TikTok, - поэтому её отсутствие означает ровно одно: к TikTok за окно не отнесли ни одного клика. Это не то же самое, что «трафика из TikTok не было»: клик из TikTok, пришедший без
ttclidна кампанию, где в интеграциях есть Meta или Google, записывается на ту площадку и попадает в её карточку. Карточка с нулём доставок - другой случай, и объясняет его блок «Пропущено» на ней же: «Площадка не подключена», если кампания про TikTok не знает, или «Нет TikTok click ID (ttclid)», если подключение есть, а метки в кликах нет.