You open Meta Ads Manager and it shows a 4.2 ROAS. You open Shopify, do the math on the same spend, and get 2.8. Nothing is broken. You are looking at two systems that measure the same sale in two different ways, and both are internally correct.
This guide walks through every reason the numbers diverge, shows a full worked example with real arithmetic, and explains why the number that actually protects your margin is not ROAS at all.
The short version: three questions, three answers
ROAS is revenue divided by ad spend. The spend is the same in both tools. The revenue is not — because Meta and Shopify define "a sale my ad drove" completely differently.
- Meta answers: how many purchases did my ad plausibly influence, inside my attribution window?
- Shopify answers: how many orders actually completed, and which channel got the last click?
- Your bank answers: how much cash landed after fees and refunds?
Three questions, three revenue figures, three ROAS numbers. Expecting them to match is the mistake. This is the same structural mismatch behind Meta sessions not matching Shopify and Google Ads conversions not matching Shopify — different measurement rules, one real event.
Why Meta's revenue runs high
View-through conversions
The single biggest inflator. On Meta's default seven-day-click / one-day-view window (Jon Loomer, Foreplay), Meta claims credit when someone sees your ad and buys within a day — without ever clicking. Shopify has no concept of a view. It records a checkout and nothing else.
Every view-through purchase inflates Meta's revenue relative to Shopify. A normal Meta-over-Shopify purchase gap sits around twenty to thirty-five percent on this window, and view-through plus modeling makes up most of the excess (Vaizle, TrackBee).
Modeled conversions
When Meta cannot directly observe a sale — a blocked pixel, an iOS opt-out, a consent decline — it estimates it with a model and reports the estimate as a conversion. Shopify never models. It only reports real, completed orders. So Meta's revenue can exceed what any pixel actually saw.
Cross-device attribution
A shopper sees your ad on their phone and buys on their laptop. Meta stitches that to one logged-in user and credits the ad. Shopify ties the order to whatever referrer landed on the buying device — often "direct" or "organic." Meta gets the credit; Shopify files it elsewhere.
Click-date reporting
Meta books a conversion on the date of the click or view that earned it, not the purchase date. A Monday click that converts Thursday shows in Meta on Monday and in Shopify on Thursday. This alone desyncs daily ROAS even when weekly totals agree — always compare on a trailing seven-to-fourteen-day window, never a single day.
Refunds
Shopify drops net sales when an order is refunded. Meta and GA4 generally leave the original conversion in place. So after a refund wave, Meta's revenue stays high while Shopify's falls — widening the ROAS gap further.
Where Meta actually undercounts
It is not all inflation. Client-side tracking loses real sales too. Ad blockers and Safari or Firefox tracking prevention stop the browser pixel from firing on an estimated ten to twenty-five percent of users, while Shopify still records the order server-side (Audiense/Elevar). Consent declines and tabs closed before the thank-you page loads do the same.
Meta backfills these with the same modeling above, which is why the net effect is unpredictable: modeling can overshoot or undershoot. The one thing you can count on is that the two numbers will not equal each other.
A worked example: one week, four different "sales" numbers
Say you run a print-on-demand store, "Nomad Mugs," and 100 real orders come in over one week. Average order value is $40 subtotal + $5 shipping + $4 tax = $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, 20 came organic or direct, and 8 later refunded.
What Meta reports: 55 click-through + 15 view-through = 70 attributed by window, plus roughly 8 modeled conversions it recovered = about 78 purchases. Its pixel passes subtotal only, so revenue reads 78 × $40 = $3,120. It does not subtract the 8 refunds, and it books some on the prior week's click dates.
What Shopify reports: 100 orders, last-click. About 55 land on "Facebook," 10 on "Google," 35 on search, direct, or other. The 15 view-through buyers are not credited to Facebook here — they clicked nothing. Total sales = 100 × $49 = $4,900, minus 8 refunds at $49 = $4,508.
Now compute ROAS on, say, $1,000 of spend:
- Meta's ROAS: $3,120 ÷ $1,000 = 3.12
- Shopify "Facebook" ROAS: 55 orders × $49 = $2,695 ÷ $1,000 = 2.70
Same week, same spend, same store. The 0.42 difference is not an error — it is view-through, modeling, and last-click doing exactly what they are designed to do.
The number Meta and Shopify both ignore: your actual cash
Here is what every ROAS comparison misses. ROAS is built on revenue, and revenue is not money you keep. Walk the same week down to the bank.
Shopify Payments deposits a payout, not a sales figure. For those 100 orders it deducts, per its published fee structure of about 2.9% + 30¢ per transaction on the Basic plan (Webgility, ReportPundit), plus refunds and one chargeback at roughly $15 (Webgility):
- Captured charges: 100 × $49 = $4,900.00
- Processing fees: (2.9% × $4,900) + (100 × $0.30) = $142.10 + $30.00 = −$172.10
- Refunds issued: 8 × $49 = −$392.00
- One chargeback fee: −$15.00
- Net deposited: $4,320.90
And that is still before product cost. On a POD mug the print and shipping might run $18 an order, so 100 orders carry roughly $1,800 in cost of goods, plus your $1,000 ad spend. Real profit for the week is closer to $4,320.90 − $1,800 − $1,000 = $1,520.90 — a profit on ad spend near 1.5x, on a campaign Meta proudly labeled 3.12 ROAS.
That is the gap that actually matters. A 4x ROAS on a thin-margin product can lose money; a 2x ROAS on a fat-margin one can print cash. Chasing the ROAS match between two dashboards optimizes the wrong number. The reconciliation that protects you runs revenue all the way to per-order profit — the same discipline covered in the ecommerce data reconciliation hub and in why Google Ads revenue doesn't match Shopify.
What a healthy gap looks like — and when to worry
Use these as guardrails, not targets:
- Twenty to thirty-five percent more Meta purchases than Shopify orders on the default window is normal (Vaizle, TrackBee).
- Around 2x Meta purchases versus Shopify orders almost always means a Pixel and Conversions API deduplication bug, not real inflation — the same order is being counted twice.
- Want a Meta number closer to Shopify? Switch your comparison to a one-day-click window. Meta reports that dropping from seven-day-click to one-day-click can cut reported conversions by roughly forty percent (TrackBee) — same real sales, narrower credit window.
The goal is a stable ratio you understand, not equality you will never get.
How to reconcile instead of chase
- Pick sources of truth. Shopify order count and total sales tell you how much revenue happened. Meta tells you how much your ads plausibly influenced. Bank payout tells you cash. Never expect one to equal another.
- Compare on trailing windows. Seven to fourteen days, never single days, because of click-date reporting.
- Set your dedup correctly. Send the same Purchase from Pixel and Conversions API with a shared event ID, so blocked events are recovered without double-counting.
- Reconcile to profit. Layer product cost, fees, and refunds onto Shopify's order truth. That is the number that tells you whether to scale.
This is where a tool that already connects the pieces earns its keep. PodVector connects Shopify, Meta Ads, Google Ads, Printify, and Printful, and computes your true per-order profit — so you see the profit on ad spend behind the reported ROAS, not just the dashboard headline. Its AI employee, Victor, reads that ad and order data and proposes moves, executing approved actions on the Shopify side; he does not touch your ad account. If reconciliation is eating your evenings, start free and connect your stores.
The same reconciliation logic applies when you are consolidating stores — for example, when you export Etsy customers to Shopify and need one clean revenue source afterward.
FAQs
Why is my Meta ROAS higher than my Shopify ROAS?
Because Meta counts sales Shopify doesn't attribute to it: view-through conversions (ad seen, not clicked), modeled conversions (estimated when the pixel is blocked), and cross-device purchases. Shopify only credits the last click on the buying device. Meta answers "did my ad influence this?" while Shopify answers "did a sale happen, and who got the last click?" The default seven-day-click / one-day-view window widens the gap further (Jon Loomer).
What is a normal gap between Meta and Shopify?
Roughly twenty to thirty-five percent more Meta-reported purchases than Shopify orders on the default window is considered healthy (Vaizle, TrackBee). If Meta shows close to double your Shopify orders, suspect a Pixel and Conversions API deduplication problem rather than genuine ad performance.
Can I make Meta ROAS match Shopify exactly?
No, and you should stop trying. The gap is structural — different attribution models, view-through credit, modeling, and click-date reporting cannot be "fixed." Setting up the Conversions API recovers lost events but does nothing about these methodology differences. Aim for a stable, explainable ratio and reconcile on Shopify's order truth.
Which number should I trust for revenue?
Shopify. Every completed order is recorded server-side, so its order count and total sales are your source of truth for how much revenue happened. Meta is the source of truth for how much your ads influenced; your bank payout is the source of truth for cash after fees and refunds. Use each for its own job.
Does ROAS even tell me if a campaign is profitable?
Not on its own. ROAS is revenue over spend, and revenue is not profit. A high ROAS on a thin-margin product can still lose money once you subtract product cost, payment fees (Webgility), and refunds. Reconcile down to per-order profit — profit on ad spend — before you decide to scale or cut.
Why does daily ROAS swing so much even when weekly looks fine?
Meta reports each conversion on the date of the click or view that earned it, not the purchase date, while Shopify records the order on the day it completes. A click that converts three days later lands on different calendar days in each tool. Compare trailing seven-to-fourteen-day windows and the daily noise averages out.