Turning on ecommerce in GA4 is not a checkbox, and that trips up everyone coming from Universal Analytics. It is a set of specific events you have to send, with a strictly named items array. Here is how to set it up so the Monetization reports actually fill.
GA4 ecommerce is event-based
GA4 dropped the old Enhanced Ecommerce plugin model. Instead, ecommerce is a group of recommended events – view_item, add_to_cart, begin_checkout, add_payment_info, purchase, refund – each carrying an items array. Use the exact event and parameter names, because GA4 only routes them into Monetization reports when they match precisely.
The items array is the core
Every ecommerce event shares the same items structure, so getting that right once carries through the whole funnel:
gtag('event', 'add_to_cart', {
currency: 'USD',
value: 59.90,
items: [{
item_id: 'SKU_1',
item_name: 'Annual Plan',
item_category: 'Subscriptions',
price: 59.90,
quantity: 1
}]
});
The currency and value belong on the event, while product details live inside items. Miss currency on a purchase and revenue will not attribute.
Map events to the funnel
Send each event at the right moment so the shopping funnel lines up:
- view_item when a product page loads.
- add_to_cart on add, and view_cart when the cart opens.
- begin_checkout, then add_payment_info as the user progresses.
- purchase on the confirmation, with a unique transaction_id.
Do it through the data layer and GTM
The maintainable way is to have your platform push an ecommerce object to the data layer, then map it in Google Tag Manager to a GA4 event tag:
dataLayer.push({ ecommerce: null }); // clear previous
dataLayer.push({
event: 'purchase',
ecommerce: {
transaction_id: 'T_12345',
value: 59.90,
currency: 'USD',
items: [{ item_id: 'SKU_1', item_name: 'Annual Plan', price: 59.90, quantity: 1 }]
}
});
Clearing the ecommerce object before each push stops product data leaking from one event into the next.
Verify before you trust the reports
Ecommerce data has a habit of looking fine and being subtly wrong, so validate:
- Use DebugView to confirm each event carries a populated items array.
- Send a unique transaction_id on every purchase to avoid the double-counting trap.
- Reconcile GA4 revenue against your backend for a few days.
Turning on ecommerce in GA4 is not a switch, it is a set of exact, well-formed events built around the items array. Send the right event at each step, feed it through the data layer, and verify every one in DebugView before you believe a single revenue figure. Do that and the Monetization reports fill with numbers that match your actual sales.
Want a stronger data analyst role or a raise? Grab the FREE Product Analyst Playbook and get the exact roadmap to your next offer.
