Duplicate Meta Event Names
Your Meta Pixel has two or more entries with the same event name. Meta does not collapse them automatically. Each configured event runs its own counter, fires its own optimization signal, and can inflate conversion totals or split learning data depending on how the duplicates were created.
Why It Matters
There are two flavours of this problem and they cause different damage. The first is unintentional double-firing on the client. The same `fbq("track", "Purchase", ...)` call runs twice on the order confirmation page because the tag is in both the page template and a GTM container, or because a single-page-app router re-runs the pixel on a state change. Meta receives two Purchase events for one order. The Results column doubles. ROAS calculations look stronger than they are. Campaigns optimize toward a phantom conversion rate. The second is Conversions API duplication without `event_id`. The browser pixel fires Purchase. The server fires Purchase. Both arrive at Meta. Without a matching `event_id` and timestamp pair, Meta has no way to deduplicate them and counts each one. The same order gets attributed twice across the funnel. The third (less common) is two distinct event configurations in Events Manager that share a name because someone duplicated the row during AEM editing. Meta treats them as separate routing slots and the volume splits unpredictably.
How To Fix It
- Pull the duplicate names AdLint flagged. For each one, walk a real flow in Meta Pixel Helper and count how many times the event fires per user action. Exactly one fire per action is the target.
- If the duplication is client-side, identify the source: a hardcoded template tag plus a GTM tag, a router re-init, or a third-party app that ships its own pixel. Remove one of them.
- If the duplication is client plus Conversions API, implement deduplication. Send the same `event_id` and `event_time` from both browser and server. Meta's deduplication doc covers the exact payload shape.
- If two configurations share a name in Events Manager, delete one of the rows in the AEM panel and let the remaining one carry the volume.
- After the fix, watch the event in Events Manager for 24 to 48 hours. Volume should drop to roughly half if you removed a true duplicate.
Example
// Conversions API deduplication
fbq('track', 'Purchase', { value: 99 }, { eventID: 'order_12345' });
// Server payload also includes event_id: 'order_12345' and matching event_timeThis Meta Pixel has duplicate event configurations sharing the same name. Per Meta's deduplication documentation, Meta only collapses identical events when both browser pixel and Conversions API payloads carry a matching `event_id` and `event_time`; otherwise each event is counted independently. The downstream damage depends on the source: client-side double-firing (page template plus GTM, or SPA router re-init) inflates Results and ROAS columns; Conversions API duplication without `event_id` double-counts the same order across the funnel; and two Events Manager rows with the same name split volume unpredictably across optimization slots. Fix: walk the funnel in Meta Pixel Helper and confirm exactly one fire per user action, remove redundant client-side sources, implement `event_id`-based deduplication for any browser plus server pairs, and consolidate duplicate rows in the Events Manager configuration. Source: developers.facebook.com/docs/marketing-api/conversions-api/deduplicate-pixel-and-server-events.
Drop this paragraph into your client deliverable. Sources back to the canonical platform documentation linked below.
References
Audit your own files for this check
AdLint runs this check (and 177 others) against your GTM, Google Ads, Meta, TikTok, LinkedIn, Pinterest, Twitter/X, and Snapchat exports. Everything stays in your browser. No uploads, no accounts.
Run a free audit