Why your GA4 numbers don't match other tools (and which one to trust)
Google Analytics, Shopify, Stripe, and your ad platforms all show different traffic and revenue numbers. Here's why, what's actually "right," and how to reconcile them without losing your weekend.
You open GA4 on Monday and it says you got 1,200 sessions and 18 purchases. You open Shopify and it says 24 orders. You open Meta Ads and it claims 31 conversions came from your campaign. You open Stripe and the revenue figure is different from all three. Everyone is lying — except they're not. Each tool is technically correct from its own perspective. The reason none of them agree is that they're measuring different things with different rules, on different time windows, with different assumptions about what counts as 'you.' Here's the calm, definitive guide to why your numbers never match and how to figure out which one to trust for which question.
1. Every analytics tool measures with a different yardstick
The first thing to internalise: there is no single 'right' number. There are only different definitions, each useful for different decisions. GA4 measures sessions and events triggered in a browser, blocked by cookie consent and ad blockers, attributed using its own attribution model. Shopify measures orders that actually completed checkout in its database. Stripe measures successful charges, which can lag Shopify by 1-3 days if customers pay with bank-redirect methods like iDEAL or SOFORT. Meta Ads measures conversions based on its pixel firing AND its own probabilistic modelling, with a default 7-day click + 1-day view attribution window. Even when two tools should agree, they almost never do because they're answering subtly different questions.
A useful mental model: think of each tool as a witness at a court case. None of them are lying, but each one only saw part of the event from their own angle. Your job isn't to find 'the witness who's right.' It's to know which witness to call for which question. Once you adopt that mindset, the discrepancies stop being upsetting and start being useful — you can triangulate.
2. Why GA4 sessions are almost always lower than your raw page hits
If you've ever cross-checked GA4 against your hosting analytics (e.g., Cloudflare, Vercel, server logs), GA4 will look like it's missing 15-40% of visitors. That's not a bug. It's three compounding losses:
- Cookie consent declines. Anyone who hits 'Decline' on your cookie banner is invisible to GA4 unless you've configured Google Consent Mode v2 with cookieless pings. In the EU that's typically 30-50% of traffic; in the US it's a smaller but still significant slice depending on your audience.
- Ad blockers and privacy browsers. Brave, Safari with iCloud Private Relay, Firefox with Enhanced Tracking Protection, and any user with uBlock Origin will silently block GA4 entirely. That's roughly 8-25% of US desktop traffic.
- Tag firing failures. A slow site, a JavaScript error, or a misconfigured GTM container can cause the GA4 tag to fail on a slice of visits. You'll never see those in GA4 because they never reported themselves.
Net result: GA4 typically captures 60-85% of true visits. If you want a baseline 'total reach' number, your hosting/CDN logs (or a privacy-friendly tool like Plausible) will be more accurate. But for behavioural analysis — what people DID once they arrived — GA4 is still the best free option, because it tracks events in much more detail than logs can.
3. Why GA4 conversions never match Shopify or Stripe
This is the #1 reason e-commerce owners email their support: 'GA4 says 14 purchases, Shopify says 22 — what is going on?' Here's the unglamorous breakdown of where the missing 8 went:
- GA4 missed the page. If your thank-you page redirects too fast, has a JavaScript error, or uses a checkout flow that bypasses your domain (Shopify Pay, Apple Pay, PayPal Express), GA4's purchase event may never fire even though Shopify recorded the order.
- The customer's browser blocked the tag. Ad blockers and privacy browsers block GA4 on the thank-you page just like everywhere else. Conversions get dropped silently.
- Refunded, cancelled, or test orders. Shopify counts orders as they happen. If the customer refunds within an hour and your GA4 setup deducts refunds (most don't), you'll see different numbers. Test orders by you or your team also pollute one but not the other.
- Cross-device journeys. GA4 tries to stitch sessions across devices if users are logged in, but if your customer browses on mobile and checks out on desktop, they may count as two users in GA4 and one order in Shopify.
Rule of thumb: Shopify and Stripe are the truth for revenue. GA4 is the truth for marketing attribution (which channel drove the visit that led to the order). Stop trying to reconcile total order counts between them. Reconcile the share each channel contributed instead, and you'll save yourself months of frustration.
4. Why Meta Ads (or Google Ads) shows more conversions than GA4
Ad platforms almost always claim more conversions than GA4 attributes to them. Three reasons, in roughly the order they bite:
- Attribution window mismatch. Meta defaults to 7-day click + 1-day view. GA4's default attribution is data-driven within a 30-day click window for acquisition. If someone saw your Meta ad on day 1, didn't click but visited directly on day 5, Meta claims it; GA4 attributes it to Direct.
- Modelled conversions. Since iOS 14.5, Meta and Google both fill in attribution gaps using machine-learning models because the pixel can't track everyone anymore. Roughly 15-30% of the conversions ad platforms claim are 'modelled' — i.e., guessed. They might be right, but they're not directly observed.
- View-through conversions. Meta counts conversions when a user saw your ad and converted within 24 hours, even if they never clicked it. GA4 does not.
The honest summary: ad platforms are incentivised to overclaim conversions (it makes ROAS look better, which keeps you spending). GA4 is incentivised to be conservative (Google's whole business model depends on the integrity of its analytics number). When the two disagree, the truth is usually somewhere between — but closer to GA4. As a default policy, trust GA4 for attribution and use ad platforms only for in-platform optimisation (Meta's algorithm needs the pixel data to optimise; you can't fix that, only live with it).
5. Time-zone and date-cutoff traps
Half of all 'why don't my numbers match' tickets in agency-land turn out to be time-zone mismatches. GA4 reports in the property's configured time zone. Shopify reports in the shop's configured time zone. Meta reports in the ad-account's time zone. Stripe reports in UTC. If your property is set to America/Los_Angeles but your Shopify is set to America/New_York and your Meta account is set to UTC, a 'day' is three different windows across the three tools. Orders placed at 11pm Eastern fall on different days in each tool's report.
Fix this once and forever: pick one timezone (your business timezone) and set every tool to use it. Yes, this means digging through Shopify settings, GA4 admin, Meta account settings, Stripe (read-only — they report in UTC and you adjust at query time), Google Ads, and any BI tool you use. It takes 30 minutes and removes a permanent class of confusion. Future-you will thank you.
6. Which number to trust for which question
Memorise this little decision tree and you'll never have a reconciliation crisis again:
- How much money did I actually make?. Stripe (or your payment processor). Always. This is the only number your accountant cares about.
- How many orders did I get?. Shopify (or your e-commerce platform). It's the source of truth for orders because every order exists in its database by definition.
- Which marketing channel drove the most revenue?. GA4 — but only the channels report (Acquisition → Traffic acquisition), and only if you've set up GA4 ecommerce tracking correctly. Treat the absolute numbers as approximate and focus on the share each channel contributed.
- Did my Meta campaign work?. Meta Ads Manager for in-platform optimisation, GA4 for ground truth. If they disagree by more than 30%, trust GA4.
- How many total people visited my site?. Your hosting/CDN logs (or Plausible/Fathom if you've installed one). GA4 will undercount by 15-40%.
- Which page is the strongest part of my funnel?. GA4 — Engagement → Landing page → engagement time + key event rate. No other tool has this data.
7. The reconciliation ritual that actually scales
Once a month, do a 20-minute reconciliation ritual instead of trying to perfectly match every number every day. Open Stripe, Shopify, GA4, and your ad platforms side by side. Write down the headline number from each for the same date range (use the shared business timezone). Note the gaps. Don't try to fix them — just SEE the consistent ratios. Once you know that GA4 captures roughly 78% of Shopify's orders, you can apply that ratio mentally whenever you look at GA4 in isolation. After three months of this, you'll have a calibrated mental model that's more useful than any spreadsheet that tries to reconcile every transaction.
Document the ratios in a single page. 'Shopify : GA4 ratio for January = 1.28×; February = 1.24×; March = 1.31×.' If a ratio suddenly spikes — say to 1.6× — that's signal worth investigating (probably your GA4 tag broke for a slice of traffic). If it stays in a narrow range, you can stop worrying about it and get back to building the business.
Stop trying to make every tool agree. Decide which tool answers which question, then use it. The discrepancies aren't bugs — they're the cost of getting independent perspectives.
8. When the gap actually does signal a problem
Most discrepancies are normal noise. But a few patterns are genuine red flags worth a deeper look:
- GA4 suddenly captures <50% of Shopify orders. That's a tag or thank-you-page issue. Open the live site in incognito, complete a test order (use a 100% discount code), and watch DevTools → Network for the purchase event. If it doesn't fire, your tag broke.
- Meta claims 3× more conversions than GA4. Usually means Meta's modelling is in overdrive because the pixel coverage dropped. Check your Conversions API setup; you may have lost server-side events when a developer redeployed.
- Stripe revenue exceeds Shopify revenue. Probably manual invoices or subscription payments that bypass the storefront. Not a problem, just incomplete picture if you're using Shopify's reporting as ground truth.
- Hosting logs show 5× more visits than GA4. Either bot traffic (logs see bots, GA4 filters most of them) or a serious tag/consent problem. Sample-check the hosting logs to see if it's bot UA strings or real Chrome/Safari sessions.
9. The honest take
There is no analytics utopia where every number agrees. The era of perfect first-party tracking ended with GDPR, iOS 14.5, and the slow death of third-party cookies. What you have instead is a constellation of imperfect tools whose disagreements, taken together, tell a more useful story than any single 'perfect' tool ever could. Embrace that. Pick your source of truth for each question, document the ratios, and stop spending Sundays trying to make charts match. The time you save is better spent on the things that actually move the business.
10. A worked example: the 'where did 8 orders go' diagnosis
Here's how this looks in practice. A small DTC brand opens Shopify on Monday: 142 orders last week. They open GA4: 116 'purchase' events. That's 26 orders missing — roughly 18% — and the owner panics. They spend 90 minutes reading articles like this one (hi) before running a structured check. Step 1: count how many were Shop Pay or Apple Pay checkouts (those bypass the storefront and often skip the GA4 purchase event). Shopify analytics shows 19 of the 142 were Shop Pay. That accounts for most of the gap. Step 2: load the live thank-you page in Brave incognito, complete a test order with a 100% discount. The purchase event does NOT fire — Brave is blocking GA4. So a slice of the remaining 7 missing orders are from privacy-browser customers. Total time: 22 minutes. Diagnosis: nothing is broken. Action: install the Shopify Conversions API integration to recover the Shop Pay orders server-side. Estimated GA4 capture rate after fix: 95% instead of 82%.
Notice what the diagnosis is NOT: 'GA4 is broken,' 'Shopify is lying,' 'the SEO agency is cooking the books.' Most reconciliation panic comes from skipping the structured walkthrough and jumping straight to a story. The story is usually wrong. The structured walkthrough takes 20-30 minutes and almost always lands on a boring, fixable explanation — usually a known checkout-flow quirk or a privacy-browser slice. Write down the ratio after the fix, sleep well, move on.
Or, just let Plainly do the reconciling for you
Plainly's weekly readout pulls the GA4 number, the channel-level attribution, and the per-page engagement and tells you in plain English which one moved this week, by how much, and what likely caused it. We can't reconcile your Stripe and Meta numbers (yet), but we'll stop the weekly 'why don't these match' panic by giving you the one number to actually act on. Try the free demo from the homepage — no card required.
Read your GA4 in two paragraphs, not two hours.
We do exactly what this post describes — automatically, every Monday morning. Try the demo for free, no credit card.
Try the demo