The short version: both are "right," about different things
When Facebook says it drove 78 purchases and Shopify shows 100 orders, your instinct is to find the liar. There isn't one.
Shopify records a completed checkout on its own servers. That is an actual, undeniable sale. Meta records a conversion whenever a purchase happens inside its attribution window after someone clicked — or merely saw — your ad. Those are two different measurements of two different things.
So the real question isn't "which is right." It's "which number do I use for which decision." Get that straight and the mismatch stops being scary.
Why the numbers never match
The gaps split into two families: structural methodology differences that can't be fixed, and genuine tracking loss that better setup narrows. This is the same reconciliation problem behind why Meta overreports compared to Shopify.
Different attribution models
Shopify's default is last non-direct click: 100% of an order's credit goes to the last channel the buyer clicked before checkout. Meta credits itself whenever it touched the buyer in-window, click or view. So one sale can count as one order in Shopify (to whatever was last) and one conversion in Meta at the same time.
View-through conversions
With Meta's default window of seven-day click plus one-day view (Foreplay, Jon Loomer), Meta claims a sale made within a day of someone seeing your ad without clicking. Shopify has no concept of a view — only a completed checkout. This is the single biggest reason Meta's number runs high.
Modeled conversions and click-date reporting
When Meta can't directly observe a sale (blocked pixel, iOS opt-out, consent decline), it estimates one with a model and reports the estimate. Shopify never models. Meta also files conversions on the ad click date, not the purchase date, so a Monday click that converts Thursday lands in Meta on Monday and in Shopify on Thursday.
Real tracking loss
Ad blockers, Safari and Firefox tracking prevention, and cookie-consent declines stop client-side pixels from firing, so Meta undercounts while Shopify still books the sale server-side. Field estimates put affected traffic at roughly ten to twenty-five percent of users (Audiense/Elevar). GA4 has the same problem, which is a big part of why GA4 and Shopify numbers differ.
How big a gap is normal?
A gap is expected. A huge gap means something is broken.
On the default window, a Meta-over-Shopify purchase gap of roughly twenty to thirty-five percent is normal (Vaizle, TrackBee). Most of that excess is view-through plus modeled conversions.
Watch for the two danger signals. If Meta shows purchases at about two times your Shopify orders, you almost certainly have a Pixel-and-CAPI deduplication bug, not real inflation (TrackBee). And a common myth — "set up the Conversions API and the numbers will match" — is false: CAPI recovers lost events but does nothing about view-through, modeling, or last-click-versus-window, so a structural gap remains.
A worked example: one week, four different "sales" numbers
Say your store gets 100 real orders in a week. Suppose your average order is $40 in product, plus $5 shipping and $4 tax, so $49 total per order. Of those 100 buyers: 55 clicked a Meta ad within seven days before buying, 15 only saw a Meta ad within a day, 10 came via Google, and 20 via organic or direct. Eight buyers later request refunds. These figures are illustrative, but the relationships between them are exact.
Meta Ads Manager might report about 78 purchases. That's 55 click-through plus 15 view-through, which is 70, plus roughly 8 modeled conversions it couldn't observe directly. It reports revenue at subtotal only (say the pixel passes $40, not shipping or tax), so 78 × $40 = $3,120. It does not subtract the 8 refunds.
Shopify Analytics reports 100 orders. By last non-direct click it might credit about 55 to Facebook, 10 to Google, and 35 to search, direct, or other. The 15 view-through buyers clicked nothing, so Shopify files them under their real last referrer — not Facebook. Total sales start at 100 × $49 = $4,900, then drop to about $4,508 after the eight refunds.
So for one week of 100 real orders you already have three different counts, and none of them is wrong. Meta is measuring influence; Shopify is measuring sales.
The payout is a fourth number
Now the bank. Your Shopify Payments deposit is not "sales minus fees on today's orders" — it's a batch of balance transactions. Suppose you're on the Basic plan, where US online processing runs about 2.9% plus 30¢ per transaction (Webgility), and one order triggers a chargeback fee of roughly $15 (Webgility).
Walk the arithmetic: captured charges 100 × $49 = $4,900.00. Processing fees at 2.9% of $4,900 = $142.10, plus 100 × $0.30 = $30.00, so $172.10. Refunds issued 8 × $49 = $392.00. One chargeback fee = $15.00. That leaves $4,900.00 − $172.10 − $392.00 − $15.00 = $4,320.90 deposited.
Four numbers for one week: Meta 78 / $3,120, Shopify 100 orders / ~$4,508, and a bank deposit of $4,320.90. Reconciling them is the whole job, and it's exactly what data reconciliation is for.
Which number do I actually use?
Match the number to the decision:
- How many sales happened, and how much revenue? Shopify order count and total sales. It's server-side and authoritative.
- How much did my ads influence? Meta's number, read as a directional estimate on a trailing seven-to-fourteen-day window, never a single day.
- How much cash hit the bank? The payout report, reconciled against balance transactions — not against your sales report.
- Did I actually make money? None of the above alone. Revenue in one tool and ad spend in another can't tell you per-order profit.
That last gap is the one that matters most, and the one every reporting tool skips.
The number none of these tools gives you: profit
Here's the trap. Meta shows revenue over spend. Shopify shows revenue. Neither subtracts your product cost, the print or shipping cost, the transaction fee, or the refund.
Continue the example. Suppose that $40 subtotal order costs you $12 to make and fulfill, and it carried its share of ad spend plus the roughly $1.46 transaction fee (2.9% of $49 plus 30¢). After product cost, fees, and ad spend, the profit that order actually contributed can be a small fraction of what the ROAS view implies — and Meta's revenue-over-spend chart never shows you that per-order truth. A campaign can look profitable in Ads Manager and quietly lose money once real costs land.
To see true profit you have to join the sale, the fees, the fulfillment cost, and the ad spend into one per-order figure. That's what PodVector does: it connects Shopify, Meta Ads, Google Ads, Printify, and Printful, then computes true per-order profit — not just revenue, not just ROAS. Its AI employee, Victor, analyzes that live data and proposes moves; he reads your ad data but does not touch your ad account, and any writes he executes are on the Shopify side with your approval. Victor is not a dashboard — he works the numbers so you don't reconcile four tools by hand.
Once profit is unified, the Facebook-versus-Shopify argument mostly dissolves. You stop asking which count is "correct" and start asking whether each order made money.
FAQs
Why does Facebook show more purchases than Shopify?
Mostly view-through and modeled conversions. Meta counts a sale within a day of someone seeing your ad, plus it estimates conversions it can't directly observe. Shopify only records completed checkouts. A gap of roughly twenty to thirty-five percent on the default window is normal (Vaizle).
Is Shopify or Facebook more accurate for sales?
Shopify, for sales. Its order count and revenue are recorded server-side and reflect real, completed transactions. Facebook is more accurate at estimating ad influence, which is a different question. Use each for what it measures.
Will the Conversions API make my numbers match?
No. CAPI recovers events lost to ad blockers and consent declines, which narrows tracking gaps. But it can't close methodology gaps like view-through, modeling, or last-click versus attribution window. Expect a stable ratio, not equality — and if your count jumps after adding CAPI, suspect a deduplication misconfiguration (TrackBee).
Why doesn't my Shopify payout match my sales?
Because a payout is a batch of balance transactions — charges minus processing fees, refunds, and chargebacks that cleared in that window — not a day's orders. US online processing runs about 2.9% plus 30¢ per transaction on Basic (Webgility), and third-party gateway sales like PayPal never enter Shopify Payments payouts at all.
Should I compare the numbers daily?
No. Meta reports on the ad click date and Shopify on the purchase date, so daily comparisons desynchronize even when totals eventually agree. Always compare on a trailing seven-to-fourteen-day window.
Does GA4 solve the discrepancy?
No, it adds a third view. GA4 uses data-driven attribution and client-side tracking, so it typically shows fifteen to thirty percent fewer purchases than Shopify (BlueFrog, Consentmo). It's another lens, not a referee.
I'm moving my store — does this affect imported data?
Reconciliation logic is the same regardless of where your customers came from. If you're consolidating, see the mechanics of exporting your Etsy customers into Shopify so your order-of-truth stays clean from day one.