
Why your Shopify revenue doesn’t match GA4 — and the three configs causing 90% of it
If your Shopify report and GA4 report disagree by more than 3%, it almost never means one of them is broken. It means three configurations are stacked in a way nobody documented.
6 min read
If your Shopify revenue and GA4 revenue disagree by more than 3%, something is misconfigured. If they disagree by more than 10%, three things are misconfigured, and they’re probably partially cancelling each other out. Here’s the list I check first, in the order I check it.
1. Currency conversion happening twice
The classic. Shopify reports presentment currency (what the customer saw) while GA4’s ecommerce events are usually sent in the shop’s currency. If your tagging vendor also runs a conversion, you’re double-converting on every international order. Symptom: the gap scales with non-USD revenue share.
What to check in your dataLayer push
window.dataLayer.push({
event: 'purchase',
ecommerce: {
currency: '{{ checkout.currency }}', // not shop.currency
value: {{ checkout.total_price | divided_by: 100 }},
transaction_id: '{{ checkout.order_number }}',
}
});2. Refunds counted on the wrong date
Shopify subtracts refunds from the order’s original date. GA4 records a refund event on the day it was processed. Run reporting on a month boundary and you’ll see a gap that flips sign every period. Symptom: the gap inverts month over month.
“Most data discrepancies aren’t one tool lying. They’re two tools telling slightly different truths.”
3. The thank-you page fires twice
Almost every Shopify Plus store I audit has at least one app that injects a tracking script into additional_scripts for Order Status, and at least one global pixel that fires on the same page. Some browsers debounce; most don’t. Symptom: a flat ~6–9% over-reporting in GA4 versus Shopify, completely unrelated to seasonality.
How to talk about this internally
Don’t frame it as “GA4 is wrong.” Frame it as “our reports are measuring three different things, and here’s what each one is actually counting.” The fix is almost never to pick a winner. The fix is to write down what each number means and stop comparing them directly until they’re reconciled.