Deduplication
When a single user converts, you're often sending the same conversion event to Snap through more than one integration — for example, the Snap Pixel SDK firing in the browser alongside a server-to-server Conversions API (CAPI) call, or a Mobile Measurement Partner (MMP) postback alongside direct CAPI for an app. Without deduplication signals, that same event can be counted more than once in your reporting and your optimization signal can be weaker than it should be.
This page describes how to set up deduplication on your side so that Snap can recognize redundant submissions as the same conversion. The first half describes the core principles which apply whether you're running web or app. The Implementation section at the bottom then splits into web-specific and app-specific guidance — pick the platform tab once and the entire implementation walkthrough will be tailored to your setup.
Core dedup principles
These apply regardless of which integrations you're sending events through.
Send the same unique identifier across each integration
For Snap to recognize the same conversion arriving via more than one source, each event needs to carry the same unique identifier on the corresponding parameter, for the same Snap asset (Pixel ID for web, Snap App ID for app).
When the same identifier is present on both events for the same asset, the two are treated as a single conversion in reporting and optimization rather than two separate ones. Beyond that match, Snap performs additional signal-quality evaluation behind the scenes to choose the strongest representation of the event — so the cleaner the dedup signals you send, the better that evaluation works on your behalf.
One id per conversion event
The id must be unique to that single conversion event — not per session, per visit, or per user. For example, a user who views three product pages and adds two items to their cart in one visit generates five distinct conversion events; each needs its own unique id. Re-using one value across multiple distinct conversions (e.g. passing the same session id on every PAGE_VIEW and ADD_CART in a session) will cause those events to be collapsed together in reporting, leading to under-counting.
Good sources for this id, in order of preference:
- An existing transaction id or order id (if your conversion has one).
- An existing lead id (for lead-form conversions).
- A freshly generated
UUIDv4.
If your system already produces one, recycle it across your integrations — you don't need to invent a new identifier.
Send real ids, not placeholders
Make sure the id you send is a real, unique identifier — not a templating token or placeholder. Common mistakes to watch out for include unsubstituted template strings (e.g. {{order.order_number}}, %OrderId%), generic literals like null, undefined, or NA, and raw JavaScript expressions that leaked through from your tag manager configuration. Placeholder values may not be honored for deduplication.
If you see your conversion counts looking inflated in reporting, check the dedup diagnostics in Events Manager to confirm the values you're sending are being recognized. Once you fix the templating on your end, allow up to 24 hours for the change to be reflected before re-checking.