GA4 purchases don’t match Shopify orders: how to compare them order by order
Shopify lists the orders your store recorded. The Ecommerce purchases metric in Google Analytics™ 4 counts purchase events. Comparing order identifiers can help locate differences between the two exports, but it does not by itself establish that tracking is broken or explain the cause.
1. What each one counts
- Shopify records orders from every source: the online store checkout, orders created from drafts, point of sale and other channels. The Source column of the orders export shows where each order came from.
- GA4 counts only the purchases that were sent to it. Its Ecommerce purchases metric counts
purchaseevents, and Purchase revenue is the revenue from purchases minus refunds recorded in GA4.
2. Differences that are expected
- Orders completed outside the online checkout. Point-of-sale orders and orders created from drafts and paid outside the online checkout need a separate tracking path. A draft paid through an invoice’s checkout link is a different case: check how that purchase is measured.
- Processing time. Google says data processing can take 24–48 hours and reports may change meanwhile. Leave the last two days out of the comparison.
- Time zones. GA4 assigns events to days in the property’s reporting time zone; Shopify uses the store time zone (Settings > General). If they differ, orders placed near midnight fall on different days.
- Revenue definitions. Google recommends a
valueequal to the sum of price × quantity of the items, without shipping or tax, which have their own parameters. Shopify’s Total and GA4’s Purchase revenue are not interchangeable. Purchase revenue subtracts refunds recorded in GA4. Compare amounts only after confirming the treatment of discounts, shipping, taxes and refunds, including their dates. - Currencies. GA4 converts purchases in another currency to the property currency at the prior day’s exchange rate. Shopify converts orders paid in other currencies to the store currency, and the converted values are estimates until the customer is charged. Check the Shopify CSV’s Currency column and the GA4 property’s reporting currency. Matching numeric amounts do not establish that the currencies or conversion bases match.
- Consent and blocking. In basic consent mode, Google tags send nothing until the visitor consents. Ad blockers and browser privacy settings can also stop requests.
- Report limits. Depending on the report and its settings, GA4 can apply data thresholds, sampling or aggregation into an “(other)” row. Check the data-quality indicator and the export’s coverage before treating an absent transaction ID as a tracking problem.
3. Compare order IDs with Transaction IDs
Define the orders you expect this GA4 implementation to measure. Review sales channels, test orders, payment status and cancellations before interpreting unmatched identifiers.
- Export the orders. In Shopify, go to Orders → Export, select the intended orders or date range, choose CSV and select Export orders, not Export transaction histories. The CSV has a Name column (the order number shown in the admin, such as
#1001) and an Id column (the order ID). An order with several items takes several rows: count each order once. - Export the purchases. In Explore, create a free-form exploration. Put Transaction ID in Rows and Ecommerce purchases and Purchase revenue in Values. Use the intended date range and the data for the store being compared, without overlapping segments. Select Export data → CSV and check the data-quality indicator before interpreting the results.
- Find out which ID your setup sends. Place a test order with DevTools open and read
ep.transaction_idin the purchase request: it may be the order name, the number without#or the order ID. If your store sends purchases from a server, they don’t appear in the browser; use the GA4 report instead. - Match them using that format, and sort the result into four groups: in Shopify but not in GA4, in GA4 but not in Shopify, more than one purchase for the same order, and matched orders whose amounts differ.
Don’t match orders by amount and time alone: different orders can share both. Leave unclear cases unresolved.
With the two CSV files from steps 1 and 2, you can do step 4 in your browser with our free Shopify orders vs GA4 purchases comparison. It matches by ID only, and the files are processed in the page’s memory without being uploaded.
4. Patterns worth investigating
A pattern points to where to look; it doesn’t prove the cause.
- Missing orders concentrate in one source or payment method. Test that path end to end: does the buyer reach the order confirmation page, and does the purchase request appear?
- Orders go missing from a specific date. Check what changed that day: theme, apps, tags or checkout. Shopify set August 26, 2026 as the upgrade deadline for non-Plus stores’ Thank you and Order status pages. The upgrade replaces the existing pages and their customizations. Check the store’s actual upgrade status and whether its tracking customizations were replaced with compatible implementations.
- One order is associated with two transaction IDs. This may indicate duplicate sending or inconsistent identifiers. Confirm the association and inspect the sending paths before changing the implementation. For web streams, Google documents deduplication of purchases from the same user with the same transaction ID; different IDs do not provide that deduplication key (see GA4 duplicate purchase events).
- Transaction IDs that are empty or repeated. GA4 deduplicates all purchases with
transaction_id="", so an empty ID can make many orders count as one. An empty string is not the same as an omitted parameter. - GA4 IDs that don’t exist in Shopify. Test orders, another site sending to the same property, or a different ID format.
- Matched orders with different amounts. Compare like with like: tax, shipping, discounts, refunds and currency.
Duplicates that GA4 already removed don’t show up in the report, so a clean report doesn’t prove that nothing was sent twice. To check the parameters of a single purchase, see how to check a GA4 purchase event.
Checklist
- Same closed date range on both sides, leaving out the last two days.
- Reporting currencies and time zones checked; if they differ, affected dates and amounts remain unverified until reconciled.
- Orders from sources without a browser checkout set apart.
- Each order counted once, not once per CSV row.
- The ID format your setup sends confirmed with a test order.
- Unclear matches left unresolved.
Shopify is a trademark of Shopify Inc. Tracklint is not affiliated with, endorsed or sponsored by Shopify.