You already know Shopify and GA4 show different numbers. If you have not read the explanation yet, our companion article covers why Shopify and GA4 numbers don't match in detail.
This guide is about comparing them correctly. Not forcing them to match -- they never will -- but setting up a reliable comparison methodology so you get actionable insight from both platforms without chasing phantom discrepancies.
Follow these seven steps in order. Each one removes a source of false discrepancy so you can isolate real tracking issues from expected differences. The whole process takes about 20 minutes the first time and 5 minutes for weekly monitoring afterward.
Before You Compare: The Pre-Comparison Checklist
Run through this checklist before pulling a single number. Skipping any step introduces noise into your comparison.
- [ ] Timezones aligned: Shopify and GA4 are set to the same timezone (or you have accounted for the offset)
- [ ] Currency normalized: You are comparing revenue in the same currency
- [ ] Date range buffered: Your comparison period ends at least 48 hours ago (GA4 data processing delay)
- [ ] Test orders excluded: Test and staff orders are deleted or filtered from Shopify
- [ ] Internal traffic filtered: GA4 is excluding your team's IP addresses
- [ ] Non-trackable orders excluded: Draft orders, manual orders, subscriptions, and POS sales are separated from your Shopify total
If all six boxes are checked, your comparison will reflect genuine tracking differences rather than configuration mismatches.
Step 1: Align Your Timezones
Timezone misalignment is the most common cause of "discrepancies" that are not actually discrepancies. If Shopify uses Eastern Time and GA4 uses Pacific Time, an order placed at 11 PM ET on Tuesday appears on Tuesday in Shopify and still on Tuesday in GA4 (it is 8 PM PT). But an order at 1 AM ET Wednesday appears on Wednesday in Shopify and Tuesday in GA4 (10 PM PT).
Over a full week, totals balance out. But daily comparisons will be off every time.
How to check and fix:
- Shopify: Go to Settings > General > Store details. Your timezone is listed under "Time zone."
- GA4: Go to Admin > Property settings. The "Reporting time zone" is shown on the property details page.
Set both to the same timezone. If your customers are mostly in one region, use that region's timezone. If you cannot change GA4's timezone (it is locked after property creation in some cases), document the offset and adjust your comparison window accordingly -- compare full weeks (Monday-Sunday) instead of individual days.
Step 2: Normalize Currency
If your store sells in a single currency and your GA4 property uses that same currency, skip this step.
For multi-currency stores:
Shopify records each order in the customer's payment currency, then converts to your store's base currency using Shopify's exchange rates at the time of the transaction.
GA4 receives the currency parameter from the purchase event and converts to your property's reporting currency using Google's exchange rates from the previous day.
Two differences matter:
- Exchange rate source: Shopify and Google use different rate providers.
- Exchange rate timing: Shopify converts at transaction time; GA4 uses the prior day's rate.
How to normalize: Compare revenue in your store's base currency only. In Shopify, use the default revenue reports (already in base currency). In GA4, check that your purchase event sends the correct currency parameter. If you are comparing individual orders across currencies, expect 1-3% variance from exchange rate differences alone.
💡 Pro Tip: Analytics Agent automatically tracks all these metrics for you. Install Analytics Agent and get instant insights without the manual work.
Step 3: Account for Data Processing Delays
GA4 standard reports can take 24-48 hours to fully process. If you compare today's Shopify orders to today's GA4 data, GA4 will always look lower because it has not finished processing.
Rule of thumb: Only compare date ranges that ended at least 48 hours ago.
- Checking on a Wednesday? Compare through Sunday at the latest.
- Running a weekly report on Monday morning? Compare the prior Monday-Sunday, not the last 7 days.
GA4's Realtime reports update instantly, but they show a limited window (last 30 minutes) and lack the full event parameters you need for a proper comparison. Use standard reports for any serious reconciliation.
Note for GA4 Explorations: Custom explorations in GA4 may have even longer processing delays for certain dimensions. If your exploration shows different numbers than the standard reports for the same date range, give it another 24 hours.
Step 4: Exclude Non-Trackable Orders
Shopify records every order: web checkout, draft orders, POS, manual orders, subscription renewals, and imports. GA4 only records orders where the browser-based purchase event fires. Comparing all Shopify orders to GA4 purchases is not apples-to-apples.
Orders to exclude from your Shopify baseline:
| Order Type | Why GA4 Can't Track It |
|---|---|
| Draft orders | Created in admin, no customer checkout session |
| Manual orders | Sent as invoices, customer may pay outside storefront |
| POS orders | In-person, no web thank-you page |
| Subscription renewals | Server-side charge, no storefront session after first order |
| Imported orders | Migrated from another platform, no real-time tracking |
How to filter in Shopify:
Go to Orders in your Shopify admin. Use filters to isolate orders by sales channel. You want only "Online Store" orders for your comparison. Alternatively, filter by checkout method or payment gateway to exclude non-web channels.
Your adjusted formula:
Trackable Shopify Orders = Total Shopify Orders - (Draft + Manual + POS + Subscription Renewals + Imports)
This is the number you compare against GA4 purchases.
Step 5: Remove Test Orders and Internal Traffic
Test orders and staff browsing inflate metrics on both sides, but not equally.
In Shopify:
- Delete or archive all test orders (Orders > select test orders > Archive)
- If you use a test gateway or 100% discount codes for testing, filter those orders out of your comparison
- Staff visits inflate Shopify's session count but not order count (unless they place test orders)
In GA4:
- Set up an internal traffic filter: Admin > Data settings > Data filters > Create filter > Internal traffic
- Define your office IP addresses in Admin > Data streams > [your stream] > Configure tag settings > Define internal traffic
- Exclude known developer IPs, home office IPs for remote team members, and agency partner IPs
If you have not set up internal traffic filters in GA4, your traffic metrics (sessions, users) will be inflated compared to real customer data. Revenue metrics are less affected unless your team places test orders that are not voided.
See Analytics Agent in Action
Discover how AI-powered insights can transform your Shopify store.
Step 6: Calculate Your Capture Rate
With all the above adjustments in place, calculate your true capture rate:
Capture Rate = (GA4 Purchases / Trackable Shopify Orders) x 100
Example:
- Shopify total orders (last week): 200
- Non-trackable orders (draft, POS, subscriptions): 25
- Trackable Shopify orders: 175
- GA4 purchases (same period, 48h+ buffer): 147
- Capture rate: 147 / 175 = 84%
Severity guide:
| Capture Rate | Assessment | Action |
|---|---|---|
| 90-98% | Excellent (server-side tracking range) | Maintain current setup |
| 80-90% | Good (optimized client-side) | Monitor weekly, no urgent action |
| 70-80% | Typical (standard client-side) | Consider optimization or server-side |
| 50-70% | Below expected | Investigate -- likely a tracking issue |
| Below 50% | Tracking broken | Immediate fix needed |
If your capture rate falls within the expected range for your tracking method, your implementation is working. The remaining gap is structural (ad blockers, privacy browsers, payment redirects).
Before optimizing further, make sure your baseline tracking is solid. Run a free GA4 audit to check for implementation issues like duplicate tags, missing events, or misconfigured parameters.
Step 7: Spot-Check Individual Orders with Transaction IDs
For the most precise comparison, match individual transactions between platforms.
In GA4:
- Go to Explore > Free form
- Add dimensions:
transaction_id,event_name(filter topurchase) - Add metrics:
event_count,purchase_revenue - Set date range to match your comparison period
- Export the results
In Shopify:
- Go to Orders
- Filter by date range and "Online Store" channel
- Export the order list
Compare:
Match GA4 transaction_id values to Shopify order names (e.g., #1042). Every Shopify order that does not have a matching GA4 transaction is a missed conversion.
Look for patterns in the missing orders:
- Are they all PayPal? -> Third-party checkout redirect issue
- Are they all mobile Safari? -> iOS tracking prevention
- Are they all from a specific region? -> Consent mode blocking
- Are they all after a certain date? -> Something broke in your tracking
Pattern identification turns a vague "20% gap" into a specific, fixable problem. This is where real diagnostic value comes from.
If you find a high concentration of missing orders from one source, see our guide on fixing missing Shopify sales in GA4 for targeted fixes.
💡 Pro Tip: Analytics Agent automatically tracks all these metrics for you. Install Analytics Agent and get instant insights without the manual work.
Which Platform to Trust for What
Shopify and GA4 each excel at different things. Use the right tool for the right question.
| Question | Use This Platform | Why |
|---|---|---|
| How much revenue did we make? | Shopify | Server-side, includes all orders, deducts refunds. Reconciles with your bank. |
| How many orders did we process? | Shopify | Complete count including all channels and payment methods. |
| Which marketing channel drove this sale? | GA4 | Attribution modeling, UTM tracking, campaign analysis. |
| What is our traffic trend? | GA4 | Session-level analytics, source/medium breakdown, landing page performance. |
| What is our conversion rate? | Both (different answers) | Shopify for overall store CR. GA4 for channel-specific or campaign-specific CR. |
| Which products are browsed most? | GA4 | Page-level analytics, product list impressions, view_item events. |
| What is our refund rate? | Shopify | GA4 does not track refunds by default. |
Do not try to make one platform do everything. Shopify is your financial source of truth. GA4 is your marketing and traffic intelligence layer. Together they give a complete picture.
Weekly Monitoring Template
Set up a simple tracking sheet and update it every Monday morning. Here is what to record:
| Week | Shopify Orders (total) | Non-Trackable | Trackable | GA4 Purchases | Capture Rate | Notes |
|---|---|---|---|---|---|---|
| Feb 3-9 | 200 | 25 | 175 | 147 | 84% | Baseline |
| Feb 10-16 | 215 | 28 | 187 | 159 | 85% | Stable |
| Feb 17-23 | 190 | 22 | 168 | 105 | 63% | INVESTIGATE -- drop |
When to raise an alarm:
- Capture rate drops more than 10 percentage points week-over-week
- Capture rate falls below 60% (something is broken)
- Trend reverses for 2+ consecutive weeks
A sudden drop almost always means a tracking change: theme update, app install/uninstall, Checkout Extensibility migration, or consent banner modification. Check recent changes first.
For a quick diagnostic when something looks off, run a GA4 audit to compare against your previous tracking health score.
FAQ
How often should I compare Shopify and GA4 data?
Weekly is ideal for most stores. Pull numbers every Monday for the prior week (with a 48-hour buffer). Monthly comparison works too, but you will catch tracking issues slower. Daily comparison is unreliable due to timezone effects and GA4 processing delays.
What capture rate should I aim for?
With standard client-side tracking, 80-90% is good. With server-side tracking, 95-98% is achievable. Anything below 70% warrants investigation. The goal is not 100% -- it is a stable, predictable rate that you can calibrate your marketing analysis around.
Can I automate the comparison?
Yes. Tools like Supermetrics, Funnel.io, or custom Google Sheets integrations can pull both Shopify and GA4 data into a single dashboard. If you use Analytics Agent's GA4 audit, it flags tracking issues automatically without manual comparison.
Should I switch entirely to server-side tracking?
Server-side tracking is the gold standard for accuracy (95-98% capture rate). It makes sense if you spend more than $10K/month on ads and need precise ROAS, or if over 30% of your orders go through PayPal or BNPL providers. For smaller stores with low ad spend, optimized client-side tracking is usually sufficient.
Why does GA4 sometimes show MORE revenue than Shopify?
Two common reasons: GA4 does not automatically deduct refunds (Shopify does), and GA4 may use different exchange rates for multi-currency orders. Over time, untracked refunds create a positive skew in GA4 revenue relative to Shopify.
Key Takeaways
Comparing Shopify and GA4 correctly is not about making the numbers match. It is about building a consistent methodology that separates real tracking issues from expected differences.
- Align settings first: Match timezones, normalize currency, buffer for processing delays
- Exclude non-trackable orders: Draft, POS, subscription, and manual orders cannot be tracked by GA4
- Calculate capture rate weekly: GA4 purchases / trackable Shopify orders = your tracking health metric
- Spot-check with transaction IDs when the capture rate changes to find patterns in missing orders
- Use each platform for what it does best: Shopify for revenue, GA4 for attribution
Start by making sure your tracking implementation is sound. Run a free GA4 audit to get your baseline tracking health score, then use the weekly monitoring template to track it over time.
For the full explanation of why these platforms report different numbers, read our companion piece: Shopify vs GA4: Why Your Numbers Don't Match. For tracking issues beyond data comparison, visit our Shopify tracking hub.
Ready to Unlock Your Analytics Potential?
Connect Analytics Agent to your Shopify store and start making data-driven decisions today.
Get Started Free