The default GA4 setup only tracks page_view and a handful of auto-events — useless for an e-commerce funnel. Below are 12 events you need to configure manually if you actually want to optimise.
TL;DR — enable enhanced e-commerce, configure the 12 events below via GTM, mark purchase + add_to_cart + view_item as conversions. Total setup time: 1 working day.
The 12 events (in funnel order)
1. view_item_list
Fires when a user sees a product listing (category page, search results). Pass the array of items with name, id, price, position.
2. select_item
Fires on click of a product from the listing. Critical for analysing category-page conversion.
3. view_item
Fires when a product detail page loads. Should be a conversion goal.
4. add_to_cart
Fires when “Add to cart” is clicked. Should be a conversion goal.
5. view_cart
Fires when the cart page or drawer opens. Helps identify cart abandonment drops.
6. remove_from_cart
Fires when an item is removed from the cart. Sentiment signal — flagging UX issues.
7. begin_checkout
Fires when the checkout starts. Major funnel step.
8. add_shipping_info
Fires after shipping address is entered. Often the highest drop-off step.
9. add_payment_info
Fires when payment method is selected. Penultimate friction point.
10. purchase
Fires on successful order. Primary conversion goal. Pass transaction_id, value, items.
11. refund
Fires when a refund is processed (push from your backend). Lets you calculate true revenue.
12. generate_lead
For B2B or hybrid stores — fires on quote requests or contact form submissions.
Implementation via GTM
Use the GA4 Enhanced Ecommerce variable template in GTM. Push the dataLayer object on every page state change. Test in GA4 DebugView before pushing live.
Common mistakes
- Counting
page_viewon checkout as the conversion — misses people who left mid-flow. - Not setting
currencyin event params — GA4 silently drops the revenue value. - Missing
transaction_id— duplicate purchases inflate metrics.
Takeaways
Without these 12 events properly fired, GA4 is essentially a glorified page counter. Configure them once, validate in DebugView, and your data becomes actually useful for optimising the funnel.