Skip to content

How to reconcile GA4 and Shopify revenue, step by step

Match time zones and currency, then compare GA4's purchase revenue with Shopify's gross sales minus discounts for the Online Store, for one closed week. Count orders against GA4 purchases. Returns, other sales channels and duplicate IDs explain the next layer; consent explains the rest.

By , Founder & CEOUpdated 8 min read

GA4 and Shopify will rarely match to the cent, but you can usually explain the gap. Match time zones and currency, pick a closed week, and set GA4's purchase revenue against Shopify's gross sales minus discounts for the Online Store. Then compare order counts. What is left after that is tracking loss.

You need your Shopify admin, GA4 and a spreadsheet with four columns: money and orders from each tool. The menu paths below come from Shopify's and Google's help pages as they read on 1 October 2026.

Step by step

  1. Match the time zone and currency. GA4 reports in the property's own time zone and currency, and Shopify's help lists different reporting time zones as a cause of discrepancies. If nobody set a currency, Google says a property reports in USD by default. Menu path: GA4 > Admin > Property details, and Shopify admin > Settings > General > Store defaults.
  2. Pick one closed week. Google says GA4 data processing can take 24 to 48 hours, and some data arrives up to 7 days late. So choose a full week that ended at least a week ago. Menu path: in a GA4 report, the date picker in the top right, then a custom range.
  3. Pull Shopify's sales for the Online Store only. Shopify names the channel each order came through, such as Online Store, Buy Button or Draft Orders. Write down the Online Store row's gross sales, discounts, sales reversals, taxes, shipping and orders. Menu path: Shopify admin > Analytics > Reports > Category filter > Sales > Total sales by sales channel.
  4. Build the figure GA4 can match. Take gross sales minus discounts. Google's reference says the Google & YouTube app's purchase value takes discounts into account but leaves out shipping charges and taxes. Shopify's Total sales adds taxes, duties, shipping and fees, so it is the wrong yardstick. Menu path: none, you do this one in the spreadsheet.
  5. Pull GA4's purchase revenue and purchases. Start a free-form exploration, set the same week at the top of Variables, and import Date, Purchase revenue and Ecommerce purchases. Purchase revenue takes off refunds only when refund events arrive. Menu path: GA4 > Explore > Free form > Variables > the icon beside DIMENSIONS or METRICS > IMPORT.
  6. Compare counts before money. Set Shopify's Online Store orders against GA4's Ecommerce purchases. If the counts match and the money does not, the gap is definitions. If the counts differ, the gap is tracking. Menu path: the tables from steps 3 and 5, side by side.
  7. Look for duplicate or missing transaction IDs. Add Transaction ID as a row in the exploration. Google deduplicates purchases that share a transaction ID on web streams, and an empty ID makes it deduplicate all of them. Repeats or blanks point at the tag, not the shoppers. Menu path: GA4 > Explore > your free-form exploration > DIMENSIONS > Transaction ID.
  8. Give returns their own column. Refund is not among the events Google lists for the app, so unless something else sends refunds, GA4 keeps returned orders in its revenue. Shopify books a return as a negative on the day the order was returned. Add Shopify's sales reversals back before you compare. Menu path: Total sales by sales channel, the sales reversals column.
  9. Check consent last. Whatever survives steps 4 to 8 is mostly purchases GA4 could not see. Shopify's help says Google can only count visitors with JavaScript and cookies activated, and extensions can block it. In cookie banner regions, Shopify collects non-essential data only after consent. Menu path: Shopify admin > Settings > Customer privacy.

A worked example

For illustration, here is one closed week in round, invented numbers.

For illustration, one closed weekAmount
Shopify Total sales, all channels€10,000
Take off taxes€900
Take off shipping charges€600
Add back sales reversals€500
Take off POS orders from the till€600
Online Store gross sales minus discounts€8,400
GA4 Purchase revenue€8,120
Still to explain€280

In this worked example, the raw gap looks alarming: €10,000 in Shopify against €8,120 in GA4. Most of it is paperwork. In this worked example, tax and shipping account for €1,500, because the app never sends them to GA4. For illustration, returns run the other way: Shopify took €500 off and GA4 took nothing off. In this worked example, the till orders add €600 that never passed through the online checkout.

That leaves €280 in this worked example. Say the Online Store shows 120 orders and GA4 shows 116 purchases. In this worked example, that is 4 missing purchases of €70 each, which is the €280. The money gap and the count gap agree, so step 9 is the place to look.

