Skip to content

Shopify orders don’t match GA4: how to find the exact missing orders

Updated · TagGap

Quick answer: Comparing totals only tells you that a gap exists. To find it, join your Shopify orders to GA4 purchases on transaction_id for the same date range and time zone. Orders with no match are your missing purchases; grouping them by source and payment method usually reveals the cause.

Why the totals differ in the first place

Some differences are structural and will never go away. Others mean something is broken. The usual structural causes:

  • Orders that never pass through the online store checkout in a browser: POS, draft, B2B, subscription renewals and many marketplace orders. See which Shopify orders GA4 never sees.
  • Shoppers who decline cookies or block analytics. How much data you lose depends on your consent mode setup; see Consent Mode on Shopify.
  • Time zones. Your GA4 property and your Shopify store can be set to different time zones, so a purchase near midnight lands on different days.
  • Refunds and edits. Shopify totals change when an order is refunded or edited; GA4 keeps the purchase as it was sent unless you send a refund event.

Broken tracking looks different: a purchase tag that stopped firing after a checkout or theme change, a transaction_id that is not the order identifier, two integrations sending the same purchase, or a value sent without tax, shipping or currency.

Step by step: reconcile one week by hand

  1. Pick a closed week that ended at least two days ago, so GA4 data has settled. Check that GA4 (Admin → Property details) and Shopify (Settings → General) use the same time zone, or adjust for the difference.
  2. In Shopify, go to Orders, filter to the week and export to CSV. Keep Name (for example #1001), Id, Created at, Total, Source and Payment method.
  3. In GA4, open Explore → Free form. Add the dimension Transaction ID and the metrics Ecommerce purchases and Purchase revenue, set the same dates, and export.
  4. Normalize the ids: GA4 may hold the order name (#1001), the number (1001) or the long order id. Strip the # and try all three when you match.
  5. Match each Shopify order to a GA4 transaction. Orders left over on the Shopify side are missing from GA4. Transaction IDs with more than one purchase are duplicates. GA4 ids that match no order point to a test environment or a different id format.
  6. Group the missing orders by Source and Payment method. If they share one, for example every order from one sales channel or one wallet, you have found the cause.

Watch for (not set) in the Transaction ID column: those purchases were sent without an id, so they can never be matched or deduplicated.

What the missing orders usually tell you

Common patterns among missing GA4 orders and what they usually mean
Pattern in missing ordersUsual cause
All orders after a certain dateThe purchase tag stopped firing, often after a checkout, theme or app change
Only POS, draft or subscription ordersExpected: those orders do not pass through the online checkout
GA4 has purchases, but none matchtransaction_id is a random or session value, not the order identifier
Same order appears twiceTwo integrations send the purchase, for example an app plus GTM
Matches exist, values differValue sent without tax or shipping, or in a different currency

Doing this every day, automatically

A manual join is a good one-off check, but tracking breaks between checks. TagGap runs this match for every order on a schedule, sets aside orders that are expected to be missing, groups the rest by cause, and alerts you when the match rate drops. It is read-only, so it works alongside whatever sends your GA4 events.

Related fix guides

More guides

Find out which orders your tracking missed

TagGap is in Shopify App Store review. Get early access, or run the free scan now.