Meta Ads conversions almost never match Shopify orders, and that is normal, not a bug. Meta counts view-through conversions, modeled estimates, and cross-device sales inside its attribution window, while Shopify only records completed checkouts on the buyer's last click. A gap where Meta reports more purchases than Shopify shows orders is expected on the default window.
The fix is not to force the two numbers to equal each other. It is to understand which number answers which question, then reconcile both against the money that actually landed in your bank.
If you have ever exported Meta Ads Manager and Shopify side by side and found two different purchase counts, you are not alone. This is the single most common reconciliation headache for Shopify stores running paid social. Let's walk through exactly why the numbers diverge, how big the gap should be, and how to turn the confusion into a profit decision.
The short version: three systems, one sale, three counts
One real order can legitimately appear as one conversion in Shopify, one conversion in Meta, and a fraction of a conversion in GA4. Each platform is measuring a different thing and is internally correct.
Shopify asks "did a sale happen, and who was the last click?" Meta asks "did my ad plausibly influence this sale within my window?" Those are different questions, so they produce different answers. Trying to make them match is like adding your speedometer to your odometer.
This same split shows up whether you compare purchases, revenue, or ROAS. If you want the wider picture across every metric, start with our guide to reconciling your ecommerce data, which maps how all these tools disagree by design.
Why Meta over-counts vs Shopify
View-through conversions
The biggest inflator is view-through attribution. On the current default window of 7-day click plus 1-day view (Foreplay; Jon Loomer), Meta claims credit for a purchase made within a day of someone merely seeing an ad, even if they never clicked.
Shopify has no concept of a view. It only logs a completed checkout and files it under the buyer's actual last referrer. So every view-through buyer is a conversion in Meta that will never appear as a Meta order in Shopify.
Modeled conversions
When Meta cannot directly observe a purchase, because of an iOS opt-out, a consent decline, or an ad blocker, it estimates the conversion with a statistical model and reports the estimate as if it were counted. Shopify never models. It reports only real, completed orders.
Modeled conversions are estimates of real-but-unobservable sales, not fabricated demand. They can overshoot or undershoot, but they are a big reason platform counts exceed server-side counts.
Attribution timing and cross-device
Meta reports a conversion on the click date, not the purchase date. A click on Monday that becomes a sale on Thursday shows up in Meta on Monday and in Shopify on Thursday. Compare single days and the numbers will never line up, so always compare on trailing seven-to-fourteen-day windows.
Meta also stitches users across devices. Someone who sees your ad on a phone and buys on a laptop is credited to Meta, while Shopify's last-click attribution files that laptop order under "direct" or "organic."
How big should the gap be?
A gap of roughly 20 to 35 percent between Meta-reported purchases and Shopify orders is normal on the default window, according to field data from Vaizle and TrackBee. Most of that excess is view-through plus modeled conversions.
Two situations are genuinely worth investigating. First, if Meta shows purchases at about double your Shopify orders, that is almost always a deduplication misconfiguration, not real inflation, per TrackBee. Second, if Meta reports fewer purchases than Shopify, you are likely losing pixel events to ad blockers and consent declines, which affect an estimated 10 to 25 percent of users, according to Audiense/Elevar.
Fix the tracking gaps you actually can fix
Some of the gap is structural and cannot be closed. Some of it is real data loss you can narrow.
Deduplication is the highest-value fix. Best practice is redundant tracking: send the same Purchase from both the browser Pixel and server-side CAPI so blocked-browser events are recovered by the server. Meta then collapses the two copies into one using a shared event_id plus matching event_name, or fbp as a fallback, within a 48-hour window, per Meta for Developers.
Here is the counterintuitive part. Correct redundant setup should not raise your conversion count. It should keep the count stable while recovering blocked events. If your number jumped after you added CAPI, you have a dedup bug, not a win.
And beware the common myth that CAPI makes the numbers match. It recovers lost events, but it does nothing about view-through, modeling, click-date reporting, or last-click versus window. Even flawless tracking leaves a structural gap.
A worked example: one week, four different numbers
Say your store gets 100 real orders in a week. Each order is $40 of product plus $5 shipping and $4 tax, so $49 total. Of those 100 buyers: 55 clicked a Meta ad within seven days before buying, 15 only saw a Meta ad within a day, 10 clicked Google last, and 20 came from organic or direct. Eight of the 100 later request refunds.
Meta Ads Manager reports about 78 purchases. That is 55 click-through plus 15 view-through, which is 70, plus roughly 8 modeled conversions. It reports revenue at subtotal only, so 78 × $40 is about $3,120. It does not subtract the 8 refunds, and it files some of these on the prior week's click dates.
Shopify Analytics reports 100 orders. By last non-direct click it credits about 55 to Facebook, 10 to Google, and 35 to search, direct, or other. The 15 view-through buyers are not credited to Facebook here, because they clicked nothing. Total sales of 100 × $49 is $4,900, dropping to about $4,508 after the 8 refunds at $49 each.
Your bank payout is different again. Start with $4,900 captured. Subtract processing fees of about 2.9 percent plus 30 cents per order on the Basic plan, per Webgility: that is roughly $142.10 plus $30.00, or $172.10. Subtract 8 refunds at $49 for $392.00, and one chargeback fee of about $15, also per Webgility. The deposit is $4,900.00 − $172.10 − $392.00 − $15.00 = $4,320.90.
So one week of 100 real orders shows up as Meta's 78 purchases at $3,120, Shopify's 100 orders at about $4,508 in total sales, and $4,320.90 actually deposited. None is wrong. Shopify is your source of truth for how many sales happened, Meta for how many its ads influenced, and the payout for cash in the bank.
Why the revenue and ROAS numbers drift too
Notice that even the dollar figures disagreed above. Meta passed subtotal, Shopify counted shipping and tax, and neither reflected refunds the way your payout did. If your revenue lines refuse to reconcile, dig into why Meta Ads revenue doesn't match Shopify.
The same mismatch cascades into ROAS, because you are dividing two numbers that were measured differently. Our breakdown of why Meta Ads ROAS doesn't match Shopify shows how a headline ROAS figure can be barely breaking even once true costs land. And if it is the raw order counts throwing you off, see why Meta Ads orders don't match Shopify.
The angle the SERP skips: profit, not conversion counts
Every article on this topic stops at "the numbers won't match, and that's okay." The part they skip is that you still have to decide where to spend tomorrow's budget, and conversion counts alone cannot tell you that.
A campaign can win on Meta's inflated conversion view and still lose money once you subtract product cost, shipping, processing fees, and refunds, exactly like the payout gap above. What you need is true per-order profit, joined across the platforms that each hold one piece of the truth.
That is the problem PodVector is built for. It connects Shopify, Meta Ads, Google Ads, Printify, and Printful, then computes your true per-order profit so ad spend is measured against real margin, not platform-reported conversions. Victor, its AI operator, reads that combined data and proposes moves, executing approved actions on the Shopify side; he reads your ad data but does not touch your ad account. PodVector is not a dashboard you have to babysit; it is an operator that surfaces the profit story your reports fragment. Once you are tracking down to margin, the Google side matters too, so here is the best app for Google Ads pixel tracking on Shopify.
FAQs
Is it bad that Meta shows more conversions than Shopify?
Usually no. A 20 to 35 percent gap on the default 7-day click plus 1-day view window is expected, per Vaizle, driven by view-through and modeled conversions. It only signals a real problem if Meta is roughly double Shopify, which points to a deduplication bug, or if Meta is well below Shopify, which points to lost pixel events.
Will setting up the Conversions API make Meta match Shopify?
No. CAPI recovers events lost to blockers and consent declines, which narrows tracking gaps. It does nothing about the structural methodology gaps like view-through, modeling, and last-click versus attribution window, per Meta for Developers. Expect a smaller gap, not a match.
Why did my Meta conversions double after I added CAPI?
You almost certainly have a deduplication misconfiguration. When both the browser Pixel and server CAPI send the same Purchase without a shared event_id, Meta counts it twice. A correct setup keeps your count stable while recovering blocked events, per Meta for Developers.
Which number should I trust for reporting?
Use each for its purpose. Shopify order count and total sales are the truth for how many sales happened and how much revenue you earned. Meta's number tells you which sales its ads plausibly influenced. Your Shopify Payments payout is the truth for cash, and you should reconcile it against balance transactions, not the sales report.
How do I compare Meta and Shopify fairly?
Compare on trailing windows of seven to fourteen days, never single days, because Meta reports on the click date and Shopify on the purchase date. Then track the ratio over time. A stable ratio is healthy; a sudden change in the ratio is your real signal that tracking broke.
Do refunds explain part of the gap?
Yes. Shopify and your payout both drop when an order is refunded, but Meta and GA4 generally keep the original conversion. After a refund-heavy week, your platform numbers stay inflated while Shopify's fall, widening the gap even though nothing is broken.