WebmasterID logoWebmasterID
Data quality

Transaction ID deduplication

Ecommerce purchases are deduplicated on transaction_id. If a confirmation page reloads or a user refreshes, the same purchase event can fire twice; GA4 collapses repeated transaction_ids so revenue is not double-counted. The flip side: a missing transaction_id, or one reused across different orders, breaks dedup and corrupts revenue. This page explains the mechanism and its failure modes.

Verified against primary sources

How dedup works

GA4's recommended purchase event carries a transaction_id. When two purchase events share the same transaction_id, GA4 treats them as the same transaction and does not double-count revenue or items for that id within the dataset. This protects against the most common cause of inflated ecommerce numbers: confirmation-page reloads and back-button revisits.

When dedup fails

Dedup only works if the id is present and unique per order. Two failure modes dominate. First, a missing or empty transaction_id means GA4 cannot match duplicates, so every refresh adds revenue. Second, a reused id — e.g. a hard-coded test value, or an id scoped per-day rather than per-order — makes genuinely different orders collapse into one, undercounting.

Server-side purchase tracking reduces refresh duplication because the event fires from the backend on order completion rather than on a reloadable page.

How it appears in analytics and logs

Duplicate purchase rows that still sum to one order mean dedup worked on transaction_id; inflated revenue from refreshes means the id was absent or not stable per order.

Diagnostic use case

Explain why a refreshed order-confirmation page did not double your revenue (dedup worked), or why revenue looks inflated (transaction_id missing or non-unique).

What WebmasterID can help detect

WebmasterID records purchase/conversion events first-party with your order reference, so you can verify each order id appears once and spot duplicates before they inflate revenue.

Common mistakes

Privacy and accuracy notes

transaction_id should be an order reference, never an email or customer identifier. Keep personal data out of the parameter. This page is educational, not legal advice.

Related pages

Sources and verification notes

Last reviewed 2026-06-24. Facts are checked against primary/official sources where available; uncertain specifics are marked “Data not yet verified” rather than guessed.