Yes, Meta Ads almost always overreports compared to Shopify — and it is by design, not a bug. Meta counts view-through conversions, modeled conversions, and cross-device sales inside its attribution window, while Shopify only records completed checkouts with last-click credit. A gap where Meta shows more purchases than Shopify shows orders is expected. The fix is not to make the numbers match; it is to know which number answers which question and reconcile both against real per-order profit.

If you have ever put Meta Ads Manager and your Shopify dashboard side by side, you have seen it: Meta claims fifty purchases, Shopify shows thirty-eight orders. The instinct is that one of them is broken or lying. Neither is.

This guide walks through exactly why Meta overreports, how big a gap is normal, and how to reconcile the two so you can trust your ad math. It is a sibling to our breakdown of why GA4 and Shopify report different numbers and part of our broader guide to reconciling your ecommerce data.

How much does Meta overreport compared to Shopify?

On Meta's default attribution setting, a gap of roughly twenty to thirty-five percent between Meta-reported purchases and Shopify orders is considered normal, according to Vaizle and TrackBee. If Meta shows about that much more than Shopify, nothing is wrong — you are looking at two systems doing their jobs correctly.

The number to watch for is a Meta count near double your Shopify orders. That is rarely real inflation; it is almost always a deduplication error where the browser Pixel and the server-side Conversions API both report the same purchase without a shared key. More on that below.

Why Meta counts more purchases than Shopify records

Meta and Shopify answer two different questions. Shopify asks "did a sale happen?" Meta asks "did my ad plausibly influence a sale?" Those questions have different answers, so they produce different counts.

View-through conversions

This is the single biggest inflator. Meta's default window is seven-day click plus one-day view, per Foreplay and Jon Loomer. The "one-day view" half means Meta claims credit when someone merely saw your ad — no click — and bought within a day.

Shopify has no concept of a view. It only records a completed checkout and credits whatever channel the buyer last clicked. So every view-through sale is a purchase Meta counts and Shopify files under organic or direct.

Modeled conversions

When Meta cannot directly observe a conversion because of an iOS opt-out, a blocked pixel, or a consent decline, it estimates the sale with a statistical model and reports the estimate as a conversion. Shopify never models — it reports only real, completed orders. These modeled conversions are real but unobservable sales, not fabricated demand, and they add to Meta's count.

Cross-device attribution

A shopper sees your ad on their phone and buys later on a laptop. Meta stitches that together through the logged-in user and credits the ad. Shopify's last-click model ties the order to whatever referrer landed on the buying device — often direct or search — not Meta.

Click-date versus purchase-date reporting

Meta reports a conversion on the date of the ad click that earned the credit, not the date of the purchase. A Monday click that converts on Thursday shows up in Meta on Monday and in Shopify on Thursday. This alone throws off any single-day comparison, so always compare on trailing seven- to fourteen-day windows.

The tracking gaps that push the other way

Not every difference makes Meta bigger. Some genuinely lose data, and these mostly make Meta undercount — which is why simple setups swing both ways.

Ad blockers, Safari and Firefox tracking prevention, and cookie-consent declines stop the browser Pixel from firing while Shopify still records the order server-side. Field estimates put affected traffic at roughly ten to twenty-five percent of users, according to Audiense and Elevar. Add buyers who close the tab before the thank-you page loads, and client-side purchase events show the largest gap of any event type.

Meta then backfills these losses with modeling. So your headline Meta number is often window-based inflation and modeled recovery layered on top of real signal loss — several forces pulling in opposite directions at once.

The double-counting trap: Pixel and CAPI dedup

Best practice is to send the same Purchase event from both the browser Pixel and the server-side Conversions API, so blocked-browser events get recovered by the server. Meta is supposed to collapse the two copies into one.

It only does that if you give both copies a matching identifier. The primary method is an identical event_id plus event_name on each copy; events are deduplicated only if received within forty-eight hours of each other, per Meta's developer docs. Miss the shared key and Meta counts every redundant purchase twice.

So if your Meta count jumped after you added CAPI, that is not more sales — it is a dedup misconfiguration. Correct redundant tracking keeps your count stable while recovering blocked events; it should not raise the number.

Can you make the numbers match?

No, and chasing an exact match wastes time. Setting up the Conversions API recovers lost events, but it does nothing about view-through, modeling, last-click versus window, or click-date reporting. Even with flawless tracking, a structural gap of over twenty percent remains. This is the same lesson merchants learn with Google Ads overreporting compared to Shopify and GA4 overreporting compared to Shopify: aim for a stable, explainable ratio, not equality.

A worked example: one week, four different "sales" numbers

