GA4 E-commerce Tracking: The Definitive Checklist
Complete checklist for GA4 enhanced ecommerce tracking. Covers every event from product impression to purchase, with dataLayer examples.
If you run an online store, GA4's enhanced ecommerce tracking is the most important analytics feature you'll configure. Get it wrong, and your revenue data, product performance, and funnel analysis will all be unreliable.
The Complete Event Funnel
Here's every ecommerce event GA4 expects, in order:
1. view_item_list (Category/Search Pages)
dataLayer.push({ event: 'view_item_list', ecommerce: { item_list_id: 'category_mens_shoes', item_list_name: "Men's Shoes", items: [{ item_id: 'SKU_123', item_name: 'Running Shoe Pro', price: 129.99, item_brand: 'BrandName', item_category: 'Shoes', index: 0 }] } });javascript
2. select_item (Product Click)
Fire when a user clicks a product from a list.
3. view_item (Product Detail Page)
Every product page view must push this event with full item details including price, brand, category, and variant.
4. add_to_cart / remove_from_cart
Track every cart modification. Include the value and currency parameters.
5. begin_checkout
Fires when the user initiates checkout. Include the full cart contents.
6. add_shipping_info / add_payment_info
Track each checkout step separately for funnel analysis.
7. purchase (The Critical One)
dataLayer.push({ event: 'purchase', ecommerce: { transaction_id: 'T_12345', value: 259.98, tax: 23.40, shipping: 5.99, currency: 'USD', coupon: 'SUMMER10', items: [/* full items array */] } });javascript
Critical checks for the purchase event:
- `transaction_id` must be unique (prevents duplicate counting)
- `value` should include tax and shipping (or not — be consistent)
- `currency` must be a valid ISO 4217 code
- `items` array must match what was actually purchased
8. refund
Don't forget refund tracking — without it, your revenue reports will be overstated.
Common Ecommerce Tracking Mistakes
- Missing currency parameter — Revenue shows as 0 in reports
- Duplicate purchase events — Fire purchase only once per order
- Inconsistent item IDs — Use the same `item_id` across all events
- No clear ecommerce object — Always push `{ecommerce: null}` before a new ecommerce push to clear stale data
Validate Your Setup
Use GA4 DebugView to watch events fire in real-time. Check that:
- Every item has item_id, item_name, and price
- Purchase value matches the actual order total
- No duplicate transaction_id values
Or let us check for you — run an ecommerce tracking audit →
Check your GA4 implementation
Run a free AI-powered audit to see how your tracking stacks up.
Start Free Audit