Shopify says 150 orders this week. GA4 says 112. You check the date ranges, double-check the filters, and the gap persists.
Both numbers are correct. Shopify and GA4 measure your store from fundamentally different vantage points, using different technology, different definitions, and different timing. The result is a data discrepancy that confuses almost every Shopify merchant running Google Analytics.
Understanding why these numbers differ matters more than trying to force them to match. Once you know where the gap comes from, you can decide which data to trust for which decisions -- and whether your specific gap is normal or signals a real tracking problem.
This guide covers the eight reasons Shopify and GA4 report different numbers, what accuracy you should realistically expect, and a clear framework for when the discrepancy needs action versus when you can leave it alone.
The Fundamental Difference: Server-Side vs Client-Side
Every other discrepancy on this list traces back to one architectural difference.
Shopify records transactions server-side. When a customer completes a purchase, Shopify's servers confirm the payment and log the order in your admin. This happens regardless of the customer's browser, device, extensions, or network conditions. Shopify sees every order because the transaction passes through its own infrastructure.
GA4 records transactions client-side. A JavaScript snippet runs in the customer's browser. When the thank-you page loads and the purchase event fires, GA4 counts the sale. If anything prevents that JavaScript from executing -- an ad blocker, a browser crash, a redirect that skips the confirmation page, a consent banner rejection -- GA4 never knows the sale happened.
Server-side tracking is inherently more complete. Client-side tracking is inherently lossy. This is not a bug. It is how the technology works.
If you want a hands-on approach to checking your specific implementation, run a free GA4 audit to see exactly where your tracking gaps are.
Reason 1: Ad Blockers and Privacy Browsers
Ad blockers are the largest single cause of GA4 under-reporting.
Industry estimates put ad blocker usage between 25% and 40% of web users. These extensions block GA4's JavaScript (gtag.js) from loading entirely. No script, no events, no data.
On top of ad blockers, modern browsers have built-in privacy features:
- Safari (iOS and macOS): Intelligent Tracking Prevention (ITP) limits cookie lifetimes to 7 days and blocks cross-site tracking. First-party cookies set by JavaScript are capped at 24 hours in some scenarios.
- Firefox: Enhanced Tracking Protection blocks known analytics domains by default in Standard mode.
- Brave: Blocks GA4 outright, no configuration needed.
Expected impact: 10-30% of your visitors are invisible to GA4. This is a permanent, structural gap that cannot be fixed with client-side tracking. Shopify sees these customers because the transaction never touches the browser's tracking layer.
What to do: Accept this gap as your baseline. If you need higher accuracy for ad attribution, server-side tracking (which bypasses ad blockers) is the only path to 95%+ capture rates.
💡 Pro Tip: Analytics Agent automatically tracks all these metrics for you. Install Analytics Agent and get instant insights without the manual work.
Reason 2: Third-Party Payment Redirects
When a customer selects PayPal, they leave your Shopify checkout and complete payment on PayPal's domain. After payment, PayPal is supposed to redirect them back to your Shopify thank-you page. But this redirect does not always succeed:
- The customer closes the tab after paying
- A popup blocker prevents the redirect
- The PayPal confirmation page satisfies the customer and they navigate away
If the thank-you page never loads, the GA4 purchase event never fires. Shopify still records the order because payment was confirmed server-side.
The same applies to:
- Shop Pay Installments (redirects to shop.app)
- Klarna, Afterpay, Sezzle (BNPL providers with external payment flows)
- Bank redirects (iDEAL, Bancontact, Sofort in Europe)
Expected impact: If 20-40% of your orders go through third-party payment methods, you could be missing 10-30% of purchases in GA4 from this cause alone.
What to do: Check your Shopify payment method breakdown (Settings > Payments > View payment methods). If a large share uses external checkout, server-side tracking is the long-term fix. Short-term, verify that the PayPal return URL is configured correctly so customers are redirected back to your store.
For specific troubleshooting steps, see our fix guide: Google Analytics Missing Shopify Sales.
Reason 3: Timezone Misalignment
This is the most common "hidden" discrepancy because it does not affect totals over long periods -- it shifts orders between days.
If your Shopify store is set to Central European Time (CET) but your GA4 property uses Pacific Time (PT), there is a 9-hour difference. An order placed at 11:00 PM CET on Tuesday shows up as Tuesday in Shopify but Tuesday afternoon in GA4. Orders near midnight in either timezone will appear on different days in each platform.
How to check:
- Shopify timezone: Settings > General > Store details > Time zone
- GA4 timezone: Admin > Property settings > Reporting time zone
Expected impact: Daily reports will show small discrepancies. Weekly and monthly totals should be nearly identical (barring other causes).
What to do: Align both platforms to the same timezone. If your store primarily serves one region, use that region's timezone in both Shopify and GA4. Even if you cannot change them to match, being aware of the offset prevents false alarms when comparing daily data.
Reason 4: Currency Conversion Differences
If your store sells in multiple currencies, Shopify and GA4 handle conversions differently.
Shopify records each order in the currency the customer paid in, then converts to your store's base currency using its own exchange rates.
GA4 receives the currency parameter from the purchase event and may convert to your property's default currency. GA4 uses Google's exchange rates, which may differ from Shopify's rates, and the conversion timing can vary (GA4 uses the previous day's rate).
Expected impact: 1-3% variance on individual orders. Over time, the differences mostly average out, but on high-volume days with volatile currencies, the gap can be noticeable.
What to do: For accurate comparison, filter both platforms to the same currency. In Shopify, check reports in your base currency. In GA4, ensure the currency parameter in your purchase event matches what Shopify charges. If you sell in a single currency, this is not a factor.
Reason 5: Order Finalization Timing
Shopify and GA4 "count" an order at different moments in the purchase lifecycle.
Shopify counts the order when payment is authorized (or when the order is created for manual payment methods). This happens server-side, instantly.
GA4 counts the order when the purchase event fires in the browser. This requires the thank-you page to load and the JavaScript to execute. There can be a delay of seconds to minutes.
For most credit card transactions, this difference is negligible. But for orders with delayed payment:
- Bank transfers: The customer may complete the order form, but payment arrives hours or days later. Shopify may create the order immediately (pending payment), while GA4 fires at the thank-you page regardless of payment status.
- Manual payment methods: Orders created via invoices or draft orders never trigger the storefront thank-you page.
- Subscription renewals: After the first purchase, recurring charges happen server-side. No thank-you page, no GA4 event.
Expected impact: Varies based on your payment mix. Stores with significant manual or subscription orders will see a persistent gap.
What to do: Exclude draft orders, manual orders, and subscription renewals from your comparison. These are legitimately untraceable by client-side GA4. Focus your capture rate calculation on standard checkout orders only. For a step-by-step methodology, see our guide on how to compare Shopify and GA4 correctly.
See Analytics Agent in Action
Discover how AI-powered insights can transform your Shopify store.
Reason 6: Refunds and Cancellations
This one catches people off guard because GA4 can show MORE revenue than Shopify.
Shopify deducts refunded orders from revenue reports. If you refund a $200 order, your Shopify revenue drops by $200.
GA4 does not deduct refunds unless you explicitly send a refund event with the matching transaction_id. Almost no Shopify store has this configured. The original purchase event stays in GA4's data permanently.
Over time, this creates a positive skew in GA4 revenue compared to Shopify. The more refunds you process, the larger the gap.
Expected impact: If your refund rate is 5%, GA4 will show ~5% more revenue than Shopify over the same period.
What to do: For accurate revenue comparison, either implement the refund event in GA4 (requires development work), or manually account for the refund rate when comparing. Shopify is your source of truth for financial reporting.
Reason 7: Bot Traffic and Internal Visits
GA4 and Shopify handle non-human and internal traffic differently.
GA4 automatically filters known bots and spider traffic from reports (this is on by default in all GA4 properties). It also allows you to create internal traffic filters to exclude your own team's visits.
Shopify Analytics includes all visits by default. There is no built-in bot filter or internal IP exclusion. Staff visits, test sessions, and some bot traffic may inflate Shopify's session and visitor counts.
On the flip side, test orders placed by your team show up in both platforms. If you regularly place test orders without cleaning them up in Shopify, your order counts will diverge.
Expected impact: Small (1-5% on traffic metrics). Minimal impact on revenue metrics if you void/refund test orders.
What to do: Delete or archive test orders in Shopify. In GA4, set up internal traffic filters (Admin > Data settings > Data filters) so your team's browsing does not inflate metrics.
Reason 8: Consent Mode and Cookie Banners
If you sell in the EU, UK, or California, privacy regulations require consent before tracking.
When a customer declines cookies or does not interact with your consent banner, GA4 cannot record their visit or purchase. Shopify records the order regardless because the transaction is processed server-side.
GA4's Advanced Consent Mode includes "behavioral modeling" -- it estimates data for users who did not consent based on patterns from those who did. This partially closes the gap but is an estimate, not actual tracking.
Expected impact: 5-20% of orders in regions with strict consent requirements (EU/UK). The exact impact depends on your consent banner design and opt-in rates.
What to do: Check your consent banner's opt-in rate. If it is below 60%, consider optimizing the banner UX (clearer wording, better placement). Enabling GA4's Consent Mode with behavioral modeling helps but does not fully replace real tracking data.
💡 Pro Tip: Analytics Agent automatically tracks all these metrics for you. Install Analytics Agent and get instant insights without the manual work.
Metric-by-Metric: How Shopify and GA4 Define Things Differently
Even when both platforms track the same event, they may define the underlying metric differently.
| Metric | Shopify Definition | GA4 Definition | Why They Differ |
|---|---|---|---|
| Sessions | A period of continuous activity. Resets after 30 min of inactivity. Counts some bot sessions. | Event-based. New session after 30 min inactivity OR midnight OR new campaign parameter. Filters known bots. | Shopify may count higher due to bot inclusion. GA4 resets at midnight. |
| Users / Visitors | Cookie-based unique visitors. | User-ID, Google signals, device ID, or cookie-based. Cross-device deduplication possible. | GA4 may deduplicate users across devices (lower count). |
| Orders / Purchases | Every confirmed order (including manual, draft, POS, subscription). | Only orders where purchase event fires in browser. |
Shopify counts more because it includes non-web orders. |
| Revenue | Net revenue after refunds and discounts, in store currency. | Gross revenue from purchase events. No automatic refund deduction. |
GA4 shows higher due to untracked refunds. |
| Add to Cart | Sessions where add-to-cart occurred (one per session). | Every add_to_cart event (multiple per session). |
GA4 counts higher because it logs each event, not each session. |
| Conversion Rate | Orders / Sessions. | Purchases / Sessions (or Users, depending on configuration). | Different denominators and numerators can both differ. |
This table explains why even a "perfect" tracking setup shows different numbers. The platforms are measuring related but distinct things.
What Accuracy Should You Expect?
Here are realistic accuracy ranges for order capture (GA4 purchases / Shopify orders):
| Tracking Method | Expected Capture Rate | Notes |
|---|---|---|
| Google & YouTube app (native) | 60-80% | Simplest setup, lowest accuracy |
| GTM with client-side tracking | 75-85% | Better event control, still browser-dependent |
| Client-side + optimized consent | 80-90% | Best client-side scenario |
| Server-side tracking | 95-98% | Bypasses ad blockers and payment redirects |
A 10-20% gap with client-side tracking is industry-standard. If your capture rate falls within these ranges for your tracking method, your implementation is working correctly. The gap is not a problem to solve -- it is a characteristic of the technology.
When to Worry vs When to Accept
Accept the gap if:
- Your capture rate is consistent (same percentage week over week)
- The gap falls within the expected range for your tracking method
- Your ad spend is low and you rely primarily on organic traffic
- Most orders go through Shopify's native checkout (credit card, not PayPal)
When the gap is consistent, your trend data is still valid. A 20% gap every week means you can reliably track growth, seasonal patterns, and campaign impact -- just calibrate your expectations to the tracking method's baseline.
Investigate immediately if:
- Your capture rate dropped suddenly (this week it is 65%, last week it was 82%)
- The gap exceeds 30% with no clear cause
- You spend more than $10K/month on ads and need reliable ROAS
- GA4 shows zero or near-zero purchase events (tracking is broken, not discrepant)
A sudden change in the gap almost always means something broke: a theme update removed tracking code, an app was uninstalled, Checkout Extensibility migration removed your scripts, or a new consent banner is blocking more aggressively.
To diagnose quickly, run a free GA4 audit and compare your tracking health score against previous results.
FAQ
Why does Shopify show more orders than Google Analytics?
Shopify records every confirmed transaction server-side, including orders via PayPal, subscriptions, draft orders, and POS. GA4 only records orders where the browser-based purchase event fires successfully. Ad blockers, privacy browsers, and third-party payment redirects all prevent GA4 from seeing the full picture.
Should I trust Shopify or GA4 for revenue?
Use Shopify as your source of truth for revenue, orders, and financial reporting. Shopify data reconciles with your bank and payment processor. Use GA4 for marketing attribution, traffic analysis, and campaign performance. They answer different questions.
How do I reduce the gap between Shopify and GA4?
The most impactful fix is server-side tracking, which captures 95-98% of orders by firing events from your server instead of the customer's browser. Short of that: ensure you have a single, correctly configured GA4 implementation, optimize your consent banner opt-in rate, and verify that third-party checkout customers are redirected to your thank-you page.
Does GA4 account for refunds automatically?
No. GA4 does not deduct refunds from revenue unless you send a refund event with the original transaction_id. Most Shopify stores do not have this configured, so GA4 revenue trends higher than Shopify over time. For accurate revenue reporting, use Shopify.
Why did the gap between Shopify and GA4 suddenly get worse?
A sudden increase usually means something changed in your tracking setup: a theme update removed GA4 code, the Google & YouTube app got disconnected, Checkout Extensibility migration removed scripts from Additional Scripts, or a new app introduced duplicate GA4 tags. Check your implementation before assuming the gap is normal.
Can I make Shopify and GA4 match exactly?
No. Even with perfect server-side tracking, small differences remain due to different metric definitions, data processing timing, and rounding. A 2-5% discrepancy with server-side tracking is the practical minimum. The goal is not identical numbers -- it is understanding why they differ and using each platform for what it does best.
Key Takeaways
Shopify and GA4 are both telling you the truth. They are just looking at your store from different angles.
- The core issue is architectural: Shopify tracks server-side (complete), GA4 tracks client-side (lossy)
- Ad blockers, payment redirects, consent banners, and timing differences all compound the gap
- A 10-20% discrepancy with client-side tracking is normal and expected
- Use Shopify for financial reporting and GA4 for marketing attribution
- A sudden change in the gap signals a tracking problem, not a data problem
If your gap feels too large or has changed recently, run a free GA4 audit to find out exactly what is going on. And if you want to learn how to do an apples-to-apples comparison correctly, check out our practical guide: Compare Shopify and GA4 Correctly.
For hands-on fixes to specific tracking issues, start at our Shopify tracking troubleshooting hub.
Ready to Unlock Your Analytics Potential?
Connect Analytics Agent to your Shopify store and start making data-driven decisions today.
Get Started Free