WooCommerce and Google Analytics: Reconcile Revenue
Google Analytics will not agree with WooCommerce and should not be forced to. Find the causes, compare by month, and track the gap as a percentage.
Google Analytics revenue and WooCommerce net sales will not match, and the useful response is to explain the gap rather than close it. Treat WooCommerce as the reference, line up the measure and the dates, then track the difference as a percentage each month. A steady gap is background. A moving gap is the thing to investigate. This post lists the causes that are specific to WooCommerce and a monthly method for tracking them.
Why they differ: the WooCommerce-specific causes
- Tracking that did not fire. Consent banners, ad blockers and browsers that limit tracking mean some orders never reach GA4. This is usually the largest piece and it cannot be recovered afterward.
- Purchase events that depend on the thank-you page. Many WooCommerce setups fire the purchase event when the order-received page loads. A customer who closes the tab after paying on an external gateway, or whose payment confirms later, may never load it. Staff-created orders and orders from other plugins do not load it at all.
- Repeated events. A reload of the same thank-you page can send the purchase twice, which pushes GA4 above WooCommerce.
- Refunds. WooCommerce Analytics counts a return on the refund date. GA4 only knows about a refund if a refund event is sent, which many setups skip.
- Shipping and tax. WooCommerce net sales leaves both out. A GA4 purchase value may include them. The GA4 revenue metric in Quiriz is total revenue in the property currency, which includes purchases, subscriptions and ad revenue, so check it against the right WooCommerce measure.
- Test orders. Orders placed while setting up payment gateways can be tracked in GA4 and sit in WooCommerce in a status you would not count.
- Timing and date type. The GA4 property has its own time zone. WooCommerce Analytics may be set to date paid, and a new store defaults that way, while Quiriz reads orders by date created. An order near midnight or month-end can sit in a different month in each system.
The same problem on a Shopify store is covered in Shopify and Google Analytics, and for conversion counts, why your conversions do not match Shopify.
The monthly reconciliation
Keep a small table and fill it in once a month:
Month Woo orders GA4 purchases Woo net sales GA4 revenue Gap % (example layout only; fill in from your own reports)
Start with order counts. Orders are unambiguous, while revenue depends on definition. If order counts differ by about the same percentage as revenue, the tag is the cause and the definitions line up. If counts match and revenue does not, you have a definition problem such as shipping or tax in the event value. If the two gaps differ widely, look for duplicate events or missing high-value orders.
Express the gap as a percentage of the WooCommerce figure. A gap in currency units grows with the business and looks like a worsening problem when it is not.
Investigate changes, not the gap. A new theme, a consent banner update, a payment gateway that redirects off-site, or a plugin swap each move the gap on a date you can usually identify.
Reading a gap (illustrative numbers)
Suppose for five months WooCommerce shows 400 counted orders and GA4 shows between 360 and 372 purchases, a stable gap of 7 to 10 percent. In month six GA4 shows 310. WooCommerce orders are normal, so demand did not change. Something about measurement did. Check what changed: a payment gateway switched to an external page, a caching plugin that now serves the thank-you page from cache, or a consent banner update. The date the gap moved is usually the date the change shipped. These numbers are invented to show the method, not a benchmark.
Do not tune one system to match the other. If you do, you lose the signal that something broke.
Reading both side by side in Quiriz
The WooCommerce connector (in beta, read-only, refreshed daily) provides [WooCommerce] Sales, whose net sales matches WooCommerce Analytics > Revenue with returns on the refund date, and [WooCommerce] Orders, where a flag marks the statuses that are counted. The Google Analytics connector (also in beta) provides [Google Analytics] Daily traffic, with sessions, purchases, key events and revenue by day and default channel group. Ask both in one conversation: "WooCommerce orders and net sales by month this year" and "Google Analytics purchases and revenue by month this year". The two columns of the reconciliation table then sit together.
Two things the GA4 connector does not give you. It has no source or medium, only the default channel group. And key events are one total, not a count per event. For a store, purchases and revenue are the useful fields. If you want channel detail on the WooCommerce side, Orders carries utm_source, utm_medium and utm_campaign columns where WooCommerce recorded them, and they are blank otherwise. The general GA4 walk-through is in Google Analytics report, and the AI angle in GA4 AI.
Because Net sales and Orders are stored metrics in Company Context, the WooCommerce column is defined once and shows its work. When the gap moves, you know the reference column did not.
Honest limits
- No reconciliation recovers orders the GA4 tag never saw. The goal is a known, stable gap.
- Orders are read up to an order cap an admin sets, and only whole months are kept, so older months may be missing on a large store.
- Amounts stay in each order's currency, and GA4 revenue is in the property currency. Check currencies match before comparing.
- GA4 revenue in Quiriz is the property's total revenue, which can include more than store purchases.
- A key event total cannot tell you which event drove it.
Marketing teams working across both systems may find Quiriz for ecommerce useful, and ROAS questions follow from how to calculate ROAS by channel.
See both columns in one place
Connect WooCommerce and Google Analytics and ask for each by month. Free to start.
Try Quiriz free →