GA4 Purchase Event Parameters: What's Required, What's Recommended
The GA4 purchase event looks simple, but the parameter requirements are strict. Missing required parameters causes silent failures, the event fires, but revenue data is incomplete or wrong. Missing recommended parameters limits your reporting depth in ways that only become apparent months later.
Required parameters
- transaction_id: A unique identifier for each order. This is the most important parameter for deduplication. GA4 uses it to detect and suppress duplicate purchase events. Without a unique transaction_id on every purchase, duplicate events will inflate your revenue indefinitely. Use your backend order ID, not a session or timestamp.
- value: The total order value. This should reflect the actual amount charged to the customer, typically excluding tax unless your reporting convention includes it. Always pass as a number, not a string. A common mistake is passing (string) instead of (number), which causes GA4 to record zero revenue.
- currency: ISO 4217 currency code (e.g., "GBP", "USD", "EUR"). If omitted, GA4 cannot report revenue correctly for properties set to a different currency. Required for accurate multi currency reporting.
Recommended parameters that unlock reports
- items: The items array is technically optional for the purchase event to fire, but without it you have zero product level data. Every purchase event should include a full items array with item_id, item_name, price, quantity, and item_category for each product. This powers product performance reports, funnel analysis, and category level attribution.
- coupon: If your store uses discount codes, pass the coupon code applied to the order. This enables revenue by coupon analysis directly in GA4 without needing BigQuery.
- shipping and tax: These split out the non product components of the order total. Passing them separately lets you report net product revenue (value minus shipping minus tax) accurately.
How to verify your implementation
Enable GA4 DebugView and complete a test purchase. In DebugView, click the purchase event and verify: transaction_id is a unique order ID (not "undefined" or a timestamp), value is a number, currency is set, and the items array contains at least one product object.
Check that item_id and item_name are populated and that price is a number.
Then cross reference revenue in GA4's E-commerce Overview report against your backend.
If the numbers diverge by more than 5 to 8%, suspect missing events on certain pages, duplicate event firing, or currency handling issues.
Ready to audit your GA4 property?
Run a full GA4 audit in under 10 minutes. Free to start.
Start Free Audit