Why GA4 and Shopify Numbers Don't Match (and How to Fix It)

Illustration: a storefront sends data to two report cards, Shopify Orders with tall blue bars and GA4 Purchases with shorter bars and dashed tops, a not-equal sign between them and chips for time zones, consent and ad blockers.

Open Shopify's analytics and Google Analytics 4 for the same week and the numbers rarely agree. Shopify shows more orders, revenue is off by an amount nobody can explain, and the channel that "drove" the sales depends on which tool you ask.

Some of that gap is built in and harmless. Some of it is a setup problem worth fixing before Black Friday (November 27, 2026) and Cyber Monday (November 30). Here's where each difference comes from and what to do about it.

The short version

  • Shopify records every order because it processes them. GA4 only knows what a tag or app tells it. For orders and revenue, Shopify is your source of truth.
  • GA4 usually shows fewer purchases: orders placed outside your online store, visitors who decline cookies and ad blockers never reach it.
  • GA4 showing more purchases or revenue than Shopify is a setup problem, almost always two tags sending the same purchase, or refunds that never reach GA4.
  • Sessions and traffic sources are counted differently by design. Compare trends, not totals, and fix the setup in October.

If you haven't connected GA4 yet, start with our guide to Google Analytics 4 updates and how to set it up on Shopify, then come back here.

First, compare the right numbers

Many "GA4 doesn't match Shopify" worries come from comparing two metrics that measure different things. Shopify's Total sales includes tax, shipping, duties and fees, minus discounts and sales reversals. Its Gross sales is product price times quantity, before any of that. GA4's Purchase revenue is whatever value your tag sends with each purchase, minus any refunds GA4 was told about. Line those up before you compare anything:

Matching metrics: Shopify sessions with GA4 sessions, orders with transactions, gross sales with gross item revenue, total sales with purchase revenue, and sales reversals with refund amount, each with a note on what differs COMPARE LIKE WITH LIKE SHOPIFY GA4 SessionsSessions OrdersTransactions Gross salesGross item revenue Total salesPurchase revenue Sales reversalsRefund amount Both end after 30 minutes idle, but each counts visitors and bots its own way. Filter Shopify to the Online Store channel first. GA4 only sees website checkouts. Price × quantity before tax and shipping. Discounts may be applied differently. Only close if your tag's purchase value includes tax and shipping. Check it. Zero in GA4 unless something sends refund events. Shopify counts them automatically. SAME DATES + TIME ZONE
The closest GA4 equivalent for each Shopify number, and what still differs between them.

Two filters make the comparison fair. In Shopify, look at the online store only: the Sales by sales channel report under Analytics → Reports separates it from point of sale and other channels. And use exactly the same dates in both tools, in the same time zone (more on that below).

Why GA4 shows fewer orders than Shopify

Every order is in Shopify. Only some reach GA4:

Diagram: every Shopify order narrows down to what GA4 records, losing orders placed outside the online store, visitors who declined cookies, ad blockers and missing tracking; a second tag sending the same purchase makes GA4 count more instead WHY GA4 SEES FEWER ORDERS Every order in Shopify Not placed on your website POS, orders you create in the admin, other sales channels, renewals Declined cookies Consent regions only; GA4 may model part of it back Blocked in the browser Ad blockers, privacy browsers, no JavaScript Tracking gaps Old thank-you page scripts, payment redirects What GA4 records WHY GA4 SEES MORE Two tags send the same purchase ×2
Each layer removes orders GA4 never hears about. Duplicate tags push the number the other way.
  • The order didn't happen on your website. Point of sale orders, orders you create and mark as paid in the admin, orders from other sales channels and marketplaces, and subscription renewals charged in the background all skip the online store checkout that GA4 watches.
  • The visitor declined cookies. In regions where your cookie banner is shown, Shopify only collects non-essential data after consent, and GA4 tags that follow Shopify's Customer Privacy API, like the Google & YouTube app, respect the same choice. With Google's consent mode, GA4 can fill part of the gap with modeled data, but only when there's enough consented traffic to model from.
  • A browser blocked the tag. Shopify's own help centre lists browser extensions that block Google Analytics, and visitors without JavaScript or cookies, as standard reasons for a gap.
  • Tracking was never updated. Purchase tracking pasted into the old Additional scripts box on the Thank you page doesn't carry over to the new Thank you and Order status pages. Additional scripts became view-only on August 28, 2025, and August 26, 2026 was the upgrade deadline for stores not on Shopify Plus. If GA4 purchases dropped at the end of August, check this first. The fix is an app pixel.
  • A payment redirect to another site lost the purchase event on the way back.

