You open Shopify and it says you did $84,000 last week. You open Meta and it claims $61,000 from its campaigns. Google says $28,000. Add the platforms up and they’ve sold more than your entire store did. Nobody is lying and nothing is broken. The numbers disagree because each system is answering a different question, and once you see which question each one is answering the gap stops being mysterious.
Start with Shopify. Shopify counts an order when the money lands. It does not care where the customer came from or what they clicked three days ago. One order, one revenue number, attributed to nothing in particular. That is your ground truth for what actually happened, and it is the only number in this whole mess that reconciles to your bank account.
The ad platforms are doing something completely different. Meta is not reporting your sales. It is reporting the sales it believes it caused, and it gets to define what caused means. Out of the box Meta uses a 7-day click and 1-day view window, so if someone clicked your ad on Monday and bought on Saturday, Meta books that order. It also books orders from people who only saw the ad and never clicked, as long as they purchased within a day. Google runs its own version of the same logic with different windows and a different model, and it has no idea what Meta just counted.
That sets up the double-counting problem, which is where most of the inflation comes from. A customer sees your Meta ad, searches your brand on Google two days later, clicks the ad there, and buys. Meta claims the sale. Google claims the same sale. One $120 order is now showing up as $240 across two ad accounts. Run five channels at once and the combined platform total sails right past what your store actually did. The overlap is not a bug in any single platform. It is the guaranteed result of letting every platform grade its own work.
Timing differences stack on top of that. Shopify logs revenue at the moment of purchase. Meta often backdates a conversion to the day of the ad click, not the day of the sale, so a Saturday order can land in Wednesday’s column in your ad report. When you line the two up day by day they will never match, even before you touch attribution windows, simply because the two systems are stamping different dates on the same event.
Then there is what counts as revenue in the first place. Shopify’s headline number usually includes shipping and taxes and sits before refunds. Your ad platforms are typically tracking a purchase conversion value passed through the pixel, which may or may not include shipping, often excludes tax, and almost never gets updated when an order is refunded two weeks later. If you run a 6 percent return rate, your platforms are quietly reporting six percent more revenue than you kept, forever, because nobody tells the pixel about the refund.
Currency and timezone settings finish the job. If your ad account reports in a different timezone than your Shopify admin, your days are offset by hours and every daily comparison is shifted. If you sell internationally and your platform converts everything to one reporting currency at its own exchange rate, those totals drift from Shopify’s settled amounts too.
So what do you actually do about it. First, stop expecting these numbers to match, because they were never built to. Pick Shopify as your source of truth for total revenue, full stop. That is the number that pays your bills and the only one worth running the business on.
Second, measure your ad efficiency at the blended level instead of trusting platform-reported ROAS. Take total revenue from Shopify and divide it by total ad spend across every channel for the same period. That single ratio cannot be double-counted, because there is only one revenue figure and one spend figure. It will not tell you which channel deserves credit, but it will tell you the truth about whether your marketing as a whole is working, and it moves in a way you can trust week over week.
Third, when you do need channel-level decisions, treat platform-reported numbers as directional signals rather than facts. A campaign Meta says is at 4x is probably not at 4x, but if it climbs to 6x after a change while spend held flat, the direction is real even if the level is not.
Fourth, write down your settings once and stop re-litigating them. Note each platform’s attribution window, whether its conversion value includes shipping and tax, and what timezone it reports in. Most our numbers are broken panics are just two systems with different settings being compared as if they were the same.
The goal is not to force these numbers into agreement. It is to know which one to trust for which decision. Shopify for what happened, blended math for whether marketing is paying off, platform numbers for direction only. Once each number has a job, the disagreement stops being a problem you need to solve and becomes information you already understand.
Leave a comment