GA4 ecommerce event reference
GA4's ecommerce events form a defined funnel — view_item, add_to_cart, begin_checkout, add_payment_info, purchase — and each carries an items array alongside event-level parameters. The one that decides everything downstream is purchase, which needs transaction_id, value, currency and items to be usable: without transaction_id GA4 cannot deduplicate a refreshed confirmation page, and without currency it assumes your property default and silently misreports multi-currency revenue.
Free30 minutesNo obligation
GA4 ecommerce events · what breaks
Where teams get this wrong — GA4 ecommerce events
- 01
Omitting transaction_id on purchase
GA4 deduplicates on it. Without it, a refreshed confirmation page is a second purchase.
- 02
Sending value without currency
GA4 falls back to the property default. On a multi-currency store that quietly mixes amounts.
- 03
Building a custom event taxonomy
GA4's reports are built around the recommended event names. Custom names lose the built-in reporting entirely.
GA4 ecommerce events · the fix
What a correct implementation looks like — GA4 ecommerce events
Recommended event names used exactly
Lowercase snake_case, matching GA4's own list, so the standard reports work.
transaction_id on every purchase
The order ID from your own system, not a generated value.
Currency sent per transaction
From the order record, not a site-wide constant.
An items array on every ecommerce event
Consistent item_id across the funnel so paths can be followed.
GA4 ecommerce events · architecture
The events, and what each one has to carry
The funnel in order. The parameters listed are the ones whose absence causes a known failure — not an exhaustive list of everything GA4 accepts.
- 1
view_item
Fired on a product page, with an items array. Feeds product performance reports and remarketing audiences.
- 2
add_to_cart / remove_from_cart
With items and quantity. The first genuine intent signal in the funnel.
- 3
begin_checkout
With items and value. Where checkout drop-off analysis starts.
- 4
add_payment_info / add_shipping_info
Optional but valuable — they split a single checkout step into stages you can actually diagnose.
- 5
purchase
transaction_id, value, currency and items. The one that must be right. transaction_id is what deduplicates it.
- 6
refund
With the same transaction_id. Send it or reported revenue only ever increases.
GA4 ecommerce events · diagnose
Common mistakes and how to validate each — GA4 ecommerce events
Ordered by how often we find them. Each one has a specific check rather than a general instruction to be careful.
- 01
No transaction_id
Check a live purchase payload for the field. A refreshed confirmation page proves the consequence in seconds.
- 02
Currency hard-coded
Place a test order in a second currency and read the payload. This is the most common multi-currency fault.
- 03
Inconsistent item_id between funnel steps
Compare view_item and purchase payloads for the same product. They should carry the same identifier.
- 04
Value includes tax on one event and not another
Compare begin_checkout and purchase for the same order. Pick a convention and apply it to both.
- 05
refund never implemented
Issue a real refund and check whether anything arrives. Usually nothing does.
GA4 ecommerce events · prove
How to prove your implementation is right — GA4 ecommerce events
Against your own records and a live payload, not against a preview screen.
Source of truth
your store's order records, matched on transaction_id
- A live purchase payload captured and read field by field.
- transaction_id matching your store's order ID exactly.
- Currency correct on an order placed in a second currency.
- A real refund confirmed arriving with the same transaction_id.
- Checked on a live conversion, not in preview mode.
- Reconciled over a fully closed window, matched per record.
- Re-checked 30 days later.
GA4 ecommerce events · free audit
What we check in the free audit
- No transaction_id
- Currency hard-coded
- Inconsistent item_id between funnel steps
- Value includes tax on one event and not another
- refund never implemented
Checked against
your store's order records, matched on transaction_id
Free30 minutesNo obligation
GA4 ecommerce events · when not to buy
What this reference deliberately leaves out — GA4 ecommerce events
Stated openly, because a reference that's silent about its own gaps is the dangerous kind.
- This isn't every parameter GA4 accepts. It's the ones whose absence causes a failure we've actually diagnosed on client accounts.
- Item-scoped parameters beyond item_id, item_name, price and quantity are omitted deliberately — they're useful and their absence doesn't break anything.
- GA4's non-ecommerce recommended events are a separate list and aren't covered here.
- Vendor documentation is the authority, not this page. Where the two disagree, the vendor is right and we'd like to know so we can correct it.
- Parameter names and behaviour change. Anything here is accurate as we last verified it; verify against the current documentation before you rely on it for a build.
GA4 ecommerce events · what we deliver
The checklist — GA4 ecommerce events
purchase carries transaction_id, value, currency and items
All four. Any missing one causes a specific, known failure.
item_id is consistent across the funnel
The same identifier from view_item through to purchase.
value excludes or includes tax and shipping consistently
Either is defensible. Inconsistency between events isn't.
refund is implemented
Almost never is, which is why reported revenue only climbs.
Event names match GA4's recommended list
Exact spelling and case.
Pricing
Pick the package that fits your ad spend
Browser-side starter
$400One-time fee · lifetime ownership
Repairs and verifies your existing browser-side setup against this reference, on a live conversion.
- Implementation checked against the spec
- Verified on a live conversion
- Reconciled against your own records
- Written handover
1st-party server-side
Recommended$800One-time fee · most popular
Money events sent from your own records through a first-party container on your subdomain, built to this specification.
- First-party server container on your own subdomain
- Events from your records, not the browser
- Deduplicated on a shared event ID at every destination
- First-party cookies beyond Safari's 7-day cap
- 95%+ accuracy and 8+ Meta EMQ, guaranteed in writing
Full 1st-party stack
$1,800One-time fee · lifetime ownership
Every paid channel server-side plus the offline loop, documented to this standard.
- Everything in 1st-party server-side
- Pinterest, Snapchat, Reddit and LinkedIn CAPI
- CRM and offline conversion loop
- Refunds and cancellations corrected wherever each platform allows it
- Monitoring so the next break surfaces in days
FAQ
GA4 ecommerce events questions, answered
GA4 can't deduplicate. A customer refreshing the confirmation page produces a second purchase, and so does a bookmarked thank-you page opened later.
Either convention is defensible. What matters is consistency across events and that you document which you chose, so the reconciliation makes sense.
You can, and you'll lose GA4's built-in ecommerce reports. The recommended names exist because the reporting is built around them.
If you take returns, yes. Without it, reported revenue only ever climbs and diverges from your books by your entire refund rate.
Free · 30 min
Have your GA4 ecommerce events checked
Free30 minutesNo obligation
