If you open Meta Ads Manager and Shopify side by side, the revenue lines rarely agree. Meta says your campaign drove one purchase-value total; Shopify shows a different sales figure for the same week. Before you assume the pixel is broken or Meta is lying, know that a persistent gap is normal and structural.
This article explains exactly where each dollar of the difference comes from, walks a full worked example, and shows how to reconcile the two the right way. If the deeper issue for you is order counts or return-on-ad-spend rather than revenue, the sibling breakdowns on why Meta ad orders don't match Shopify and why Meta ROAS doesn't match Shopify cover those angles.
The short version: two systems answering two questions
Shopify answers one question: how much revenue was actually collected? It records every completed checkout on its server, so it owns the truth about sales and refunds.
Meta answers a different question: how much revenue did my ads plausibly influence? Its purchase value is a credit figure based on an attribution window, not a bank statement. So the two totals are measuring different things and were never meant to be equal.
A gap of roughly a fifth to a third between Meta-reported purchases and Shopify orders is considered normal on Meta's default window, with Shopify showing more real orders and Meta showing more claimed influence, according to reconciliation guides from Vaizle and TrackBee. The revenue gap tends to run in the same direction, and often wider, because of how Meta values each purchase.
Why Meta's revenue number runs higher
Four mechanisms stack on top of each other. Understanding each one tells you how much of your gap is expected versus a real problem worth fixing.
View-through and modeled purchases inflate the count
Meta's default attribution setting is a seven-day click plus one-day view window, and the longer twenty-eight-day windows were removed after Apple's tracking changes, according to Foreplay and Jon Loomer. The one-day view half is the biggest inflator: Meta claims a purchase made within a day of someone merely seeing an ad, with no click at all. Shopify has no concept of a view; it only records a checkout.
On top of that, Meta estimates purchases it cannot directly observe — from iOS opt-outs, blocked pixels, or declined consent — using statistical models, and reports the estimate as revenue. Shopify never models. So more counted purchases, each carrying revenue, means a higher Meta total before you even look at how each purchase is valued.
Meta usually reports subtotal, Shopify reports total sales
This is the part most articles skip, and it cuts the other way. Shopify's own reports separate three revenue tiers — gross sales, net sales, and total sales — where total sales adds shipping and tax on top, per the Shopify Help finances documentation.
Many pixel setups pass only the product subtotal as purchase value, excluding shipping and tax. So on a per-order basis Meta's revenue can actually be lower than Shopify's total sales, even while Meta's purchase count is higher. When you compare revenue, you have to know which Shopify tier you are looking at, or the comparison is meaningless.
Meta credits revenue on the click date, not the order date
Meta reports a conversion on the date of the ad click or view that earned the credit, not the date the customer actually paid. A click on Monday that converts on Thursday shows up in Meta on Monday; Shopify records the order on Thursday.
This desynchronizes any daily revenue comparison even when the totals would eventually agree. Always compare on trailing seven- to fourteen-day windows, never single days.
Refunds never leave Meta's revenue total
When an order is refunded, Shopify reduces net and total sales, and the refund also comes out of your payout. Meta generally does not retroactively remove the original conversion, so its revenue total stays inflated after refunds. A store with a healthy return rate will always see Meta's revenue drift above Shopify's for this reason alone.
A worked example: one week, four revenue numbers
Say your print-on-demand store runs Meta ads for a week and books 100 real orders. Each order averages a $40 product subtotal plus $5 shipping plus $4 tax, so $49 collected per order. Of the 100 buyers, 55 clicked a Meta ad within seven days, 15 only saw an ad within a day, 10 clicked a Google ad last, and 20 arrived via organic or direct. Eight buyers later request refunds.
Shopify total sales. 100 orders × $49 = $4,900 before deductions. After 8 refunds at $49 each, that is 4,900 − 392 = $4,508 in total sales. This is the server-side truth for revenue collected.
Meta purchase value. Meta attributes 55 click-through plus 15 view-through, then adds roughly 8 modeled purchases it could not observe, for about 78 purchases. It values each at the $40 subtotal only, so 78 × $40 = $3,120. It does not subtract the 8 refunds, and it reports about a dozen of those purchases in the prior week on their click date.
Shopify payout (cash in the bank). Take the captured charges of $4,900, then subtract processing fees, refunds, and any chargeback. On a Basic-plan US-card rate of about 2.9% plus 30¢ per transaction, per fee summaries from ReportPundit and Webgility, fees run roughly 142 + 30 = $172. Subtract the $392 in refunds and a single chargeback fee of about $15 (Webgility), and the deposit is about 4,900 − 172 − 392 − 15 = $4,321.
So one week of 100 real orders produces four different revenue numbers: about $3,120 in Meta, roughly $4,508 in Shopify total sales, and about $4,321 actually deposited. None is wrong. Each measures a different thing — influence, collected revenue, and cash. This is the heart of what the ecommerce data reconciliation hub walks through across every metric.
How to actually reconcile the two
You do not force the numbers to match. You confirm each is behaving normally, then compare the right pairs.
First, compare on a trailing window, never a single day, to cancel out the click-date timing shift. Second, make sure you are comparing like revenue tiers: Meta subtotal against Shopify's product-level revenue, not against total sales with shipping and tax baked in. Third, tighten your attribution setting to one-day click if you want a figure closer to Shopify's last-click reality, understanding that it will report fewer purchases for the same real sales.
Fourth, treat refunds explicitly, since only Shopify and your payout reflect them. If after all that Meta's purchase count still sits far beyond the normal fifth-to-a-third band, suspect a duplicate-event problem rather than genuine inflation. A store showing Meta purchases at roughly double Shopify orders usually has a pixel-and-server deduplication misconfiguration, since Meta only collapses the two copies of an event when they share an identifier and arrive within a 48-hour window, per Meta's developer documentation. A related mismatch in traffic, covered in why Meta sessions don't match Shopify, often shows up alongside it.
Where profit comes in — the number none of them show
Here is the trap. Meta shows influenced revenue. Shopify shows collected revenue. Your payout shows cash. Not one of them shows profit, because none subtracts your product cost, your fulfillment cost, and your ad spend from the same order.
That is exactly the gap PodVector is built to close. It connects Shopify, Meta Ads, Google Ads, Printify, Printful, and Stripe, then computes true per-order profit — pulling the real Meta ad cost, the real Shopify revenue, the real fulfillment bill, and the processing fee into a single figure per order. Victor, its AI operator, reads that connected data and proposes moves; the actions he executes are Shopify-side and taken with your approval, and he does not touch your ad account. PodVector is not a dashboard you have to interpret — it reconciles the sources that never agree and tells you which orders actually made money. If you are still on Etsy and weighing the move, the walkthrough on migrating from Etsy to Shopify is a good next step.
FAQs
Why is my Meta Ads revenue higher than my Shopify revenue?
Because Meta counts purchases Shopify does not — view-through sales from people who only saw your ad, and modeled sales it estimates for buyers it could not track — and it never subtracts refunds. It also credits revenue on the ad-click date rather than the order date. Shopify records only real, completed, collected orders. A higher Meta figure is the expected outcome, not a bug.
Should Meta and Shopify revenue ever match exactly?
No. They measure different things: Meta measures influenced revenue inside an attribution window, Shopify measures collected revenue server-side. Aim for a stable, explainable ratio on a trailing window rather than an exact match. If the ratio suddenly jumps, that is your signal to investigate.
Why is Meta's revenue lower than Shopify on a per-order basis?
Because many pixel setups pass only the product subtotal as purchase value, leaving out shipping and tax, while Shopify's total sales include both, per Shopify's finances documentation. So Meta can report more purchases yet a lower value per purchase. Always confirm which Shopify revenue tier you are comparing against.
Will setting up the Conversions API make the numbers match?
No. A server-side setup recovers events lost to ad blockers and closed tabs, which narrows tracking gaps. It does nothing about the structural gaps — view-through, modeling, click-date reporting, and last-click versus window attribution. Even with flawless tracking, a meaningful Meta-over-Shopify gap remains by design.
Which number should I trust for reporting revenue?
Shopify's total sales for how much revenue you actually earned, and your Shopify Payments payout for how much cash reached the bank after fees and refunds. Use Meta's revenue only to judge how much your ads influenced sales, never as your books. To know whether that influenced revenue was actually profitable, you need per-order profit that combines all the sources.