All filters39
Implementation guide Updated

How to track purchases without duplicate conversions

A visit to an order-received page proves that someone opened a receipt, not that a new sale occurred. Count a verified order transition once, then connect it to analytics when measurement is permitted.

Three rules for trustworthy purchase counts

  • Define whether your conversion means an order submitted or payment confirmed.
  • Deduplicate by order and event type, across reloads, devices and delivery retries.
  • Use commerce records for order totals; analytics adds measured session and campaign context.

Define the business event

Keep order_submitted, payment_confirmed and receipt_opened separate. Choose the event that answers your business question; a submitted cash-on-delivery order is not collected revenue.

In WooCommerce, Pending payment is unpaid, Processing is paid and awaiting fulfillment, and On hold awaits payment confirmation. Use the store’s authoritative transition, rather than a URL match or thank-you message.

Use one owner and a durable key

Give each conversion a key such as store_id + event_type + order_id. Store it on the server and let a single integration own emission. A reload, emailed receipt or second browser must reuse that key without creating another conversion.

Browser storage can reduce repeat sends but does not survive every device or privacy setting. A purchased session tag can identify measured buying sessions; one tagged session may contain several orders, so tag counts are not exact order totals.

Make delivery retries safe

Keep eligibility and delivery separate. Record a pending event, send its stable key, and confirm delivery only after the destination acknowledges it. If a request times out, its result may be unknown: resolve that state or retry through a destination that deduplicates the same key.

Do not mark an order as successfully tracked merely because a script was rendered. If tracking is blocked or measurement is not permitted, keep the commerce record authoritative and show the analytics coverage gap. Server delivery must respect the same measurement permissions.

Configure the analytics goal

Change the goal from receipt-page visits to the verified purchase event or tag produced by your integration. Validate order access and event eligibility on the server; an order number or receipt URL alone is not authorization.

GA4 web-stream purchase deduplication uses transaction_id. Give each order a unique, nonempty ID without personal information. Other products have different deduplication contracts: check their API before assuming an event property prevents duplicates.

Reconcile totals and revenue

Compare distinct eligible order IDs with distinct acknowledged analytics events for the same time zone and business date. Report missing, duplicate and ineligible events separately. Use payment date for paid-sales reporting if that is your definition.

Agree on currency, tax, shipping and refund treatment before comparing revenue. Keep personal data and receipt access keys out of analytics payloads. Never force analytics totals to equal the store by tagging every receipt visit.

Test the failure cases

Deduplicate by order and event type, across reloads, devices and delivery retries.

Swipe or use arrow keys to view all columns.

TestExpected purchase resultWhat to inspect
First eligible checkoutOne event for one orderStable order key and delivery acknowledgment
Reload or reopen emailed receiptNo new purchaseNo second event or conversion tag
Two browser tabs or devicesStill one purchaseServer-side deduplication
Failed, draft or unpaid orderNo payment-confirmed eventThe selected business-event definition
Timeout followed by delivery retryOne acknowledged conversionSame key; no premature success flag
Tracking blocked or consent absentCommerce total remains validExplicit analytics coverage gap

A practical rollout

Use commerce records for order totals; analytics adds measured session and campaign context.

  1. 1Write the event definition and choose one integration owner.
  2. 2Test the six cases above with test orders; do not count them as production sales.
  3. 3Switch the goal, record the change date, and label the historical receipt-based series separately.
  4. 4Reconcile order IDs and acknowledged events daily for the first week.
  5. 5Review refunds and coverage before using the conversion rate for decisions.

Choose a web analytics platform

Primary sources

2026-09-30