Why Meta Counts Shopify Purchases Twice, and the Fix

cPixel

Why does Meta show more purchases than Shopify?

Usually because two tools send the same purchase to one pixel with different event IDs: Shopify’s Facebook & Instagram app plus another tracking app, a custom pixel or a tag manager. Meta treats two copies as one only when the event name and event ID match, so give each pixel one sender.

This guide covers Meta showing more purchases than Shopify, including Purchase events no order made. If it shows fewer, see Meta pixel not tracking purchases?

A much-read Shopify Community thread from 2022 traced the problem to a Purchase that fired on every load of the order status page: each time a customer reloaded it, another sale was recorded (thread). That cause has gone from current stores, because Shopify’s purchase event for pixels, checkout_completed, is “triggered once for each checkout” (Shopify: checkout_completed). Duplicates today come from a second sender.

How does Meta deduplicate pixel and Conversions API events?

By event name and event ID. If the pixel and the Conversions API send the same pair to the same pixel within 48 hours, Meta counts the purchase once and “generally” keeps the copy it received first.

Meta’s rule, checked 24 September 2026:

  • The keys. The pixel’s eventID must match the Conversions API’s event_id, the pixel’s event must match event_name, and both must go to the same pixel ID. “Events are only deduplicated if they are received within 48 hours” (Meta: deduplication).
  • Within one source. The same keys also remove repeats sent twice from the browser, or twice from a server (Meta: about deduplication).
  • The fallback. Meta can match on event name plus fbp or external_id instead, but “it only works for deduplicating events sent first from the browser and then through the server”, and not for events from a single source (Meta: deduplication).

So two tools that each create their own event IDs send two purchases Meta can’t match. Shopify gives the same warning before you add a custom pixel: “remove or modify any existing pixels to ensure customer events aren’t counted twice” (Shopify: manage custom pixels).

Where is the second purchase coming from?

The second Purchase comes from a second tool sending to the same Meta pixel. On a Shopify store today, it is usually one of these.

Source How to spot it Fix
The Facebook & Instagram app plus another app on the same pixel Both listed under Settings → Customer events; one test order makes two Purchase events with different IDs Choose one sender for that pixel; keep the channel app for your catalogue and shop
A custom pixel sending Purchase A custom pixel in Customer events that loads Meta’s pixel code Disconnect it, or point it at another pixel
A tag manager A Meta Purchase tag in the container, often loaded from a custom pixel Remove the tag, or make the container the only sender
A rule in Meta’s event setup tool A Purchase on a page view or button click, with no order behind it Delete the rule
Meta pixel code in your theme Doubled page views; fbq or your pixel ID in the theme’s code Remove it once the channel app is connected
Order status page reloads Repeats of one order’s value minutes apart Nothing on current stores: the purchase event fires once per checkout

Three of these deserve a closer look:

  • Event setup tool rules. Meta’s codeless tool can attach a Purchase to a button or a page address, and Meta warns that a purchase set on a Buy now button fires “every time a customer clicks Buy now, whether their purchase went through or not” (Meta: event setup tool). In September 2026 a merchant traced a Purchase that fired on every homepage load, with no value and no order behind it, to a rule like this: the pixel request carried cd[cs_est]=true, which pointed to the event setup tool, and an active Purchase rule turned up in the dataset’s configuration although the tool’s own screen listed none (thread).
  • Theme code. Shopify says that once the Facebook & Instagram app is connected, a Meta pixel added to your theme earlier should be removed, because more than one pixel “can result in duplicate or incorrect data in your reports” (Shopify: Meta pixel).
  • Automatic events are not a usual suspect: Meta says they “are de-duplicated from any other events that you have manually set up” (Meta: automatic events).

How do I find it?

Place one real order, count the Purchase events it produces, and trace each one back to its sender.

  1. In Meta Events Manager, click Data sources, select your dataset and open Test events. Enter your store’s address, click Open website and place one real order. Meta says the tool shows “which events are processed and which are deduplicated” (Meta: test events), but here it lists browser events only: server events appear there only with a test event code, which real sends don’t carry (Meta: using the API). Two browser Purchase events with different event IDs mean two browser senders.
  2. For server senders, click View details on the Purchase event and read Event overview and Event deduplication (Meta: server event details). With cPixel, Live shows which of your pixels it sent the order to.
  3. In your browser’s developer tools, open the Network panel and filter by facebook.com/tr, the address the Meta pixel sends to (Meta: pixel base code). Each request with ev=Purchase names its pixel in id; in the homepage case above, cd[cs_est]=true marked the rule. Server sends never appear here. The same method works for any platform: check every pixel on the page.
  4. In Shopify, go to Settings → Customer events and note every app pixel and custom pixel that could send to Meta.
  5. Go to Online Store → Themes, open the menu next to your live theme, click Edit code and search for fbq and your pixel ID. Meta suggests searching for fbq to find its pixel code (Meta: drop in website events).
  6. In Events Manager, check the event setup tool for a Purchase attached to a button or page. A rule can exist even when the tool’s screen lists none, as in the September 2026 case.

