On this page
Shopify and GA4 both claim to know what your store sold, and they rarely agree to the order. Shopify records every order in its backend. GA4 records only the purchases that reach it from the browser. Most revenue disputes start when a team treats the GA4 purchase count as a copy of the Shopify order list.
Why Shopify and GA4 orders don't match
A Shopify order exists once the sale is recorded in the store. A GA4 purchase exists only if a purchase event reached the property. Anything that interrupts that event creates an order Shopify has and GA4 does not. Ad blockers, denied consent, a customer closing the tab before the thank-you page loads, and a broken pixel all fall into this group.
| Mismatch | Shopify view | GA4 view | Report rule |
|---|---|---|---|
| Order count | Every order recorded in the backend | Only purchases with a sent purchase event | Use Shopify order count; track GA4 capture rate |
| Revenue total | Gross sales, discounts, returns, taxes, and shipping reported as separate lines | The value sent with the purchase event | Compare on one stated definition |
| Refunds and returns | Subtracted in sales reports | Reduced only if refund events are sent | Net refunds from Shopify, not GA4 |
| Offline and non-web orders | POS, draft, wholesale, and subscription orders appear | Usually missing unless sent separately | Label these as expected gaps |
| Duplicates | One record per order | Can fire twice on a thank-you page reload | Dedupe on transaction_id |
Checkout tracking is where most gaps start
On Shopify, the checkout and thank-you page run tracking through web pixels, which are custom or app pixels that run in a sandbox. The standard event for a finished checkout is checkout_completed. Older setups that rely on theme scripts or Google Tag Manager on the thank-you page can stop firing or fire inconsistently after checkout changes, so the GA4 count drifts away from Shopify without any visible error.
Every purchase event should carry a unique transaction_id set to the Shopify order ID. Without it, a reload of the thank-you page can count one order twice, and nobody can tell which rows are duplicates.
Time zones, currency, and attribution
Shopify and GA4 can be set to different time zones, so an order placed late in the evening can land on a different day in each system. Multi-currency stores need one consistent reporting currency before any comparison. Attribution adds one more difference: Shopify marketing reports and GA4 use different rules and sessions, so channel credit can differ even when the order counts match.
Reconcile before the review
- Write the metric definition first: order count, gross sales, net sales, or revenue after refunds.
- Confirm the GA4 purchase event sends transaction_id and that it matches the Shopify order ID.
- Lock the date range, the store time zone, the GA4 property time zone, and the reporting currency.
- Net refunds from Shopify, and confirm whether GA4 receives refund events at all.
- Track GA4 capture rate (GA4 online orders ÷ Shopify online orders) each week and investigate when it drops.
Where Shopify should win
Shopify should be the source of truth for orders, revenue, refunds, and customers. It holds the complete order record, including POS, draft, wholesale, and subscription orders that never touch the online checkout. Use it for any number that answers how much the store sold, what was returned, and who bought.
Where GA4 should win
GA4 should be the source of truth for onsite behavior: landing pages, sessions, funnel drop-off, and channel comparison. It is also the right place to see whether a campaign changed traffic or checkout behavior before that change shows up in Shopify revenue. The problem comes when a team uses GA4 to defend total sales or uses Shopify to explain every website session.
Go further with the platform mismatch guide, the server-side tagging guide, and the tracking mistakes list. If the capture rate has dropped and you want a second pair of eyes, book a tracking audit: bring the disputed report and we’ll map the first checkout signal you can trust.
Frequently asked questions
Why does GA4 show fewer orders than Shopify?
Shopify records every order in its backend. GA4 only records a purchase when a purchase event is sent from the browser or a server integration. Ad blockers, denied consent, closed tabs before the thank-you page loads, and broken pixels all leave orders out of GA4.
Should Shopify or GA4 be the source of truth for revenue?
Use Shopify for orders, revenue, refunds, and customers. Use GA4 for onsite behavior, funnel drop-off, and channel comparison. When one executive number needs both, document which system it comes from and how the two are reconciled.
Why is GA4 revenue higher or lower than Shopify total sales?
The two numbers often use different definitions. Shopify separates gross sales, discounts, returns, taxes, and shipping. GA4 revenue is whatever value the purchase event sent, which may or may not include tax and shipping. Compare the same definition before comparing totals.
Can MetricMaven reconcile Shopify and GA4?
Yes. We map the order and revenue fields, the purchase event and transaction_id, refund handling, time zone, and currency so the team can explain each gap without rebuilding the report by hand.