Say your print-on-demand store runs Meta ads for a week and books 100 real orders. Average order value is forty dollars of product, plus five dollars shipping and four dollars tax, so forty-nine dollars total per order. Of those 100 buyers: fifty-five clicked a Meta ad within seven days, fifteen only saw a Meta ad within one day, ten came via Google, and twenty via organic or direct. Eight later request refunds.

Here is how each system reports that identical week.

Meta Ads Manager shows about 78 purchases. Fifty-five click-through plus fifteen view-through gives seventy by window, plus roughly eight modeled conversions recovering buyers it could not observe. It reports on the click date, so some land in the prior week, and it does not subtract the eight refunds. Its revenue shows the forty-dollar subtotal only, because that is what the pixel passes: 78 × $40 = $3,120.

Shopify Analytics shows 100 orders. By last non-direct click it credits about fifty-five to Facebook, ten to Google, and thirty-five to search, direct, or other. The fifteen view-through buyers clicked nothing, so Shopify does not credit them to Facebook. Total sales run 100 × $49 = $4,900, and after eight refunds of forty-nine dollars each, net sales drop to about $4,508.

The bank payout is different again. Shopify's sales report and your payout are not the same thing — fees live in the payout, not the sales report, per Shopify's Finances report docs. Assuming a Basic-plan US rate of about 2.9% plus thirty cents per transaction, per Webgility, the payout breaks down like this:

  • Captured charges: 100 × $49 = $4,900.00
  • Less processing fees: about 2.9% of $4,900 plus $0.30 × 100 = about $172.10
  • Less eight refunds: 8 × $49 = $392.00
  • Less one chargeback fee of about $15, per Webgility: $15.00
  • Net deposited: about $4,320.90

So one week of 100 real orders produces four numbers: Meta's 78 purchases at $3,120, Shopify's 100 orders at roughly $4,508 in total sales, and about $4,320.90 in the bank. None is wrong. Shopify's order count and total sales are the truth for how many sales happened. Meta's number is the truth for how many of those its ads plausibly influenced. The payout is the truth for cash in the bank.

How to reconcile Meta and Shopify for real

Start from Shopify as your source of truth for order count and revenue, then treat Meta's number as an influence estimate, not a sales count. Compare on trailing windows, never single days. Confirm your dedup key is set so the Pixel and CAPI collapse into one event. And separate your sales report from your payout, since refunds, fees, and chargebacks only ever hit Shopify and your bank, never Meta.

The catch is that none of these tools shows you the number that actually matters: profit per order after product cost, shipping, fees, refunds, and ad spend. Meta shows revenue at subtotal with no costs; Shopify shows sales but not your true margin; your payout shows cash but not attribution.

This is where PodVector fits. It connects Shopify, Meta Ads, Google Ads, Printify, Printful, and Stripe, and computes true per-order profit across all of them — so you can see what a Meta-attributed order is actually worth after every deduction, not just what Meta claims it drove. Victor, its AI operator, reads your ad data and proposes moves, then executes the writes on the Shopify side with your approval. Victor does not touch your ad account, and it is not a dashboard — it analyzes your live data and acts on it.

If you are moving your catalog over as part of cleaning this up, our guide on migrating from Etsy to Shopify covers how to keep attribution intact through the switch.

FAQs

Is Meta lying when it reports more purchases than Shopify?

No. Meta counts view-through and modeled conversions by design and openly discloses it. It is answering a different question than Shopify — "did my ad influence this sale?" versus "did a sale happen?" Both counts are internally correct.

What is a normal gap between Meta and Shopify?

Roughly twenty to thirty-five percent more purchases on Meta than orders on Shopify, on the default window, according to Vaizle and TrackBee. A gap near double your Shopify orders usually signals a deduplication problem, not real performance.

Will the Conversions API make my numbers match?

No. CAPI recovers lost events, which narrows tracking gaps, but it does nothing about the structural methodology gaps — view-through, modeling, last-click versus attribution window, and click-date reporting. A meaningful gap remains even with perfect tracking.

Why did my Meta conversions jump after I added CAPI?

Almost certainly a missing deduplication key. Without a shared event_id and event_name on both the Pixel and server copies, Meta counts the same purchase twice, per Meta's docs. Correct setup keeps your count stable, not higher.

Should I switch Meta to a one-day-click window to match Shopify?

You can, and it will narrow the gap, but it also cuts your reported conversions substantially — TrackBee notes switching from seven-day click plus one-day view down to one-day click can drop reported conversions by around forty percent for the same real sales. It changes what the campaign optimizes toward, so treat it as a strategy decision, not a reporting cleanup.

Why don't refunds lower my Meta numbers?

Meta and GA4 generally do not retroactively remove a conversion after a refund, so their totals stay high. Only Shopify and your payout reflect refunds. That is one more reason Meta reads higher than your real, refund-adjusted sales.