· 10 min read

Why Google Analytics Isn’t Tracking Your Store’s Purchases

Why Google Analytics Isn’t Tracking Your Store’s Purchases (And How to Fix It) | Ecomm Decoded

You’re not imagining it. The gap between your Shopify dashboard and GA4 is real — and it’s costing you real decisions.

Thank you for reading this post, don't forget to subscribe!

Google Analytics isn’t tracking your store’s purchases because your purchase event is either not firing, firing at the wrong time, or firing more than once — and in almost every case, no one has bothered to check.

That’s the short answer. The longer answer is that this problem is far more common than anyone admits, and the damage it causes usually runs for months before a founder notices something is off.

I’ve been doing e-commerce operations and diagnostics for over a decade. In that time, I’ve audited stores from $200K to $3M+ in annual revenue. Broken GA4 purchase tracking isn’t a beginner problem. I’ve found it in stores with agencies, in-house marketing teams, and Shopify Plus accounts. It’s not a sophistication issue. It’s a verification gap.

Nobody checked if the data was real. This post will help you do that.

TL;DR GA4 misses purchases for five main reasons: duplicate purchase events, the purchase tag not firing at all, Shopify’s checkout architecture breaking the trigger, cross-domain tracking misconfiguration, or browser privacy settings blocking the tag. The fix depends on which one you have — but you can diagnose the right one in under 15 minutes using GA4 DebugView and a Shopify order count comparison.

This Isn’t a Reporting Problem. It’s a Decision Problem.

When GA4 isn’t tracking purchases correctly, it looks like a dashboard issue. It’s not. Every scaling decision you’ve made — which campaigns to increase spend on, which products to push, whether your conversion rate is improving — was made on data that was either inflated, missing, or wrong.

11 months

How long a $1.4M/year store had a broken purchase event before anyone caught it.
Real ROAS: half of what the agency’s reports showed.

I audited a store doing $1.4M a year. They had an agency, monthly ROAS reports, and what looked like winning campaigns. When I dug into the tracking, the GA4 purchase event was firing twice on every single order. Not slightly off — double. Every revenue figure the agency had been working with was 2× what had actually happened.

The agency wasn’t lying. They were optimizing the story the data told. The agency assumed the founder set up tracking correctly. The founder assumed the agency had checked. Neither of them had — because it wasn’t in either contract.

We traced it back 11 months.

The “best performing” campaign they’d been scaling for four months? Built entirely on fabricated numbers.

The 5 Reasons GA4 Isn’t Tracking Your Purchases

1. The Purchase Event Is Firing Twice

This is the most common issue I find in stores above $500K — and the most dangerous, because the data looks healthy. Revenue is there. Transactions are showing. Everything is green. But the numbers are inflated, sometimes by 100%.

It happens because the purchase confirmation page is loading the tag twice. The most common cause: a GA4 tag configured directly in Shopify’s preferences and a separate purchase event tag in Google Tag Manager, both firing on the thank-you page. Two fires, one order, double the revenue in GA4.

The fix sounds simple. It is simple — once you know where to look. The problem is knowing to look at all.

From the Field I caught a version of this in my own work last year. Tracking looked clean in Tag Manager. Events were showing in the debugger. Everything green — until I checked the GA4 transaction count against Shopify’s order count for the same date range. Off by a factor of two. The fix took 20 minutes. The damage had been running for 7 months. Always verify the output, not just the setup.

2. The Purchase Tag Isn’t Firing At All

On the opposite end: GA4 shows zero purchases, or a number much lower than what Shopify reports. The purchase event tag exists but isn’t triggering correctly.

The usual suspects: the GTM trigger is set up for a page URL that doesn’t match Shopify’s actual thank-you page URL, or the tag is paused, or the container was never published after someone made a change. I’ve also seen stores where the GA4 measurement ID was updated in one place but not the other — so events were firing to a test property instead of the live one.

One store I worked with had a developer update the GA4 property in Shopify’s settings but forget to update the GTM configuration. Six weeks of purchase data went nowhere. They only noticed when their monthly numbers looked unusually low — and even then, the first guess was “bad month.”

3. Shopify’s Checkout Architecture Is Breaking the Trigger

Shopify’s checkout process runs on a different domain than your storefront — checkout.shopify.com — and this creates a structural problem for tracking. If your setup isn’t configured to handle cross-domain tracking, GA4 treats the checkout session and the post-purchase session as two separate users. The purchase event fires, but it’s disconnected from the session that started on your store. The data ends up fragmented or lost entirely.

This got more complicated with Shopify’s move to checkout extensibility. If you’re on Shopify Plus and migrated to the new checkout, you may need to reconfigure how your purchase event fires. The old checkout.liquid method doesn’t apply anymore, and some stores made the migration without updating their tracking setup.

The symptom here is usually a significant drop in GA4-attributed revenue after a platform update — one that looks like a tracking problem on the marketing side but is actually a Shopify infrastructure issue.

4. Cross-Domain Tracking Isn’t Set Up

If you use a third-party payment processor — PayPal, Afterpay, Klarna, anything that redirects off your domain — your GA4 session breaks at the payment step. The customer leaves your domain, pays, comes back, and GA4 registers the return as a new session. The purchase confirmation fires, but it’s attributed to direct traffic with no session context, or dropped entirely depending on how the tag is configured.