When one order produces one Purchase, or two with the same event ID of which Meta deduplicates one, you’re done.

What about TikTok and GA4?

They work the same way with different keys: TikTok matches the event and event ID within 48 hours, and GA4 matches the transaction ID. The fix is the same too: one sender per pixel or property.

Platform Deduplicates on Window Keeps
Meta Event name and event ID, same pixel 48 hours Generally the first received
TikTok Event and event_id 48 hours The first received
Google Analytics 4 Transaction ID, web streams only Not stated Not stated
Pinterest Event name and event_id 48 hours The first captured
Snapchat Its dedup ID pair; for purchases, also the order ID 48 hours; 30 days for the order ID Not stated
ChatGPT Ads Pixel ID, event name and id Not stated The first received

Sources, checked 24 September 2026: Meta, TikTok, Google, Pinterest, Snap, OpenAI.

Two details matter. TikTok treats a pixel and Events API pair with the same pixel, event and event_id as one event: it keeps the first, discards copies received within 48 hours and tries to merge details from a copy received within 5 minutes (TikTok developer documentation). Google deduplicates only purchases that share a transaction ID, so two senders with different IDs count twice in GA4, and it warns against the opposite mistake: it “will deduplicate all purchase events that have transaction_id=""”, which collapses real purchases into one. More in why GA4 and Shopify purchases differ.

Can two apps send to the same pixel safely?

Only if both send the same event ID for every purchase, which separate apps don’t: each creates its own.

cPixel, which we build, says so in its own setup about Shopify’s channel app: running both “would double-count your sales — the official app’s event IDs can’t be matched to ours”. Meta’s fbp and external_id fallback is no safety net either: it works only when the browser event comes first and the server event second, and never between two server senders.

Keep the other app for everything besides tracking. The Facebook & Instagram app also syncs your products to Meta’s Commerce Manager and sells them on Facebook and Instagram (Meta: connect Shopify), so the fix is to stop one tool sending to the pixel, not to remove the app. If a second tool needs purchase data for its own reports, give it a different dataset. For the options side by side, see set up the Conversions API on Shopify.

How do I fix it for good?

To stop Meta counting Shopify purchases twice, give each pixel one sender, then confirm with one real order that one purchase makes one Purchase.

  1. Choose the sender for each pixel: the Facebook & Instagram app, a tracking app or your own server.
  2. Stop every other sender to that pixel: disconnect the custom pixel, remove the tag manager’s Meta Purchase tag, delete the theme code and any Purchase rule in the event setup tool.
  3. If another app should keep running, switch off its sending to that pixel or connect it to a different dataset. Keep the Facebook & Instagram app installed for its catalogue and shop.
  4. Repeat the one-order test: Test events for browser senders, the Purchase event’s details for server ones, and Live if cPixel sends.

cPixel gives every purchase one event ID, made from your shop and the checkout and shared by the browser, the server and every account you connect for that platform. Meta’s browser Purchase is switched off while cPixel’s server sending to that pixel is active, and cPixel won’t connect the same pixel twice. It can’t deduplicate another app’s events, so it looks for them: once a day it reads your storefront for other tracking tags and Shopify’s list of registered pixels, and flags a clash on its Destinations page under Another app is set up for a platform cPixel also sends to, without naming the other app or asking you to remove it. How it builds each ID is in how cPixel counts each purchase once.

To keep the Facebook & Instagram app as Meta’s sender, answer Yes — keep it, and cPixel stops sending Meta server-side in cPixel’s Meta setup. That stops cPixel’s browser sends to that pixel too, whatever the label says. The choice is explained in cPixel alongside the Facebook and Instagram app. More about cPixel, which sends Shopify purchases to seven ad platforms.

Frequently asked questions

Is a Purchase on homepage load a duplicate?

No, it’s a false event: no order produced it. Shopify’s purchase event for pixels fires once per checkout, on the Thank you page or the first upsell page (Shopify: checkout_completed), never on a homepage. Look for a Purchase rule in Meta’s event setup tool, a custom pixel or a script in your theme, as in the September 2026 thread above.

Why are page views doubled while revenue looks right?

Because two tools send storefront events to the pixel but only one of them sends the purchase, for example Meta pixel code left in your theme alongside the Facebook & Instagram app. The purchase count is right and the page views are double, which is why this duplicate goes unnoticed. Remove the theme code, as Shopify advises (Shopify: Meta pixel).

Do duplicates hurt ad delivery?

They distort it. Meta says that without deduplication “you may see artificially high conversion numbers, which can mislead optimisation and budget allocation decisions” (Meta: about deduplication). Fix the sender first, then judge campaigns on the days after the fix.

cPixel Facebook Pixel CAPI GA4

cPixel is a Shopify app that sends your store’s events to Meta, TikTok, Google Analytics 4 and OpenAI’s ChatGPT Ads from shoppers’ browsers and from its own servers, with one shared event ID so each platform can keep a single copy. A live view shows each send, with the platform’s reply to server sends, and alerts flag a rejected token or stalled tracking.

Need help with cPixel? Email support@b2bgold.app.