Meta Purchases Higher Than Shopify? Dedup Fix
Why does Meta show more purchases than Shopify?
First check whether one order reaches Meta twice: if the pixel and the Conversions API both send it without the same event_id, the key Meta uses to discard the second copy within 48 hours, both can count. Then allow for 1-day view credit, modelled conversions and refunds Meta never hears about.
Meta’s purchase count and Shopify’s order count answer different questions, so some gap is normal. When Meta is higher, the causes come in two kinds and you fix them differently: counting faults, where one order reaches Meta more than once, and attribution rules, where Meta credits purchases your store never ties to an ad. Rule out the faults first. They are the only part of the gap you can make go away.
For the full check on duplicate events, see How do I diagnose duplicate events between pixel and CAPI?; for gaps that move between days, see Why do Meta and my store report different purchase counts?
Is Meta counting the same order twice?
This is the fault worth hunting, because it inflates every number downstream of it. Three versions are documented:
- Pixel and server copies without a shared ID. Meta discards the second copy when
event_nameandevent_idmatch within 48 hours. Its own example is blunt: two orders sent from both the pixel and the Conversions API without matching order numbers read as “four unique purchases” (server event parameters). - Two pixels, or one pixel installed twice. Shopify warns that a pixel left in your theme after connecting the Facebook & Instagram app means “more than one pixel on it, which can result in duplicate or incorrect data in your reports” (Meta pixel on Shopify).
- A purchase that fires again. Meta lists incorrect tracking code, duplicate fires and page reloads among the causes of repeat pixel events (event setup troubleshooting).
One more source of phantom purchases: events sent with a test code are not dropped. Meta says they flow into Events Manager and are used for targeting and measurement (using the API), so never send test purchases to the dataset your ads optimise on.
How do I fix double counting, step by step?
- Compare one full week of Ads Manager purchases with Shopify orders for the same dates, in the same time zone.
- Open Events Manager, select your dataset, click View details on Purchase, and check the Event deduplication tab for event_id coverage on both sources.
- Send the order number as
event_idfrom the server and aseventID, the fourthfbq('track')argument, from the pixel. - Remove any second copy of the pixel from theme.liquid, your tag manager or Shopify’s Settings > Customer events, keeping one installation.
- Place one test order with Test events open and confirm Meta receives one Purchase and marks its twin as deduplicated.
- Recheck a full week after the fix before you change any budget.
If you run Shopify’s Facebook & Instagram app alone, Meta says partner integrations such as Shopify add the deduplication parameters for you (about deduplication); the risk is a second copy outside it. For a pixel that stops firing instead, see Why is my Meta pixel not firing on Shopify?
| Cause | What it does to the count | Where to check | Fix |
|---|---|---|---|
| Pixel and server copies without a shared ID | One order counted twice | Events Manager > Purchase > Event deduplication | Order number as event_id on both |
| Second pixel copy | Duplicate or conflicting events | theme.liquid, tag manager, Customer events | Keep one installation |
| Purchase fires again on reload | Repeat events from one buyer | Test events while reloading the thank-you page | Send Purchase once per order ID |
| 1-day view credit | Purchases with no click counted | Columns > Compare attribution settings | Read 7-day click beside the default |
| Refunds and cancellations | Reversed orders stay counted | Shopify refunds against Meta purchases | Compare with net orders |
| Impression-date reporting | Daily totals shift between days | A full week instead of a day | Compare weeks, not days |
Does Meta count people who only saw an ad?
Yes, by default. New ad sets use a 7-day click or 1-day view attribution setting (how conversions are attributed), and view-through counts purchases made within 1 day after someone was shown your ad (attribution settings). Meta also notes that it can credit a purchase to an ad someone saw but never clicked, which some third-party tools struggle to do (conversion count differences). Shopify’s order count has no view-through at all.
To see how much of your count rests on views, open Ads Manager, choose Columns: Performance, select Compare attribution settings, and add 1-day view and 7-day click beside your default (compare attribution settings). Report click-only conversions as your spine and treat view-through as a separate, discounted line.
A wider window reallocates credit; it does not create revenue. Illustrative numbers: $5,000 of spend credited with 100 conversions on 1-day click is a reported $50 cost per result. If 7-day click credits the same spend with 140, reported cost falls to $35.71, an apparent 28.6% improvement with no additional sale.
Are some of Meta’s purchases estimated?
Some are. Where conversion data is missing or partial, for example because of privacy choices, Meta models it from similar groups it can measure, and it may also distribute reported conversions across campaigns, ad sets and ads (about modeled conversions). Those estimates sit in the same column as counted purchases. Modelling is not dishonest, and Meta validates it against ground-truth data such as holdout groups, but it is still an estimate, and your store will never show it. For how to size it, see How much of my Meta ROAS is estimated rather than observed?
Why don’t refunds and cancellations come off Meta’s count?
Because Meta never hears about them. Meta’s list of 17 standard events includes Purchase but no refund or cancellation event (Meta Pixel reference), so a standard setup reports the order at checkout and nothing after. Shopify, meanwhile, shows you refunds and cancellations, so the two drift apart in exactly the categories that return the most.
| Revenue basis | What it includes | Use it for |
|---|---|---|
| Reported (gross) | Order value sent at checkout, before any reversal | Meta’s optimisation signal |
| Net (after refunds) | After returns, cancellations and failed orders | Budget and margin decisions |
If you have never reconciled the two, your “winning” ROAS threshold is set on money some of which you gave back.
Why do the daily numbers never line up?
Because the two systems date a purchase differently. Ads Manager gives each conversion to the last ad the person clicked, or the last one viewed if there was no click, and files it under the date of the impression; Commerce Manager’s tagged-content reports, by contrast, use the conversion date and a fixed 28-day click and 1-day view window (how conversions are attributed). Your store records the day the order was placed. A purchase on Friday from an ad clicked on Monday lands on Monday in Ads Manager and Friday in Shopify, so compare whole weeks.
Recent days also keep changing after the fact, as late purchases and server events are filed under earlier impression dates: see Why do Facebook conversions show up days after the ad?
If the counts match, is Meta’s ROAS real?
Not necessarily. Matching counts mean Meta credited roughly as many purchases as you made, not that its ads caused them. A retargeting ad can take credit for buyers already on their way to checkout, and every other channel claims its own share of the same orders. Meta’s conversion lift test answers the causal question by withholding ads from a random holdout group and comparing the two (lift and holdouts), and Meta now also offers an incremental attribution model that predicts whether a conversion was caused by an ad (attribution models).
What should you trust instead?
Demote reported ROAS from verdict to signal, and triangulate against numbers that cannot be double-claimed:
- MER (total revenue ÷ total ad spend) as the business number. No channel can claim it twice.
- Net revenue after refunds for any margin or scaling decision.
- Click-only conversions as your working baseline, with view-through and modelled conversions as labelled side lines.
- Periodic holdouts on retargeting and warm audiences, to separate credited sales from caused ones.
When reported ROAS and MER diverge, MER wins.
Can software help?
With a store connected, Bach.ai shows Meta-reported revenue beside your store revenue and store revenue per dollar of Meta spend, and flags gaps of 25% or more. Its audit ranks the leaks it finds by estimated dollar impact and proposes fixes, and applies a fix on Meta only after you approve it. For the wider tracking review, see the Meta ads audit checklist.
FAQ
Is it normal for Meta to show more purchases than Shopify?
Some gap is normal, because Meta counts purchases it attributes under its own rules, including 1-day view credit, people matched across devices and modelled conversions, while Shopify counts orders. A gap that appears suddenly, or a Meta count above your total orders, points to double counting, so check deduplication first.
How do I know if Meta is double counting purchases?
Open Events Manager, view details on Purchase and read the Event deduplication tab: both pixel and server events should carry event_id. Then place a test order with Test events open. Meta’s own example shows two orders without matching IDs reading as four purchases, so missing IDs are the first suspect.
Does Shopify deduplicate the pixel and Conversions API for me?
Meta says partner integrations, Shopify among them, add the deduplication parameters automatically. That covers events the Facebook & Instagram app sends. A second pixel pasted into your theme or a tag manager sends its own events without a shared ID, which is why Shopify tells you to remove old pixel code after connecting.
Which attribution setting should I compare with Shopify?
Compare 7-day click, which drops view-through credit, beside your default 7-day click or 1-day view, using Columns: Performance and Compare attribution settings in Ads Manager. The difference is the share of your count that rests on views. Then compare whole weeks, because Ads Manager dates purchases to the impression.
Should I trust Meta or Shopify?
Trust Shopify for what you sold and Meta for what Meta credits to your ads. They answer different questions. Use Shopify’s net revenue for margin decisions, MER for the overall health of your spend, and Meta’s numbers for comparing ads inside Meta, ideally checked against a lift test.
Sources: Meta, Server Event Parameters, Using the Conversions API, Meta Pixel reference; Meta Business Help Center, How conversions are attributed, Attribution models and settings, Compare attribution settings, Conversion count differences, About modeled conversions, About deduplication, Event setup troubleshooting, Lift and holdouts; Shopify Help Center, Meta pixel (all checked 1 Oct 2026).