"Meta says ROAS is great. Shopify says the month was fine." Both can be true. The trouble starts when someone has to choose one for a board slide.
In the forum threads we read, founders ask which number to trust1. Where there are replies, some come from people who disclose they sell a fix2. We split the problem into two causes and give an order of work that does not need a new tool. It is the first step of a wider ecommerce tracking audit.
Why do Meta, GA4 and Shopify count different numbers by design?
Because each one answers a different question. Shopify answers "what was ordered". Meta and GA4 answer "which ad or channel gets the credit". Attribution assigns credit for a purchase to the clicks and ads on the path before it. It is a rule for splitting credit, not proof that the ads caused the sale. We cover that gap in platform reported ROAS vs incremental ROAS.
Three built-in differences:
- Attribution windows. An attribution window is the time between someone seeing or clicking an ad and buying, within which the ad gets credit. Platforms use their own windows. Vendor guides on why Meta, Google, GA4 and Shopify never match list differing windows among the causes3.
- View-through. A view-through conversion is credited to an ad the person saw but did not click. GA4 does not see impressions without a click. Meta can count them. Vendor guides list view-through credit among the structural differences between Meta and GA44.
- Different models. Google uses data-driven attribution, a model built per advertiser from converting and non-converting paths. Meta has its own rules. They are different rules, so the totals differ.
Google Analytics also has its own vocabulary. A purchase counted as a GA4 key event is not the same object as a Google Ads conversion. If you want to know what GA4 counts and what it doesn't, read that before you compare columns. The same goes for the shop side: Shopify analytics reports have their own definitions of sales, returns and dates.
None of this is a fault. It is a reason to compare on the same window, or to say that you did not.
Shopify is the record of orders. Meta and GA4 attribute them by different rules.
Which differences signal real data loss?
Real loss looks different. It moves, it breaks at one event, or it follows a release. Vendor guides list further causes of mismatch, including consent, UTM problems and duplicated Pixel and server events4. Four to check:
- Consent. Consent Mode is a Google mechanism where the banner passes the visitor's choices to Google tags, which then change what they send. If the banner or its signals break, platforms see less. Look for a step change in reported purchases on the day the banner changed.
- Duplicates. Event deduplication is Meta's way of counting an event once when it arrives from both the Pixel and the Conversions API. If it fails, Meta can report more purchases than shop orders. If you see that, start there.
- Broken events. Purchase fires but with the wrong value, or add-to-cart fires and purchase does not. Compare event by event, not only in total.
- Broken tagging. Missing or overwritten UTMs push sales into "direct" or the wrong channel in analytics.
In a Shopify Community thread, a merchant reports missing conversions in Ads Manager compared with Shopify5. In another, a merchant sees purchases in Ads Manager well below Shopify orders while the answers mix real fixes with sellers' own offers2. From a forum post you cannot tell loss from attribution. You need your own data.
A simple rule: a stable gap points to counting rules. A gap that moves points to a fault.
Why can platforms together claim more than your total revenue?
Because each platform credits itself. If a customer clicks a Meta ad, then a Google ad, then buys, both platforms can report the order. Add up their numbers and you can exceed what the shop actually sold.
The mechanism is simple. The size of the overlap is not: it depends on your channel mix and windows. We did not find an independent study that measures how often it happens or by how much, only vendor articles describing the mechanism. So measure your own. It is a quick check. Sum the purchases the platforms claim for a period. Compare that with shop orders for the same period. If the platform total is higher, you have overlap.
That overlap is why "add up the dashboards" is not a revenue number. It is also why MER (marketing efficiency ratio) exists. MER divides total revenue by total marketing spend, without splitting credit between channels. It cannot say which channel worked. It cannot be double-counted either.
How do you reconcile the three, step by step?
You do not need a tool. You need a spreadsheet and an hour of patience.
- Fix the period and definition. One date range, one time zone, one definition of revenue. Say whether it includes tax, shipping and refunds.
- Start from Shopify. Orders and revenue for the period are your reference.
- Pull GA4 and each platform. Purchases and revenue, on the same attribution window where the tool allows.
- Calculate the gap per source. Absolute and as a share of shop orders.
- Repeat for the previous periods. Is the gap stable or moving?
- Break the moving part down. By event, by device, by country, by campaign.
- Check the usual suspects. Banner changes, tag releases, deduplication, UTMs.
- Write down what you could not explain. An open gap is a result too.
Better tracking makes the numbers more complete. It will not make the platforms agree, and it will not say which sales the ads caused. Fix tracking where it changes a decision. Then ask the causal question separately.
Which number do you use for which decision?
Different questions, different numbers.
| Decision | Use | Why |
|---|---|---|
| What did we sell, and how much? | Shopify | The record of orders |
| How much total revenue per euro of marketing? | Shop revenue and MER | Not split by platform, so no overlap |
| Which ad or audience is better inside a platform? | Platform data, same window | Comparison within one counting rule |
| Did the ads cause the sales? | A causal method, not a dashboard | Attribution is not causation |
Use shop revenue and MER for budget decisions. Use platform data to compare ads inside the same platform. That is our view, not an industry rule. It answers the question founders ask in public, for example when Meta reports more revenue than Shopify and someone has to pick one6.
If you want to test your own figures, try the Is your ROAS real? calculator.
For ZFD: Our approach starts from the shop's orders, explains each gap as a counting rule or a fault, and reports a gap we cannot explain as unexplained.
Sources
- Shopify vs. Meta Ads Manager: My ROAS is off by 40%. Which one do I trust? (Funnelish community)Forum
- Meta Ads Purchases Not Matching Shopify Orders (Shopify Community, 3 stycznia 2026 - 29 sierpnia 2026)Forum
- Why Meta, Google, GA4 and Shopify Never Match (TrueROAS)Vendor
- Meta Ads vs GA4 Conversion Mismatch: A Complete Guide (Trackingplan)Vendor
- Anyone else seeing missing conversions in Ads Manager? (Shopify Community)Forum
- Question for D2C founders on shopify (snapshot subreddita, mirror)Forum