How big a gap is "normal" depends on your customers and markets, so measure your own: divide GA4 transactions by Shopify online store orders for a quiet month. If that percentage holds steady, trust GA4's trends. If it suddenly moves, something in your setup changed.

Why GA4 shows more orders or revenue than Shopify

This one isn't normal.

  1. Two tags send the same purchase. The Google & YouTube app, an analytics app, Google Tag Manager and an old gtag snippet in your theme can all send GA4 events. Any two pointed at the same property double your purchases. GA4 can deduplicate purchases that arrive with the same transaction ID, but Google's own advice is to make sure you don't have duplicate tags at all.
  2. Refunds never reach GA4. Shopify subtracts refunds, returns and order edits as sales reversals, on the date they're processed. GA4 only subtracts refunds if something sends it a refund event. Shopify's Google & YouTube app doesn't, so over a busy returns season GA4 revenue drifts above Shopify's net sales.
  3. You're comparing different totals. A purchase value that includes tax and shipping will always look high next to Shopify's net sales. Compare it with total sales.

Why sessions and traffic don't match

Both tools end a session after 30 minutes of inactivity, but each uses its own cookies, bot detection and edge-case rules. Shopify also changed how it measures sessions between September 21 and 23, 2026: sessions no longer end at midnight UTC, some sessions without a pageview (like a customer going straight to checkout from a cart link) now count, and identified bot sessions are filtered out of session reports by default. Orders and sales aren't affected; session counts and conversion rate can shift.

Worth knowingComparing this BFCM's Shopify conversion rate with last year's mixes two measurement methods. Compare orders and sales year on year, and sessions only from October 2026 onwards.

Why the channels disagree

Shopify's sessions and conversions use last-click attribution: if someone clicks an email on Monday and comes back by typing your address on Friday, the sale is Direct. GA4's traffic reports use last non-direct click, so the same sale goes to the email. GA4's attribution reports can also use a data-driven model, which splits credit across several touchpoints. None is wrong; pick one tool for channel decisions and stick with it.

One attribution problem is fixable, though. When a customer pays through a provider that sends them to another site and back, like PayPal or some card verification pages, GA4 can record the return trip as a new referral, and the sale gets credited to the payment provider instead of your ad or email. Tell GA4 to ignore those domains:

Illustration of the GA4 List unwanted referrals screen, reached from Admin, Data streams, your web stream and Configure tag settings, with one condition that matches the domain paypal.com, an Add condition link and a Save button ADMIN › DATA STREAMS › WEB › CONFIGURE TAG SETTINGS List unwanted referrals Include referrals that match ANY of the following conditions Match type Referral domain contains Domain paypal.com + Add condition Add each payment or login domain your customers return from. Up to 50 per stream. Save
GA4's unwanted referrals setting (an illustration, not a screenshot). It only affects data from the day you save it.
  1. In GA4, go to Admin → Data streams and click your web stream.
  2. Click Configure tag settings, then Show all, then List unwanted referrals.
  3. Add a condition for each payment domain that shows up as a referral in your traffic reports, and click Save.

Clean UTM tags on your campaign links help here too. Our guide to shortening links with tracking covers them.

Time zones and delays

Shopify reports in your store's time zone (Settings → General → Store defaults → Time zone). GA4 reports in the time zone you chose when you created the property. If they differ, a late Black Friday order can land on Saturday in one tool. Match them in October: changing GA4's time zone only affects data from then on, and can leave a flat spot or spike on the day you change it.

