Meta Ads

How to fix duplicate purchases in Meta Ads for Shopify

If Ads Manager shows more purchases than Shopify's order count, event duplication is one of the more common explanations: Pixel and server-side events firing for the same order without a shared ID. It's not the only explanation, but when it is the cause, it's usually fixable in an afternoon.

How to confirm it's actually duplication

Before assuming duplication, rule out the other usual reasons the two numbers disagree: Meta's own attribution window crediting view-through or click conversions Shopify wouldn't count the same way, modeled conversions, cross-device journeys, or simply comparing different date ranges, covered on the revenue-gap page. If the gap survives that check, compare Ads Manager's reported purchase count against Shopify's order count for the same date range and, if possible, the same attributed customers. A gap that roughly tracks with order volume (say, consistently 15-20% higher) points to systematic duplication rather than a one-off glitch. A gap that spikes on specific days is more likely tied to a deploy, app update, or theme change on that date.

The usual causes

Pixel and CAPI firing without a shared event ID

Running both is expected and recommended by Meta: the browser and server paths are meant to catch what the other misses. It only becomes duplication when the two events for the same order don't carry a matching event_id, which is what tells Meta to treat them as one purchase instead of two.

More than one tracking app installed

A Shopify tracking or analytics app and a separately configured Pixel snippet can both fire a purchase event for the same order.

Theme code alongside an app

A Pixel snippet added directly to the theme, left in place after installing a tracking app that also fires purchase events.

A tag manager plus a native integration

Google Tag Manager or a similar tool firing a purchase tag while Shopify's native Meta channel integration also fires its own event.

Diagnosis, step by step

  1. 1

    Open Events Manager and check the Purchase event's deduplication status: Meta flags events it couldn't match as browser and server pairs.

  2. 2

    List every place a Purchase event could be firing: theme code, tracking apps, Shopify's native Meta/Facebook channel, and any tag manager container.

  3. 3

    Confirm each source sends the same event_id for a given order, usually the Shopify order ID or checkout token, consistently formatted across every source.

  4. 4

    Disable or remove any source that's redundant. You need exactly one browser path and one server path per order, not two of either.

  5. 5

    Watch Events Manager for a week, not a day: some duplication only shows up under real traffic patterns, not a single test order.

Why this is worth fixing quickly

Duplicate purchases don't just distort your reporting. They distort Meta's automated bidding, which optimizes toward whatever conversion signal it's receiving. If that signal is inflated, budget gets pushed toward audiences and placements that look artificially efficient. Fixing deduplication is one of the few tracking issues that directly changes how your budget gets spent, not just how it gets reported.

Get purchase events deduplicated properly

Connect your store and Meta account so Pixel and server-side events share a matching event ID, then check your duplicate rate in Meta Events Manager.