Four tools, four different totals for the same month. Here is what each one is actually measuring, why they can all be right at once, and which number belongs in your P&L.
You close the month and pull the number four times. Shopify says $1.85M. GA4 says $1.74M. Klaviyo says email alone drove $412,000. Meta says its campaigns drove $530,000. Add the channel numbers together and you get more revenue than you actually sold.
Nothing here is broken. Every one of those systems is reporting accurately against its own definition. The problem is that you are treating four different measurements as four attempts at the same measurement, and they were never that.
Shopify counts orders. An order is a discrete thing with an ID, a timestamp and a dollar value, recorded server-side when payment authorizes. It cannot be missed.
GA4 counts sessions in which a purchase event fired in a browser. That is a fundamentally weaker claim. If the customer declined your consent banner, ran an ad blocker, closed the tab before the confirmation page rendered, or started on their phone and finished on a laptop, GA4 either misses the purchase or attributes it somewhere strange. Shopify has the order regardless.
Klaviyo counts profiles. Its revenue figure answers "how much did people who received our email spend," which is a question about correlation, not causation. Meta counts conversions it can tie back to an ad impression or click inside its own attribution window, measured on its own infrastructure, using data you cannot audit.
Four systems, four units: orders, sessions, profiles, ad interactions. They will never reconcile exactly because they are not measuring the same thing.
This one is boring and it moves real money. Your Shopify store has a timezone. Your GA4 property has a timezone, which defaults to whatever was selected at setup and is frequently wrong. Klaviyo has an account timezone. Meta reports in the ad account's timezone.
If any two of those disagree, they are drawing the month boundary at different hours, and every monthly comparison you make inherits the offset. On a brand doing $60,000 a day, a two-hour boundary difference reliably shifts a five-figure sum between months. It does not average out, because it lands in the same direction every single month.
A customer sees a Meta ad on Tuesday, opens your Klaviyo campaign on Thursday, gets an SMS on Friday, and buys on Saturday. Meta counts that order. Klaviyo counts that order. Postscript counts that order. All three are telling the truth about their own involvement.
There is no arbitration layer. No system is dividing one order into fractional credit across the channels that touched it, because no system can see the others. This is why summing your channel reports produces a number larger than your actual sales, and why "which channel drove growth" is a much harder question than any single dashboard makes it look.
Here is one month for Crestline Co., a simulated outdoor brand doing roughly $1.85M a month that we use to demonstrate how the arithmetic behaves.
| What you look at | Reports | What it is actually counting |
|---|---|---|
| Shopify, gross sales | $1,982,000 | Every order placed, before discounts and returns |
| Shopify, net sales | $1,850,000 | After $84,000 discounts and $48,000 returns |
| GA4, purchase revenue | $1,743,400 | Sessions where the purchase tag successfully fired |
| Klaviyo, attributed | $412,000 | Orders within 5 days of an email open or click |
| Meta Ads, reported | $530,000 | Orders inside a 7-day click, 1-day view window |
| Postscript, attributed | $96,000 | Orders inside its own SMS window |
Crestline Co. is a simulated DTC brand used for demonstration. These figures are illustrative and are not a client result.
Two things fall out of that table.
The GA4 gap is $106,600, or 5.8 percent. That is squarely in the normal range. Consent declines, ad blockers and cross-device purchases account for nearly all of it. If you went looking for a tracking bug here you would waste a week and find nothing, because there is nothing to find. A gap above roughly 10 percent, or a gap that appears suddenly between two months, is the one worth chasing.
The channel numbers claim $1,038,000 of $1,850,000. Email, paid social and SMS together assert they drove 56 percent of net sales. But GA4's last-click model, looking at the identical set of orders, assigns those same three channels only $761,000. That is a $277,000 disagreement about which orders belong to whom, and neither view is wrong. Klaviyo is asking "did an email touch this buyer recently," GA4 is asking "what was the last thing they clicked." Different questions, same orders.
Shopify net sales, reconciled against what actually settled in Stripe. That is the only pair in the list where one system records the obligation and another records the cash, which is what lets you catch a genuine error rather than a definitional difference.
GA4, Klaviyo and Meta are marketing measurement tools. They are useful for directional questions about channels and creative. None of them are accounting systems, none were built to be, and the moment one of their numbers reaches a board deck as revenue, you have a problem that compounds quietly.
A practical rule. Before anyone acts on a revenue figure, make them say which system it came from and what that system counts. Most bad budget decisions we see are not caused by bad data. They are caused by a correct number being asked a question it was never built to answer.
Where this goes wrong in practice: the discrepancy is rarely the actual problem. The problem is the decision made on top of it, like a campaign scaled because its attributed ROAS looked strong while its contribution margin was negative. Postlytix reads across your commerce, support, ads, email and finance data at once and surfaces where those decisions are quietly costing you margin. That is the part no single dashboard can see, because the answer lives between them.
Attribution windows, session tracking and timezone boundaries, and why all three totals can be correct.
Why a healthy ROAS and a negative contribution margin routinely describe the same campaign.
The difference between a touchpoint being present and a touchpoint being the reason.
Gross, net, total and settled. Four numbers, one month, and how to tie them together.
The default window, what Apple MPP broke, and what your real email contribution looks like.
What size gap is normal, and how to tell a normal gap from a broken tag.
Why the parts add up to more than the whole, and how to size the overlap.
Support tags surface product and margin problems weeks before finance sees them.