Ecommerce · Multi-currency · WooCommerce Illustrative scenario

GA4 Ecommerce for a Multi-Currency WooCommerce Store

Fixing the typical pattern where GA4 revenue diverges from WooCommerce admin.

Illustrative scenario. This page describes a common implementation pattern we encounter — not a specific client engagement. Real client case studies will be published as we receive permission to share them.
GA4 Ecommerce for a Multi-Currency WooCommerce Store
Server totals
tax + shipping included
Multi-currency
correctly tagged
Dedup
transaction_id check
~1 week
typical delivery
The Client

Common scenario for WooCommerce stores selling in multiple currencies


The Problem

What was broken

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

Strategy

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

What we built
  • 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
Stack
WooCommerce WordPress Google Tag Manager GA4 Custom PHP dataLayer

Results

What changed

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.

Free 48-hour tracking audit
Get Free Audit