Free browser tool
Shopify orders vs GA4 purchases
Find the orders behind the difference. I compare the IDs, dates and values in your two exports. The files and results stay in this browser.
Two exports → one ledger
Compare the records
Choose CSV files for the same completed period. No sign-up. No file upload to a server. How to export the right columns
Choose both exports, or load the synthetic sample.
The sample includes optional Test and Subscription renewal columns. Standard Shopify exports may not identify these orders.
Reconciliation ledger
Where the records differ
Counts describe these exports. They do not prove a tracking failure or its cause. Scroll each table horizontally for the full record. Money is never converted or totalled across currencies.
Method sheet
Same IDs. Comparable values.
I use the ledger to locate a difference. A diagnosis needs access to the implementation and a test of the affected path.
- Shopify export
- In Admin, open Orders → Export → Export orders. Keep Name, Id, Created at, Currency, Subtotal or Total, Financial Status, Paid at, Canceled at, Refunded Amount, Payment Method and Source. Extra line-item rows become one order. An aggregate Sales report cannot identify missing orders.
- GA4 export
- In Explore, make a flat free-form table with Transaction ID and Date as rows, Purchase revenue and Ecommerce purchases as values, and no segments or pivot columns. Use a purchase-event filter for original purchase values. Export CSV for the same completed period. A standard report also works if it contains those order-level columns; save Sheets as CSV. BigQuery CSV needs transaction_id, date, purchase_revenue, currency and optionally ecommerce_purchases.
- Value and currency
- Google’s purchase value normally excludes tax and shipping; some Shopify integrations send checkout total. Check the Revenue mapping. Reports use the GA4 property currency even when a Currency dimension is included; BigQuery can use local currency per row. Different or unknown currencies go to review. No exchange rates are applied. Net refunds subtract the exported Refunded Amount, which may include tax or shipping.
- Time and IDs
- Dates use the GA4 property time zone you enter. Shopify Created at is the order date, not necessarily the payment date. Match by ID across days, then flag date differences. Name, order number, Id and an exported checkout token are candidate keys. A leading #, spaces and numeric leading zeros are normalized only when the candidate stays unique. Custom prefixes remain. Ambiguous matches need review.
- Expectedness
- Cancelled before payment, explicit test orders, POS/draft/manual sources, explicit subscription renewals and fully refunded orders are shown separately. They are not counted as lost. Full refunds may still have had an original purchase. Server integrations may send offline orders. A standard CSV may not identify tests or renewals; absence of a marker proves neither.
- Limits
- Refund events are not matched separately. Missing IDs cannot identify an order. Repeated GA4 IDs may be export dimension splits or repeated collection; the tool sums their values and flags them. Inspect sampling, thresholds, row limits, retention, filters, consent and recent-data delays before treating an export as complete. Modelled or attributed totals cannot all be reconstructed order by order.
- Privacy
- Files are read in page memory. The comparison does not send or store file contents, order IDs or derived numbers. Clear the files or close the page when finished. Ordinary site visit measurement follows your cookie settings.
Sources: Shopify orders export, GA4 Explorations, GA4 currency, GA4 metric definitions. Checked 27 October 2026.
Reading the ledger
A place to start checking.
- Matched
- The ID and comparable value agree within tolerance. This does not verify every checkout path.
- Missing in GA4
- The order ID was not found in this export. Check period, ID format, export completeness and collection. GA4 not tracking purchases →
- Duplicate transaction ID
- The export repeats an ID or reports more than one purchase for it. Inspect dimension splits and senders before assigning a cause. GA4 purchase fires twice →
- Value difference / currency review
- Check gross/net value, tax, shipping, refunds and currency before changing tags. GA4 vs Shopify revenue mismatch →
- Not expected in GA4
- These orders are outside the default browser-purchase comparison. Review the reason and your integration’s intended scope.
- ID not found / ID review
- Check the Shopify period, custom ID format, other stores, absent IDs and collisions. No cause is assigned. Meta, Google, GA4 and Shopify disagree →
From a difference to a tested fix
Describe what’s wrong.
The first discussion is free. I check the scope before we agree any paid work.
Describe what’s wrong, free →Two ways I can help
- One problem
- USD 350 · 3 working days after access and scope agreement. I fix one agreed fault and verify it with a test order in the receiving platform.
- Complex rescue
- From USD 1,500. I reconcile every order against the available GA4, Meta and Google Ads records, mark what cannot be matched, prove the cause, rebuild the failed parts and add a daily check.