Why do GA4 and Shopify show different revenue?
Shopify's Total sales adds tax and shipping, takes off returns and counts every sales channel. GA4 counts only purchases its tag saw, and Shopify's Google & YouTube app leaves out shipping and tax. Line up those definitions first; what is left is tracking loss.
By Joris van Huët, Founder & CEOUpdated 7 min read
Usually because they count different things. Shopify's Total sales counts orders from every sales channel, adds tax and shipping, and takes off returns. GA4 only counts purchases its tag saw in a browser, and Shopify's Google & YouTube app sends a value without shipping or tax. Consent choices, ad blockers and time zones widen the gap.
The usual answer is a shrug: GA4 loses some sales to cookies, Shopify is right, move on. That covers one gap out of five. The other four are definitions, returns, scope and timing, and you can line those up on paper before lunch.
What one store's data shows
One store's anonymised GA4 export, 1 January 2024 to 21 August 2026. It holds shares of revenue only: no ad spend, no order counts.
| What the export shows | Share of revenue | Source cell |
|---|---|---|
| Direct, in last click, first click and touched views | 57.7% | Channels sheet, Direct row |
| Paid Social, in last click, first click and touched views | 0.0% | Channels sheet, Paid Social row |
| Journeys with 2 to 3 touches (12.5 days to buy) | 12.2% | Journeys sheet, 2 to 3 touches row |
| Journeys with 4 to 9 touches (16.9 days to buy) | 5.4% | Journeys sheet, 4 to 9 touches row |
This file is GA4's own ledger, so it cannot measure the gap with Shopify. It has no totals at all, only shares of the revenue GA4 recorded. What it does show is the gap nobody reconciles: how GA4 labels the money it did catch.
On the Channels sheet, Direct holds 57.7% of revenue in last click, first click and touched views alike. Google files a visit as Direct when it arrives through a saved link or a typed address. So more than half of the revenue GA4 counted here came with no source GA4 could name. A GA4 total that matched Shopify to the cent would still leave that share unexplained.
Paid Social sits at 0.0% in every view on the Channels sheet. Maybe the store bought no social ads, maybe no buyer clicked one, or maybe GA4 filed those visits under another label. The export holds no spend, so it cannot say which. If it was the label, Shopify still booked every one of those orders in full. GA4 lost the label, not the order.
The slow rows show what GA4 needs to keep a journey in one piece. On the Journeys sheet, journeys with 2 to 3 touches took 12.5 days to buy, and journeys with 4 to 9 touches took 16.9 days. To link those visits, GA4 has to recognise the same browser for days or weeks. When a visitor denies analytics storage, Google says its tag will not read or write first-party analytics cookies. That buyer can still pay in full on Shopify while GA4 meets a stranger on every visit, if it meets them at all.
What the export cannot show: Shopify's revenue, the size of the gap, or why any one order went missing. It cannot show cause either. These are shares of credit, not evidence that a channel sold anything.
Why does the usual answer mislead?
Because "GA4 misses sales" explains one gap and ignores four you can line up with a calculator.
Definitions. Google's reference for the Google & YouTube app says its purchase value takes discounts into account but leaves out shipping charges and taxes. Shopify's Total sales adds taxes, duties, shipping charges and fees, then takes off sales reversals. One is a subtotal and the other is the till receipt. Compare GA4 with gross sales minus discounts instead.
Returns. GA4's Purchase revenue takes off refunds only when a refund event arrives, and refund is not among the events Google lists for the app. Shopify books a return as a negative number on the day the order was returned. A busy returns week pulls Shopify down while GA4 shrugs.
Scope. Shopify's sales reports name the channel behind each order, such as Online Store or Draft Orders. The app sends its purchase event when a visitor completes checkout online. An order that never passes through that checkout, like a sale at the till, may never reach GA4.
Timing. GA4 reports in the property's time zone, and Shopify's help names different reporting time zones as a cause of discrepancies. GA4 data processing can take 24 to 48 hours, and Google says some data arrives up to 7 days late. Yesterday is always a draft.
Then comes the gap everyone means. Shopify's help says Google can only count visitors with JavaScript and cookies activated, and browser extensions can block it from tracking purchases. In regions where Shopify's cookie banner runs, non-essential data waits for consent.
What can GA4's revenue number not tell you?
How much you sold. Shopify knows that, because it records orders whatever the browser allowed. GA4's number is for comparing channels and weeks inside GA4, on GA4's rules.
It cannot tell you which channel caused a sale either. GA4 credits revenue by its attribution model. Shopify's channel report can credit the same order by last click, first click or last non-direct click. That is two rulebooks for one order, and neither ran a test. For what a channel added, you need a holdout test.
What to do this week
- Line up the clocks and the currency. In GA4, go to Admin, then Property details, and read the Reporting time zone and Currency. In Shopify, go to Settings, then General, and read Store defaults. Pass: both use the same time zone and currency. Fail: they differ, so every daily comparison is off before you start.
- Compare like with like for one closed week. In Shopify, go to Analytics, then Reports, filter the Category to Sales and open Total sales by sales channel. Set the Online Store row's gross sales minus discounts against GA4's Purchase revenue for the same week. Pass: the gap holds steady from week to week. Fail: it jumps, so check what changed that week, such as a tag, a theme or a consent banner.
- Count orders as well as money. Set the Online Store's orders against GA4's Ecommerce purchases for the same week, from a free-form exploration in Explore. Pass: the counts sit close, so the money gap is definitions. Fail: GA4 falls well short, so consent and blockers are eating purchases; GA4 runs over, so look for duplicate transaction IDs.
Check the homework. Your GA4 Attribution paths export already holds the evidence. Causality Engine reads that one file and shows what each channel caused next to what last-click gave it, in 1 to 2 minutes, for €99 once (excluding VAT), refundable within 30 days. Check the homework
Sources, 1 October 2026: Shopify event parameters (Google for Developers); Analytics dimensions and metrics (Google Analytics Help); Data freshness (Google Analytics Help); Consent mode in Google Analytics (Google Analytics Help); Default channel group (Google Analytics Help); Edit or delete accounts, properties and data streams (Google Analytics Help); Free-form exploration (Google Analytics Help); Sales reports (Shopify Help Center); Analytics discrepancies (Shopify Help Center); Configuring customer privacy settings (Shopify Help Center); Measuring marketing performance (Shopify Help Center); Managing store details (Shopify Help Center)
Related answers
Frequently asked questions
Does GA4 include shipping and tax in Shopify revenue?
Not through the Google & YouTube app. Google's reference says the app's purchase value takes discounts into account but leaves out shipping charges and taxes. Shopify's Total sales adds both back, so compare GA4 with gross sales minus discounts instead.Do refunds lower GA4 revenue?
Only if a refund event reaches GA4. Purchase revenue subtracts refund events, and refund is not among the events Google lists for the Google & YouTube app. Shopify takes a return off on the day it happens, so a week heavy with returns widens the gap.Should I trust GA4 or Shopify for revenue?
Shopify for how much you sold, because it records orders whatever the browser allowed. GA4 for where visits came from, on its own rules. Neither shows which channel caused a sale, so neither total tells you an ad worked.
Go deeper: Causal attribution, explained.
Sixty-second versions of these ideas: Causality Engine on YouTube Shorts.
Keep reading
Terms in this article
- Ad SpendAd Spend is the total amount invested in advertising campaigns. It is measured against Return on Ad Spend (ROAS) to evaluate campaign effectiveness.
- AnalyticsAnalytics is the systematic computational analysis of data. It reveals customer behavior and measures campaign performance.
- AttributionAttribution identifies user actions that contribute to a desired outcome and assigns value to each. It reveals which marketing touchpoints drive conversions.
- Attribution ModelAn Attribution Model defines how credit for conversions is assigned to marketing touchpoints. It dictates how marketing channels receive credit for sales.
- CausalityCausality is the relationship where one event directly causes another, essential for identifying specific actions that drive desired outcomes in marketing.
- Google AnalyticsGoogle Analytics is a web analytics service that tracks and reports website traffic.
- Holdout TestA holdout test is an experiment where a portion of the audience does not see a campaign. This measures the campaign's true incremental impact.
- IncrementalityIncrementality measures the true causal impact of a marketing campaign. It quantifies the additional conversions or revenue directly from that activity.