A matching total is the start, not the finish. In one store's export, Direct takes 57.7% of revenue whichever view you pick (Channels sheet). GA4 counted that money but not where it came from. Reconcile the total first, then ask how much of it GA4 could label.

What should I check when the numbers look wrong?

  • GA4 is higher than Shopify. Start with step 7: a purchase sent twice without a transaction ID can count twice. Then check test orders. Shopify leaves them out of its sales reports, while a tag on a test checkout may still fire.
  • The gap jumped on one date. Something changed that day, such as a theme, a tag, an app or the cookie banner. Google also says the app's purchase values began taking discounts into account on 24 April 2025. Compare periods on the same side of that date.
  • The currencies never quite agree. GA4 converts other currencies using the prior day's exchange rate, so a store that sells in several currencies will not match to the cent.
  • Sessions and conversion rate moved in late September 2026. That is Shopify's new session measurement, not your revenue. Shopify says orders, sales and customer counts are not affected by it.
  • Yesterday looks short in GA4. It usually is. Wait for processing to finish before you call it a tracking problem.
  • A gift card week looks odd. Shopify leaves the sale of a gift card out of its sales reports and counts the order the card later pays for. If your tag also fires on the gift card checkout, GA4 books that money twice, at the sale and again at the spend.

What to do this week

  1. Start a weekly gap log. Each Monday, note the Online Store's gross sales minus discounts and orders from Shopify, next to GA4's Purchase revenue and Ecommerce purchases. Pass: the gap stays about the same each week. Fail: it moves, so find what changed that week before anyone blames the ads.
  2. Save the exploration with Transaction ID in it. In GA4, keep the free-form exploration from steps 5 and 7, with Date and Transaction ID as rows. Pass: no blank or repeated IDs. Fail: blanks or repeats, so fix the purchase tag before you trust any revenue report.
  3. Check that GA4 receives shipping and tax. Add the Shipping amount and Tax amount metrics to the same exploration. Pass: both carry values, so you can rebuild most of Shopify's Total sales from GA4. Fail: both are empty, so GA4 will always sit below Shopify's headline number.

Check the homework. Your GA4 Attribution paths export already holds the evidence. Causality Engine reads that one file and shows what each channel caused next to what last-click gave it, in 1 to 2 minutes, for €99 once (excluding VAT), refundable within 30 days. Check the homework

Sources, 1 October 2026: Edit or delete accounts, properties and data streams (Google Analytics Help); Currency reference (Google Analytics Help); Data freshness (Google Analytics Help); Change and compare date ranges in reports (Google Analytics Help); Get started with Explorations (Google Analytics Help); Free-form exploration (Google Analytics Help); Analytics dimensions and metrics (Google Analytics Help); Minimize duplicate key events with transaction IDs (Google Analytics Help); Shopify event parameters (Google for Developers); Sales reports (Shopify Help Center); Managing store details (Shopify Help Center); Analytics discrepancies (Shopify Help Center); Changes to sessions and conversion rate in Shopify Analytics (Shopify Help Center); Configuring customer privacy settings (Shopify Help Center)

Frequently asked questions

  • Which Shopify number should I compare with GA4 purchase revenue?
    Gross sales minus discounts, for the Online Store channel. That is the closest match to the purchase value the Google & YouTube app sends. Total sales adds tax, shipping and fees and takes off returns, which GA4 never hears about from the app.
  • Why does GA4 show more purchases than Shopify has orders?
    Usually duplicates or test checkouts. GA4 only deduplicates purchases that share a transaction ID, so a purchase sent twice without one can count twice. Shopify also leaves test orders out of its sales reports, while a tag on a test checkout may still fire.
  • Did Shopify's September 2026 session change move my revenue?
    No. Shopify says the rollout, which ran from 21 to 23 September 2026, changed sessions, conversion rate and other session-based metrics. It says orders, sales and customer counts are not affected, so a revenue gap that moved that week has another cause.

Go deeper: Causal attribution, explained.

Sixty-second versions of these ideas: Causality Engine on YouTube Shorts.

Keep reading

Terms in this article

Browse the full glossary

Your platforms guess.
We run the math.

Upload a GA4 export and see what each channel caused, next to last-click, in 1–2 minutes. The read is yours to keep.

Free, in your browser: your file is not uploaded. The full read is €99, refundable within 30 days. Prices exclude VAT.
Or book a 30-min call.