GA4 also needs time. Google says data processing can take 24 to 48 hours, and numbers can change during that window. Shopify's sales reports are up to date within about a minute. Compare days that have fully settled.

Set up GA4 so the numbers hold up at BFCM

  1. Pick one source of GA4 events. Search your theme code for gtag and G-, check Google Tag Manager, and make sure only one app sends GA4 events to your property.
  2. Match the time zones in Shopify and GA4.
  3. Add unwanted referrals for your payment providers.
  4. Decide how you'll handle refunds. Either send refund events to GA4, or agree that GA4 revenue is gross and Shopify's net sales is the real number.
  5. Check consent. If you sell to regions that need a cookie banner, use Shopify's banner or a consent app that uses Shopify's Customer Privacy API, so every tag follows the same choice. Our cookie banner guide explains the options.
  6. Place a test order and watch it arrive once, and only once, in GA4's DebugView.
  7. Record your October baseline (GA4 transactions as a share of Shopify online store orders) to check against on Black Friday.

This fits into the two-weeks-out stage of our Black Friday Cyber Monday checklist, alongside test orders and the code freeze.

What you can fix, and what you can't

Cause Fixable? How
Two tags sending purchases Yes Keep one source of GA4 events
Refunds missing from GA4 Yes Send refund events, or treat GA4 revenue as gross
Different time zones Yes Match them before the sale
Payment providers as referrals Yes List unwanted referrals in GA4
Old Thank you page scripts Yes Replace with an app pixel
Ad blockers Partly Server-side purchase events are harder to block
Declined cookies Partly Consent mode lets GA4 model part of the gap
POS, admin and other channel orders No Compare against online store orders only
Different session and attribution rules No Compare trends, pick one tool for channel decisions

Where an analytics app helps

Shopify's free Google & YouTube app sends the standard ecommerce events and is the right starting point, especially if you use it for your Google product feed. Where it stops is refunds: it doesn't send them to GA4, so GA4 revenue stays gross.

We build Pasilobus Google Analytics for exactly those two. Our app sends checkout and purchase events server-side, so they're harder for ad blockers to stop, and on the Pro plan it sends a refund event linked to the original order whenever you refund in Shopify, so GA4 shows net revenue. You can keep Google & YouTube for your product feed and disconnect its Google Analytics connection, so only one of them sends GA4 events. Refunds are sent for orders placed after install, up to 60 days after the order. More on what the app does in our Pasilobus Google Analytics guide.

If something looks wrong

  • GA4 purchases are roughly double Shopify's orders. Two tags are sending purchases. In DebugView, each event should appear once; if you see it twice within a second or two, find the second source.
  • GA4 purchases fell to near zero in late August 2026. Your purchase tracking probably lived in Thank you page additional scripts. Replace it with an app pixel.
  • Shopify sessions changed overnight in late September 2026, but orders didn't. That's Shopify's session measurement update, not your traffic.

Common questions

Why does Shopify show more orders than Google Analytics?

Because Shopify processes every order and GA4 only records the purchases a tag reports. Orders outside your online store, visitors who decline cookies and ad blockers all reduce GA4's count.

Which is more accurate, Shopify analytics or GA4?

For orders and revenue, Shopify. For behavior, such as where visitors come from and where they leave checkout, GA4 gives you more detail.

Does Shopify's cookie banner affect GA4?

Yes. In regions where the banner is shown, visitors who decline aren't tracked the normal way by Shopify or by GA4 tags that respect consent. GA4's consent mode can model part of that data back.

Why did my Shopify conversion rate change in September 2026?

Shopify updated how it measures sessions between September 21 and 23, 2026, including filtering identified bots by default. Your orders and sales weren't affected; the number of sessions they're divided by was.

Get your numbers straight before the rush

If refunds or blocked purchases are what's keeping GA4 out of line with Shopify, install Pasilobus Google Analytics from the Shopify App Store. The free plan covers standard and server-side purchase tracking, so you can test it before November. If you'd rather someone checked your whole setup, from duplicate tags to time zones, talk to us.