dataLayer
Kixell Tag builds a normalized dataLayer compliant with the Google Analytics 4 e-commerce model and pushes it into window.dataLayer throughout the journey. These events then feed all of your tags (GA4, Google Ads, Meta, etc.) with no extra configuration in Google Tag Manager.
The purchase-journey events
| Event | Triggered when… |
|---|---|
view_item_list |
a product list is displayed (category, search results, carousel) |
select_item |
the user clicks a product in a list |
view_item |
a product page is viewed |
add_to_cart |
a product is added to the cart |
remove_from_cart |
a product is removed from the cart |
view_cart |
the cart is displayed |
begin_checkout |
the user enters the checkout |
add_shipping_info |
the shipping method is chosen |
add_payment_info |
the payment method is entered |
purchase |
the order is confirmed |
view_promotion / select_promotion |
a promotion is displayed then clicked |
search |
a search is performed |
sign_up / login / logout |
account creation, login, logout |
Structure of an item
Each product event carries an items array in the GA4 format:
ecommerce: {
items: [{
item_id: "REF-123",
item_name: "Organic cotton t-shirt",
price: 19.90,
quantity: 1,
item_brand: "My Brand",
item_category: "Clothing",
item_variant: "Blue / M",
item_list_id: "category_42",
item_list_name: "T-shirts",
index: 3
}]
}
The item_id sent depends on the product configuration of each platform (base field, prefix/suffix, combination) — see for example Google Analytics 4.
Product lists and listeners
To populate view_item_list and select_item correctly, Kixell Tag associates each list with an item_list_id and an item_list_name. The number of items reported is capped by the Maximum products in product list feedback setting (see GA4).
Detection also works with asynchronous loading (filters, pagination, sorting): the listeners and customizable selectors track products loaded dynamically. See DOM & event listeners.
Enrichment and custom events
- Server-side enrichment: a third-party module can complete the
itemsserver-side via theactionKixellTagEnrichItemshook, with the GA4 event (view_item,add_to_cart,purchase…) passed explicitly. - Custom events: you can push your own events to GA4 without touching GTM — see dataLayer and custom events.