Ready to chat?

07515 543111
Tracking Guides

The Store That Grew 200% Overnight (It Didn't)

The dashboards said the business had more than doubled. The bank account said otherwise. This is the story of how I found out where the growth was really coming from, and why your Shopify tracking might be telling you the same lie.

Last updated July 2026

The Symptom

I took on the analytics setup for a large UK Shopify retailer. That's as specific as I'm going to get about who they are, because the point of this story isn't the client. The point is what their data was doing.

GA4 was reporting growth of over 200%. Sessions up. Revenue up. Everything up, and up fast. If you'd only looked at the dashboards, you'd have thought this was the best year in the company's history.

The problem was that nothing else agreed. Shopify's own order numbers didn't show it. The actual money coming in didn't show it. Nobody on the operations side was suddenly three times busier. GA4 was describing a business that didn't exist.

That's the uncomfortable thing about analytics: a broken setup doesn't show you an error message. It shows you a chart. And charts look trustworthy whether they're right or not.

The False Leads

The obvious suspects came first, because they're obvious for a reason. Was it bot traffic? Some of it, but nowhere near enough to explain the numbers. Was it a duplicate tag firing the purchase event twice? Partly, but doubling up on purchases doesn't triple your sessions. Was it a change in marketing spend? No, spend was steady.

Every one of those theories explained a slice of the inflation and none of them explained the shape of it. Sessions were inflated. Users were inflated. Attribution was a mess, with paid channels claiming conversions they had no business claiming, and a suspicious mountain of traffic labelled as direct. Whatever was wrong, it was wrong at a level underneath any single tag.

This is where most investigations stall, because the tools people usually reach for, the GA4 interface, the tag debugger, a quick look at Tag Manager, all reported that everything was fine. Tags were firing. Events were arriving. Green ticks everywhere. The setup was "working". It was just working wrongly.

The Evidence Method

So I stopped looking at dashboards and started looking at evidence. Two sources, specifically.

First, the raw HTTP requests. Every tracking tag on a website ultimately sends web requests you can watch in your browser's network tab. Not the pretty debug view, the actual requests: which domain they went to, what identifiers they carried, what page context they claimed to have. Dashboards summarise; requests don't lie.

Second, the GA4 BigQuery export. BigQuery is Google's data warehouse, and GA4 can export every raw event into it, one row per event, before any of GA4's processing and modelling gets involved. I wrote small scripts to pull those events apart: how many purchase events per transaction, what session identifiers looked like, how often the same user appeared as a brand new visitor.

The other thing that made this investigation possible: I had access to a second, comparable Shopify setup that wasn't showing insane numbers. A control group, effectively. When you can line up a broken store against a healthy one and diff the raw events between them, the differences stop being a matter of opinion.

The method in one line: when the dashboards disagree with reality, stop reading dashboards. Read the raw requests and the raw events, and compare against something you know is healthy.

The Sandbox Discovery

The raw events told the story the dashboards couldn't. Sessions were fragmenting. The same visitor was showing up over and over as a new user with a new session. Click identifiers from ads weren't persisting. And the cause, once I finally saw it, was a single architectural decision made long before I arrived.

Google Tag Manager, the container that ran nearly all of the site's tracking, had been installed inside a Shopify Custom Pixel.

Custom pixels are Shopify's built-in way to run tracking code, and they sound perfect on paper. But Shopify runs them inside a sandboxed iframe on a different origin, a sealed-off box that is deliberately separated from the actual page. Code inside that box can't reliably write cookies that the store's domain can see, which means the identifiers that analytics tools depend on to recognise a returning visitor can't persist properly.

So every visit looked new. Sessions multiplied. Users multiplied. Ad-click identifiers evaporated, so attribution collapsed into "direct" or got claimed by whichever channel shouted loudest. And on top of that, events were double-firing where the sandboxed setup overlapped with other tracking. The 200% growth was the sound of one visitor being counted three times.

Nobody had done anything stupid, that's the annoying part. The pixel said "Connected". The tags fired. It's exactly the kind of setup that passes every surface-level check and fails at the foundations. I've written up the full technical detail in the Shopify custom pixel sandbox guide, because this exact mistake is sitting inside a lot of Shopify stores right now.

The Rebuild

The fix wasn't one change, it was a rebuild of the measurement pipeline from the ground up:

  • GTM out of the sandbox. Tag Manager moved from the custom pixel into the main page frame, where it can actually see the page, the visitor, and the landing URL it's supposed to see.
  • Server-side GTM. A server-side tagging setup, so key events flow through a server container rather than depending entirely on the browser.
  • Meta CAPI with deduplication. Meta's Conversions API sending purchases server-to-server, properly deduplicated against the browser pixel so nothing gets counted twice.
  • Google Ads conversion cleanup. Stripping out the overlapping conversion actions so Google Ads had one clean source of truth instead of several competing ones.
  • Affiliate tracking server-to-server. Affiliate networks fed by direct server calls instead of fragile browser tags.

What Changed

Here's the bit that takes some nerve to say out loud in a meeting: after the fix, some of the reported numbers went down.

That was the proof it was working. When you remove double counting, the double-counted numbers drop. The revenue figure that fell wasn't revenue disappearing, it was fiction disappearing. What was left finally matched Shopify's orders, matched the bank account, and, crucially, matched itself from one report to the next.

And once the numbers were honest, decisions got better. Ad budgets could be judged on attribution that meant something. Channels that had been quietly stealing credit stopped getting rewarded for it. That's the actual value of fixing tracking: not tidier charts, better decisions.

What This Means for Your Store

If your GA4 numbers and your Shopify numbers tell noticeably different stories, don't assume the difference is normal noise. Some gap is expected, but a big one has a cause, and the cause is findable. I've written a full walkthrough of the usual suspects in why GA4 doesn't match Shopify.

And if anyone, an app, an agency, a past developer, has ever put Google Tag Manager inside a Shopify custom pixel on your store, that's worth checking today rather than someday. Related things worth ruling out while you're at it: Google Ads counting conversions twice and Meta pixel events going missing.

The dashboards will look fine either way. That's the trap.

Could This Be Happening to You?

The questions people ask me after reading this story.

Cross-check against something GA4 can't influence: Shopify's order count and your actual takings. If GA4 says you're growing and the money doesn't, believe the money. A gap of around 10-12% between GA4 and Shopify is normal; a story that only exists in GA4 is not.

For anything that depends on cookies, sessions or ad-click attribution, yes. The sandbox is doing exactly what Shopify designed it to do, isolating your code from the page. That isolation is precisely what breaks GA4 and ad platform tracking. Custom pixels have legitimate uses, but hosting your whole GTM container isn't one of them.

Because broken tracking usually inflates, it double-counts purchases, splits one visitor into several, and lets channels claim the same conversion more than once. Remove the duplication and the numbers drop to what was actually true all along. If a tracking fix only ever makes your numbers go up, be suspicious of the fix.

No. Every tag in this story was firing. Firing isn't the same as firing correctly, with the right identifiers, from the right place, once. That's why I check the raw requests and raw events rather than trusting a green tick in a debugger.

Worried Your Numbers Are Lying Too?

The fastest way to find out is to have someone look at the evidence. That's what my tracking health check is: I go through your setup, raw requests and all, and tell you what's real.

Keep Reading

The technical detail behind this story lives in the Shopify custom pixel sandbox guide. If your own numbers don't add up, start with why GA4 doesn't match Shopify, then check for Google Ads duplicate conversions and consent mode conversion drops. Or skip the DIY and get a tracking health check.