GA4 ecommerce events without items: how to find them in the browser and fix them
An ecommerce event can reach GA4 with its value and currency and still be missing the products. Seeing an outgoing request does not establish that GA4 counted the event or received usable product data. It is easy to miss because nothing looks broken until someone opens an item report.
1. What Google asks for
In Google's reference for recommended events, items is a required parameter of
view_item, add_to_cart, begin_checkout and purchase. Each item needs
at least an item_id or an item_name. If you send value, currency is
required too, and value should be the sum of price × quantity of the items, without shipping or tax.
2. How to see it in the browser
- Open DevTools, go to the Network tab and filter by
collect. - Go through the step you want to check (product page, add to cart, checkout, purchase).
- For a request sent to a
/g/collectpath, inspect both the URL parameters and the POST body in Payload. Identify the event byen; a batched request can contain several events. - Look for
pr1,pr2… Each one is an item, with fields such asid,nm(name),pr(price) andqt(quantity) separated by~, for examplepr1=idSKU-1~nmT-shirt~pr59.9~qt1. For that event, check all product parameters (pr1,pr2, and so on). The absence ofpr1alone is not enough to conclude that no items were sent.
Check each step separately: it is common for the product page and the cart to be right and for one step, often the checkout, to lose the items.
3. Usual causes
- A data layer push written by hand for one step that copies the value and currency but not the
itemsarray. - Stale ecommerce data can hide the problem. Clear the previous object with
dataLayer.push({ ecommerce: null }), then push the current event with its own completeecommerce.itemsarray. - The GA4 Event tag does not include the ecommerce parameters. Either map them explicitly, or use More Settings → Ecommerce → Send Ecommerce data, with Data Source set to Data Layer.
- The tag reads the wrong variable, for example an items variable from another data layer key, or a push that happens after the tag has already fired.
4. Fix and check again
Fix the push or the tag for the step that lost the items and repeat the same journey. A useful habit is to write the requirement down once, in a tracking plan, so the check is the same every time (see how to write a tracking plan as a CSV). For the purchase in particular, also check the order ID and that each order is sent once (see how to check the GA4 purchase event and duplicate purchase events in GA4).
Checklist
view_item,add_to_cart,begin_checkoutandpurchaseeach carry product data.- Every item has an ID or a name.
- If
valueis sent, it matches the items, excludes shipping and tax, and has an event-levelcurrency. - The ecommerce object is cleared before each ecommerce push.