You launch a campaign, conversions look strong, and then finance pulls the actual revenue numbers. GA4 is showing almost double what actually came in. Revenue double counting is one of the most damaging GA4 data quality issues — and one of the most common. Here's why it happens and how to fix it.
Duplicate Tags Are the Most Common Cause
The most frequent root cause: the GA4 purchase event is firing twice for every transaction. This happens when both a GA4 Configuration tag in GTM and a GA4 Event tag are both configured to fire on the order confirmation page — effectively sending the purchase event twice. It can also happen when a gtag.js snippet is hardcoded into the page and GTM is also deployed, causing two separate tag instances.
The diagnosis: open Chrome DevTools → Network tab → filter for google-analytics.com/g/collect → complete a test purchase. If you see two requests with en=purchase within seconds of each other, you have duplicate firing.
The Thank You Page Reload Problem
If your order confirmation page can be refreshed — and the purchase event fires on every load rather than only on the first — every customer who reloads their confirmation page generates a duplicate transaction. This is a structural issue in how the conversion event is triggered. The fix is to fire the purchase event only once, typically by setting a session storage flag on first load and checking for it before firing.
Cross-Domain and Iframe Issues
If your checkout is hosted on a subdomain or third-party domain (common with Shopify, WooCommerce hosted checkouts, or embedded payment flows), and cross-domain measurement isn't configured correctly, GA4 may be receiving the purchase event from both the parent domain and the checkout domain. The result is a single transaction counted twice across two sessions.
Using Transaction IDs for Deduplication
GA4 uses the transaction_id parameter to deduplicate purchase events at the property level — if two purchase events arrive with the same transaction ID within a short window, GA4 should suppress the duplicate. However, this deduplication is not guaranteed and has known limitations. The better fix is always to prevent duplicate firing at the source rather than relying on GA4's deduplication logic.
To verify: go to Explore → create a free-form report with Transaction ID as a dimension and Event Count as a metric, filtered to purchase events. Any transaction ID appearing more than once is a duplicate.
How to Fix Revenue Double Counting
- Audit your GTM container for duplicate GA4 purchase tags — check both Configuration tags and Event tags for overlapping triggers
- Add a
dataLayer.pushflag on first confirmation page load and gate the purchase event behind it - If using a third-party checkout, audit cross-domain measurement and ensure only one domain is sending the purchase event
- Validate
transaction_idis being passed correctly on every purchase event
GA4 Health Check's Data Integrity module flags duplicate event patterns automatically. Run an audit to see if double counting is affecting your revenue figures.