The fix requires adding cross-domain configuration in GA4 and, in many cases, updating the tag trigger to account for the return URL. This is straightforward to implement once you know it’s the issue. The challenge is diagnosing it correctly in the first place — because the symptoms look identical to a missing tag.

5. Browser Privacy Settings Are Blocking the Tag

Safari’s Intelligent Tracking Prevention, iOS privacy settings, and browser extensions like uBlock Origin block GA4 tags in a meaningful percentage of sessions. Depending on your audience, 15–30% of users may not be tracked at all through the standard GA4 setup.

This isn’t a bug you can fix the same way as the others — it’s a structural limitation of client-side tracking. The solution is server-side tagging: sending purchase events from your server rather than the user’s browser. More reliable, less affected by browser restrictions, and increasingly the standard for stores that care about data accuracy.

If your GA4 is off by 30–40%, browser blocking alone isn’t usually the full explanation. It’s more likely one of the first four reasons, with browser blocking adding on top. But if your numbers are consistently 10–20% below Shopify’s, this is worth investigating.


How to Diagnose Your Tracking in 15 Minutes

You don’t need a developer or an agency to tell you whether your tracking is broken. Here’s the process I use at the start of every audit.

The Quick Verification Test
  1. Compare transaction counts. In GA4, go to Reports → Monetization → Ecommerce Purchases. Note the number of transactions for a specific 30-day period. Then open Shopify Admin → Orders → filter by the same date range and count fulfilled orders. If GA4 is more than 5% off either direction, something is wrong.
  2. Check for duplicate events. In GA4 → Configure → DebugView, place a test order on your store. Watch the event stream. If you see the purchase event fire twice, you have a duplication issue. Check both Shopify’s native GA4 integration and your GTM container — you likely have both active.
  3. Check your GTM container is published. Open GTM → your container → click the “Submit” history. Look at the last published date. If it’s months old and you know changes were made since then, there may be unpublished updates sitting in a draft state.
  4. Verify the measurement ID. In GTM, open your GA4 Configuration tag and note the Measurement ID (format: G-XXXXXXXXXX). Then go to GA4 Admin → Data Streams and confirm it matches the ID on your live property — not a test property.
  5. Test a cross-domain flow. If you use a third-party payment processor, place a small test order through the full checkout. After completing, check GA4 Real-Time reports — if the purchase event appears as (direct) / (none), your session is breaking at the payment redirect.

What to Do Once You’ve Found the Problem

The fix depends entirely on which issue you have:

Duplicate events: Decide on one tracking method — either Shopify’s native GA4 integration or GTM, not both. If you’re using GTM, disable the native integration in Shopify Admin → Preferences → Google Analytics. If you’re using the native integration, remove the GA4 purchase tag from GTM.

Tag not firing: In GTM, create a trigger for the Shopify thank-you page. Shopify’s thank-you URL contains /thank_you or the order confirmation path. Use GTM Preview mode to verify the tag fires during a test purchase before publishing.

Shopify checkout architecture: Ensure you’re using Shopify’s Web Pixels API for GA4 events if you’re on Shopify Plus with the new checkout extensibility. The old approach of injecting scripts into checkout.liquid is deprecated. If you’re not on Plus, the native Shopify integration or a properly configured GTM Web Pixel handles this.

Cross-domain tracking: In GA4 → Admin → Data Streams → Configure Tag Settings → Configure Your Domains, add all domains in your checkout flow. In GTM, enable the cross-domain linker in your GA4 Configuration tag settings.

Browser blocking: Server-side tagging via GTM Server-Side requires infrastructure but eliminates browser blocking entirely. The right long-term investment for any store doing data-driven marketing.


The Honest Truth About Why This Keeps Happening

Tracking breaks are almost never complicated. A duplicate tag, a misfired trigger, a container that was never published. Fifteen to thirty minutes to fix once you know what you’re looking for.

The reason they run for months — sometimes years — is that nobody owns the verification step.

If you have an agency, they assume you set up the tracking before they started. If you have an in-house team, tracking setup happened before most of them joined. If you’re managing it yourself, you set it up once and assume it’s still working.

Tracking isn’t something you set and forget. Shopify updates break things. App installs add conflicting tags. Platform migrations introduce new gaps. Every significant store change is an opportunity for the tracking layer to break quietly.

The check I’d recommend: every quarter, run the transaction comparison between GA4 and Shopify. Five minutes. It’s not a full audit, but it’ll catch the category of problem that actually costs money.

If your numbers are off by more than 5%, that’s worth a real look.

Need a complete tracking diagnosis?

My Tracking & Analytics Sprint covers GA4 setup verification, purchase event accuracy, cross-domain configuration, and a full data integrity audit — delivered in 14 days. If your numbers don’t match, you’ll know exactly why and exactly how to fix it.

See the Tracking & Analytics Sprint →
JV
Jenn Velez — Ecomm Decoded 10+ years in e-commerce operations. I work with DTC founders and e-commerce managers doing $500K–$5M — diagnosing what’s actually broken in their store before they scale it. Based in Sydney, Australia. About Jenn →

Ready to fix what's broken?

Stop guessing and get a real diagnosis. Book a Growth Audit or jump straight into a Sprint.