Clarvivo blog
Why GA4 revenue doesn't match Shopify, and how big the gap should be
GA4 and Shopify never report the same revenue. The causes, which gaps are normal, which mean broken tracking, and a step-by-step way to reconcile the two.
- ga4
- shopify
- revenue
- ecommerce tracking
Open GA4 and Shopify for the same week and you'll get two different revenue numbers. That's expected. Shopify records every order your store took. GA4 records purchase events that a browser managed to send, from visitors whose consent and browser allowed it, counted the way GA4 counts.
So the question isn't "why don't they match?" It's "is this gap normal, or is something broken?" This guide covers what causes the difference, what usually points to a real problem, and how to reconcile the two numbers.
Start with the right comparison
Most mismatches are exaggerated by comparing different things. Before investigating tracking, make sure you're comparing like with like:
| Check | Why it matters |
|---|---|
| Same date range and timezone | Shopify uses the store timezone; GA4 uses the property timezone. A few hours' difference moves orders between days. |
| Same revenue definition | Shopify's gross sales, net sales and total sales include or exclude discounts, tax, shipping and returns differently. GA4's purchase revenue is whatever value your purchase event sends. |
| Same currency | A multi-currency store may send presentment currency to GA4 and report shop currency in Shopify. |
| Paid orders only | Pending, voided or test orders inflate Shopify's count. |
The Shopify vs GA4 Revenue tool reads both exports, aligns these definitions, and separates the gap into its causes.
Causes that make GA4 lower than Shopify
These are the normal, expected reasons GA4 under-reports:
Consent
Visitors who decline analytics cookies may not be measured at all, or only through modelled data if you use Consent Mode. Stores with lots of EU traffic see the biggest effect.
Ad blockers and browser privacy
Ad blockers and some browser privacy settings block the GA4 tag entirely. Their share varies by audience; it's higher for technical and younger audiences.
Orders that never touch the browser
Draft orders, POS sales, wholesale orders, subscription renewals and orders created through apps or the admin don't fire a browser purchase event. Shopify counts them; GA4 never sees them.
Express and off-site checkouts
Some express checkout and payment flows complete without the buyer loading the page where your purchase tag lives. Test each payment method you offer and check the purchase event fires.
The visitor leaves before the tag loads
If the confirmation page is slow, or the buyer closes it immediately, the purchase event may never be sent.
Causes that make GA4 higher than Shopify
GA4 reporting more revenue than Shopify almost always means something is being counted twice or counted wrong:
Duplicate purchase events
The native Shopify integration and a GTM tag both send purchase. Or the purchase fires again when the confirmation page is refreshed or revisited from an email. Check your purchase data for repeated transaction IDs with the Transaction ID Duplicate Checker, and test the confirmation page with the Checkout Purchase Event Checker, which reloads it to see whether the purchase fires again.
Wrong value or currency
A purchase value that includes tax and shipping when your Shopify comparison doesn't, or a value sent in the wrong currency, inflates GA4. Values formatted as text (for example "1,299.00") can be misread. The Ecommerce dataLayer Validator checks transaction ID, value, currency and items on the purchase push.
Refunds not sent to GA4
GA4 keeps a purchase's revenue unless you send a refund event. Shopify's net sales subtract refunds. Over time, GA4 revenue drifts above Shopify's net figure. The Refund Tracking Gap Checker shows how much refunded revenue may still be in your reports.
What's a normal gap?
There's no universal number, because it depends on your traffic mix, consent rates and how many orders happen outside the browser. A practical approach:
- Measure your baseline over a few clean weeks: GA4 purchase revenue as a percentage of Shopify paid revenue.
- Watch the trend, not the absolute. A stable gap means tracking is consistent. A sudden change means something changed: a theme update, a new app, a consent change, a new payment method.
- Treat GA4 above Shopify as a bug, not a measurement quirk.
A reconciliation routine
When the numbers don't add up, work through it in this order:
- Export both for the same dates, timezone and currency, paid orders only.
- Compare order counts first, then revenue. If counts match but revenue doesn't, it's a value or currency problem. If counts differ, it's missing or duplicate events.
- Look for duplicate transaction IDs in GA4's purchase data.
- Test a real order end to end: place a test purchase with each payment method and confirm one purchase event fires with the right value, currency and order ID.
- Check orders outside the browser: subscriptions, POS, draft orders. Exclude them from the comparison or account for them separately.
- Add refunds, either as GA4 refund events or as an adjustment in your reporting.
Which number should you trust?
For money, trust Shopify: it's the financial record. For understanding which channels and campaigns produce that money, you need analytics, but analytics built on the store's revenue rather than on browser events alone. That's the idea behind Clarvivo: it attributes revenue from your payment provider to the channels that drove it, so the revenue in your attribution reports is the revenue you actually took.
FAQ
Why is GA4 revenue lower than Shopify? Consent refusals, ad blockers, orders created outside the browser (subscriptions, POS, draft orders) and checkout paths that skip the purchase tag all reduce what GA4 sees.
Why is GA4 revenue higher than Shopify? Usually duplicate purchase events, a value that includes tax and shipping or the wrong currency, or refunds that were never sent to GA4.
Does the Shopify Google & YouTube app fix the mismatch? It simplifies setup, but it doesn't remove consent, ad-blocker or off-browser gaps. If you also have a GTM purchase tag, check you aren't sending purchases twice.
Should I use server-side tracking for Shopify? Server-side tracking recovers some events lost to blockers and closes off-browser gaps. It still needs deduplication so the same order isn't counted twice.