Playbook Tracking and analytics

GA4 and Shopify revenue do not match: the full reconciliation

GA4 and Shopify revenue never match exactly, and chasing a perfect match wastes days. Here is how to reconcile them properly, and how to tell a normal gap from a tracking bug that needs fixing.

8 min read

GA4 Shopify revenue not matching exactly is a fact of life, and the sooner you accept that, the less time you will waste chasing a match that does not exist. A gap is normal. The job is not to make the two numbers identical; it is to reconcile them, explain the gap, and tell the difference between a healthy difference and a real tracking bug that is costing you decisions. Here is how to do that, in order.

Why GA4 Shopify revenue not matching is normal

Before you assume something is broken, know the legitimate reasons the two will differ. Most of any GA4 Shopify discrepancy comes from these, and none of them is a bug.

  • Timezone. GA4 and your Shopify report can be set to different timezones, so the same day covers different hours. Orders near midnight land on different days.
  • Refunds and cancellations. Shopify nets these out of its sales reports; GA4 often still counts the original purchase event. So Shopify shows less.
  • Tax and shipping. Whether GA4 revenue includes them depends entirely on what your purchase event sends. Different definitions, different totals.
  • Currency. Multi-currency stores convert, and the conversion point and rate can differ between systems.
  • Sessions GA4 cannot see. Ad blockers and consent choices mean GA4 misses some orders the browser never reported, so GA4 tends to run a little under.
The goal is not a perfect match, which is impossible. It is a gap you can explain down to the last cause.

Reconcile in this order

Set an acceptable margin and align the basics

Decide what gap you will treat as healthy, single digits is reasonable. Then align the boring things first: same date range, same timezone, and confirm whether each system’s revenue includes tax and shipping. A surprising amount of the gap usually disappears right here.

Account for refunds

Pull refunds and cancellations for the period and adjust. If GA4 is higher than Shopify by roughly your refund volume, that is your answer, not a tracking problem.

Decide which direction the remaining gap runs

After the legitimate causes, look at what is left and which way it leans. GA4 far above Shopify, and GA4 far below Shopify, are two different problems with two different fixes. The direction is the diagnosis.

Build the habit, not the one-off fix

A reconciliation you can repeat monthly

  • Same date range and timezone in both systems
  • Confirmed whether each includes tax and shipping
  • Refunds and cancellations accounted for
  • Remaining gap inside your acceptable margin, and explainable
  • If GA4 runs high: checked for duplicate purchase events
  • If GA4 runs low: checked for missing events and tracking loss

Learning to reconcile GA4 Shopify numbers once feels like a chore. Doing it on a fixed cadence is what keeps you from making a month of ad decisions on numbers that quietly drifted, and from mistaking an ordinary analytics revenue mismatch for a crisis. That is the whole tracking and analytics discipline: not a perfect number, but a number you trust because you know exactly what is in it.

If your GA4 and Shopify numbers are far apart and you cannot close the gap with the normal causes, the underlying tracking bug is usually fast to find once you know where to look, which is exactly what a short tracking audit does.