All articles

GA4 Ecommerce Tracking for Shopify Dropshipping: The Setup That Actually Reports Revenue Right (2026)

Shopify's default GA4 setup often double-fires or drops purchase events. The exact checks, a revenue reconciliation formula, and fixes that actually matter.

Open GA4's ecommerce purchases report next to your Shopify orders for the same week, and the two numbers almost never match exactly — that part is normal. What isn't normal is a 20-40% gap, which is what shows up on a lot of dropshipping stores, and the cause usually sits in the setup, not in some unavoidable law of web tracking.

Two failure modes do almost all the damage. The first is double-counting: Shopify's native GA4 connection fires a purchase event, and a second tracker — a manually pasted gtag snippet from years ago, or an analytics app installed on top — fires the same event again, so GA4's reported revenue runs 1.3-2x higher than what actually got paid. The second is under-counting: consent banners blocking the tag before a visitor accepts, ad blockers, and a checkout flow where the purchase event never fires cleanly after a theme or checkout-extensibility change. Both can be happening on the same store at once, partially canceling each other out, which is the worst version of this problem because the total looks almost right while the channel breakdown underneath it is nonsense.

What follows: why double-counting is the single most common mistake and how to catch it in five minutes, the four ecommerce events actually worth verifying instead of GA4's full recommended list, a reconciliation formula with an honest variance range instead of an expectation that the numbers will ever match exactly, what Consent Mode changes and doesn't fix, and an audit checklist with explicit go/no-go thresholds instead of a vague "check your tracking" reminder.

The most common failure mode: double-counting every purchase

This is the first thing to rule out, because it's the cheapest to find and the most damaging to leave in place. It usually happens one of two ways: someone connected Shopify's native Google & YouTube sales channel for GA4 at some point, and a gtag.js snippet from an older setup is still sitting in theme.liquid or a custom pixel section firing the same purchase event a second time; or a GA4-labeled analytics app got installed on top of the native integration because a tutorial said to add "Google Analytics tracking" without checking whether it was already there.

The symptom is specific enough to spot without guessing: GA4 reported revenue sits consistently 30-100% above Shopify's actual revenue for the same period, not just a little high. A store genuinely missing some sessions to ad blockers or consent declines under-reports; a store over-reporting by that much is counting something twice.

Four events worth verifying, not twenty

GA4's documentation lists over a dozen recommended ecommerce events, and trying to audit all of them on a dropshipping store is how this task gets abandoned halfway. Four cover the funnel that actually matters: view_item, add_to_cart, begin_checkout, and purchase. If those four fire correctly and carry the right data, the revenue and funnel reports built on top of them are trustworthy; the rest are optional detail.

The failure here is rarely "the event doesn't fire at all" — it's usually a popular theme customization quietly stripping the data the event is supposed to carry. A redesigned add-to-cart button wired through custom JavaScript instead of the theme's default add-to-cart form often fires the click but never pushes the matching dataLayer event, so add_to_cart silently goes to zero while view_item and purchase still work fine. A multi-currency store sometimes hardcodes "USD" into the tracking snippet, which makes every non-US order's reported value technically wrong by whatever the live exchange rate was that day.

See the ads that are winning right now

A reconciliation formula, and the variance range that's actually normal

Once double-counting is ruled out and the four events carry the right data, the next question is simple: how close should GA4 revenue get to Shopify's actual revenue? Close, but not equal — and treating "equal" as the target is how people chase a ghost for a week.

A usable formula: variance % = (GA4 reported revenue − Shopify actual revenue) ÷ Shopify actual revenue, computed over the same UTC date range with at least 7 full days of data (GA4's own processing and thresholding make anything shorter noisy). On a store with no tracking defects left, this typically lands somewhere between -5% and -15% — GA4 running a bit under Shopify, mostly from ad blockers, declined consent, and sessions that bounce between devices in a way neither system reconciles perfectly. A variance outside that range, in either direction, is a signal to go back and check for the double-counting or missing-event problems above before assuming it's just "normal attribution noise."

Consent Mode and attribution windows add variance you can reduce, not erase

On EU and UK traffic, Google Consent Mode v2 changes what GA4 can measure when a visitor declines analytics consent: instead of a real event, GA4 receives a stripped "cookieless ping" and models the rest of that visitor's behavior statistically. Running Consent Mode correctly recovers some of that lost signal through modeling, but a modeled conversion is an estimate, not a measurement — it narrows the gap, it doesn't close it, and expecting it to match a fully consented visitor's data exactly is the wrong bar.

Attribution windows are a separate source of mismatch that has nothing to do with consent. GA4's default reporting attribution uses a data-driven model with up to a 90-day lookback; Shopify's own built-in analytics typically credits last-touch within a shorter window. Running both side by side and expecting the same channel to get the same revenue credit in each is comparing two different accounting methods, not catching a bug.

The audit checklist, and the thresholds that tell you when to stop

Run this once, in order, after any theme change, app install, or tracking setup — not just when the numbers look obviously wrong, since the problems above are silent by design.

Clean tracking tells you how a product performed. It won't tell you why.

Fixing all of the above earns you something real: numbers you can actually use to decide whether to scale or kill a product, instead of numbers that were quietly lying in one direction or another. What it doesn't do is explain a drop in performance that shows up in otherwise-clean data — a sudden CPA increase or a conversion rate that falls off a cliff can be the page, the offer, or a product that's simply cooling off everywhere at once, and GA4 alone can't tell those apart.

That's a competitive question, not a tracking one. Trackira's ad tracking reads live spend and creative activity across Meta, TikTok, Pinterest and Google Shopping, so once your own numbers are trustworthy, checking whether competitors are still running the same product's ads at real volume is a faster way to tell "my store has a problem" apart from "this product is simply done" than re-deriving it from GA4 data alone.

Why does GA4 show different revenue than my Shopify orders?

Some gap is normal — typically GA4 reporting 5-15% under Shopify's actual revenue, mostly from ad blockers, declined consent, and cross-device sessions neither system reconciles perfectly. A bigger gap, especially GA4 reporting higher than Shopify, almost always means a second analytics integration is firing the purchase event twice.

I have Shopify's native GA4 integration connected. Do I also need a manually added gtag snippet?

No — and having both is the single most common cause of inflated GA4 revenue on Shopify stores. Pick one path (the native integration is enough for most stores) and remove the other rather than running both "to be safe."

Does turning on Consent Mode mean I lose data from visitors who decline consent?

You lose the ability to measure those visitors directly, but Consent Mode v2 lets GA4 model an estimate of their behavior from aggregated signals instead of reporting nothing. That recovers some of the gap, not all of it — treat modeled conversions as an estimate, not a precise count.

How long should I wait after fixing a tracking issue before trusting the numbers again?

About a full week. GA4's own processing and thresholding make single-day numbers noisy even on a clean setup, and comparing the day right after a fix to the days before it will understate how much actually improved.