Why GA4 shows fewer sales than your checkout
Here’s a moment most store owners know well. You open your store admin and it says you had 100 orders this month. Then you open Google Analytics 4 (GA4) to see how your ads did — and it shows only 60 purchases. The numbers don’t match, and nobody can tell you why.
You’re not doing anything wrong, and your store isn’t broken. This gap is normal, it happens to almost every online store, and once you understand it you can stop second-guessing your reports. Let’s walk through it in plain language.
The short version
The sale really happened — your checkout recorded it. But the little piece of code that’s supposed to tell GA4 and Meta “a purchase just happened” didn’t always get through. So your store knows about the sale, but your analytics tools never heard about a chunk of them. For many stores, that lost slice is somewhere between 20% and 50% of purchases.
Why does this happen?
Tools like GA4 and the Meta Pixel work from inside the visitor’s browser. When someone buys, a small script in their browser is supposed to send a message to Google and Meta. The problem is that a lot of things sit between that script and the report — and any of them can quietly swallow the message.
- Ad blockers and privacy extensions. A large share of shoppers run browser extensions that block tracking scripts. When the script is blocked, the purchase simply never gets reported.
- iPhone and Safari privacy limits. Apple’s Safari (and iOS in general) restricts the cookies and scripts that tracking relies on. Since a big part of e-commerce traffic is on iPhones, this alone can hide a meaningful number of sales.
- Cookie consent banners. When a visitor clicks “reject” or ignores your cookie banner, the tracking scripts are not allowed to run. The visitor can still buy — but the sale won’t reach GA4 or Meta.
- Things just going wrong on the page. The browser tab closes too fast, the connection drops, an ad-platform server is busy for a second — and that one message is gone. Because it all happens in the browser, there’s no second chance to send it.
None of these mean you lost the sale. You got the money. You just lost the record of it in your marketing tools.
Why this matters more than it looks
A reporting gap might sound like a small annoyance. It isn’t — because you make real money decisions based on these numbers.
Imagine GA4 only sees 60 of your 100 sales. Now imagine those 40 missing sales mostly came from one ad campaign. In your report, that campaign looks like a loser, so you turn it off — when it was actually one of your best performers. You end up cutting what works and spending more on what doesn’t, all because the scoreboard was missing points.
This is the quiet cost of missing data: not just messy reports, but wrong decisions made with confidence. When the numbers are incomplete, “data-driven” can mean driving in the wrong direction.
What you can actually do about it
The fix is to stop relying only on the browser to report your sales. Instead of hoping each visitor’s browser successfully sends the message, you record the purchase on a server you control — and send that record to GA4 and Meta from there. This approach is called server-side tracking.
The difference is reliability. Ad blockers, Safari limits, and a closing browser tab can’t quietly drop a message that’s being sent from a server rather than from the shopper’s phone. You still respect consent — if a visitor says no, you don’t track them — but for the sales you’re allowed to count, far more of them actually reach your reports.
The result is simple: the number in GA4 starts looking a lot more like the number in your store admin. And when your reports are closer to reality, your ad decisions get better on their own — no guessing required.
The takeaway
If GA4 shows fewer sales than your checkout, you’re not broken and you’re not alone. It’s the normal result of how browser-based tracking works in a world of ad blockers, iPhones, and consent banners. The good news is that it’s fixable — and you don’t need to be technical to fix it.
Stobio is built for exactly this: it adds server-side tracking to your store so the sales you’re already making finally show up in GA4 and Meta — set up by you, no technical knowledge needed. You can see how it works at stobio.com.