Facebook CAPI deduplication не даёт посчитать одну реальную конверсию дважды, когда её отправляют browser Pixel и server-side Conversions API. Базовый контракт: у browser и server копий одного события совпадают event name и event_id.
Не смешивайте четыре разных идентификатора:
fbclid/fbc— Meta click context;fbp— browser context;- внутренний
click_id— визит в вашем трекере; event_id— одна conversion, доставленная по двум каналам.
Что решает дедупликация
| Проблема | Механизм |
|---|---|
| Pixel и CAPI отправили один Purchase | Одинаковые event name и event_id |
| Network повторила postback | Stable transaction ID / tracker idempotency |
| Registration и deposit на одном click | Разные event types и IDs |
| Meta должна сопоставить event с рекламным кликом | fbc/fbclid, fbp и разрешённые match keys |
| Tracker должен найти исходный визит | Внутренний click ID из postback |
Текущий контракт сверяйте с официальной документацией Meta.
Корректная пара событий
Browser Pixel:
<script>
fbq("track", "Purchase", {value: 42.50, currency: "USD"}, {
eventID: "purchase_conv_98211"
});
</script>
Server CAPI для того же Purchase:
{
"event_name": "Purchase",
"event_time": 1786957000,
"event_id": "purchase_conv_98211",
"action_source": "website",
"custom_data": {"value": 42.50, "currency": "USD"}
}
Browser SDK использует eventID, API payload — event_id, но значение должно совпадать.
Как создавать event ID
ID должен быть стабильным для повторной доставки одного event и уникальным между разными business events. Хороший seed — transaction ID сети:
Purchase:network_conv_98211
Если transaction ID нет, создайте ID один раз в источнике события, сохраните в conversion record и переиспользуйте в Pixel/CAPI. Не генерируйте два random IDs независимо.
Нельзя использовать:
- один event ID на всю жизнь пользователя;
- campaign ID как event ID;
- независимые timestamp-only IDs;
- один click ID для registration, deposit и всех purchases без event scope.
Event name тоже должен совпадать
Одинаковый ID не исправит такую пару:
browser: Purchase / purchase_conv_98211
server: Lead / purchase_conv_98211
Сначала задайте conversion registry: какой raw postback status становится Lead, CompleteRegistration, Purchase или custom event. Если два канала намеренно отправляют разные этапы funnel, дедуплицировать их нельзя.
Роль fbclid, fbc и fbp
Эти значения помогают Meta связать server event с рекламным контактом. Они не определяют, являются ли Pixel и CAPI payloads дублями.
click_id → наш точный визит
fbc/fbp → Meta matching context
event_id → одна conversion в одном или нескольких каналах
tx_id → одна partner/business transaction
Подробнее — в карте Click ID и Sub ID.
Граница postback → CAPI
В affiliate traffic deposit часто происходит у advertiser/network. Postback сначала должен вернуть событие трекеру:
https://tracker.example/postback?click_id={aff_sub}&status=deposit&payout={payout}&transaction_id={conversion_id}
Только после проверки click, status и transaction формируйте server event для Meta. Иначе unknown click, unmapped status или retry превращаются в ложный рекламный signal.
Полный маршрут описан в статье как возвращать affiliate conversions в Facebook, а границы систем — в Pixel vs CAPI vs postback.
Pass/fail таблица
| Тест | Условие pass |
|---|---|
| Browser payload | Правильный event name и непустой ID |
| Server payload | То же событие использует то же имя и точный ID |
| Event data | Value и currency совпадают |
| Click context | fbc/fbp присутствуют, если были легитимно captured |
| Tracker event | Server event создан из известной conversion и click |
| Partner retry | Та же transaction не создаёт второй tracker event |
| Meta diagnostics | Event принят без unresolved duplicate |
| Итог | Одна бизнес-конверсия осталась одной Meta-конверсией |
Не принимайте работу только по totals в Ads Manager. Нужен controlled event с доступными browser payload, server request, platform response и tracker conversion.
Главное правило: сначала создайте и валидируйте одну business conversion record, затем доставляйте её в Pixel и CAPI. Обе копии ссылаются на одну запись и естественно получают общий identity.