GA4 Ecommerce for a Multi-Currency WooCommerce Store
Fixing the typical pattern where GA4 revenue diverges from WooCommerce admin.
Common scenario for WooCommerce stores selling in multiple currencies
The Problem
Stock GA4 plugins on WooCommerce ship with three common bugs: purchase fires before tax/shipping are calculated, multi-currency values get sent in USD regardless of locale, and a thank-you page refresh re-fires the purchase event.
Our Approach
Replace the stock GA4 plugin with a GTM-based dataLayer pattern. Use server-side totals from the WC Order object, pushed once on order_received.
Implementation
- 1 Disable WooCommerce's built-in GA4 integration
- 2 Add a custom dataLayer.push on the thankyou page reading the PHP $order object (final total, tax, shipping, currency)
- 3 Configure GTM to fire purchase only when the transaction_id hasn't been seen before (localStorage dedup)
- 4 Map currencies with the proper currency code parameter per locale
- 5 Add view_item_list, view_item, add_to_cart, begin_checkout, add_payment_info with item-level data
Results
GA4 revenue lines up with WooCommerce admin once tax and shipping are included. Multi-currency reporting works across the locales the store sells in. Double-counted purchases stop happening on page refreshes.
Ready to get results like these?
Start with a free audit — see what's broken in your setup.