Webclat / Ecommerce
ecomm.webclat.com

Why do Facebook Pixel AddToCart/Purchase values come through wrong or duplicated on a Shopify store?

Wrong values and duplicated events look similar in a dashboard but come from different bugs - treating them as one problem wastes the diagnosis.

Quick answer

Wrong values are almost always a currency or line-item scope mismatch - the pixel sending a per-unit price instead of quantity times price, or a hardcoded currency on a multi-currency store. Duplicated events are almost always the same multi-integration overlap that causes duplicate Purchase events: theme code, an app's own pixel, Shopify's native Facebook and Instagram channel, and a manually added custom pixel all firing the same event independently.

Why this happens

Value bugs come from theme or app code reading a per-unit or per-variant price rather than quantity × price, or ignoring an active discount or compare-at-price. On multi-currency stores, a pixel hardcoded to a single currency string will report a wrong value for any shopper checking out in a different presentment currency, because the number is right but the currency label attached to it is not.

Duplicate bugs share the same root cause as duplicate Purchase events generally: several integration points - theme code, an app's own silent pixel integration, the Facebook & Instagram sales channel, and a manually added custom pixel - each fire their own AddToCart or Purchase call for the identical user action. Meta counts each call as a separate event unless the calls share the same event_id.

Fix it

  1. Inventory every place AddToCart or Purchase could be firing: theme code, any app with its own Facebook Pixel integration (review apps, upsell apps, and loyalty apps commonly add one without making it obvious), the Facebook & Instagram sales channel, and any custom pixel or GTM setup.
  2. For value bugs: confirm the value sent equals quantity × line-item price (post-discount) for AddToCart, and the full order total for Purchase, matching what Shopify's order total shows - read these from the actual cart or checkout event payload, never a hardcoded product price.
  3. For multi-currency stores, always send the currency parameter dynamically from the event context - for a Web Pixels API pixel, that's event.data.checkout.currencyCode - rather than hardcoding a currency string.
  4. For duplicates, disable every AddToCart/Purchase source except one, using the same single-source-of-truth approach as the Trekkie duplicate-pixel question in this section.
  5. If you intentionally keep more than one pixel destination (for example two separate ad accounts), implement event_id consistently between the browser pixel and the server-side Conversions API event for the same pixel ID, so Meta's dedup applies - this only dedupes within one pixel ID, not across two different ones.
  6. Recheck any app that quietly adds Facebook Pixel tracking as a bundled feature - Shopify app permission screens rarely disclose this clearly, and it's the single most common source of a mystery duplicate that a merchant didn't knowingly configure.

Branch: if the value is wrong on Purchase but correct on AddToCart, check whether tax and shipping are included consistently - a Purchase event that includes tax while your Shopify order-total comparison excludes it (or vice versa) looks like a "wrong value" bug but is actually a definition mismatch.

How to verify it worked

Runtime check

Open Meta Pixel Helper on a product page, click Add to Cart once, and confirm exactly one AddToCart event logs per pixel ID, with a value matching quantity × displayed price. Then place one test order and confirm exactly one Purchase event per pixel ID in Events Manager's Test Events tool, with a value matching the order total shown in Shopify admin and the correct currency code for the checkout currency actually used.

Find out what your tracking actually reports.

A runtime audit of your store: every tag that fires, every event that reaches your analytics and ad platforms, and where the numbers diverge from the orders table. Evidence first, opinions second.

Request an audit