Skip to main content

GA4 Item Funnel

💎Premium Feature

This module is available exclusively for Premium users.

The ga4_item_funnel module processes GA4 e-commerce data to create datasets focused on item-level performance throughout the buying journey.

It transforms nested event and item data into structured funnels and attribution-ready outputs, showing how users interact with individual products across steps such as view_item_list, select_item, view_item, add_to_cart, begin_checkout, and purchase.

Functional Overview and Business Value​

  • Product performance optimization: Identify products that are frequently viewed but rarely added to cart versus products that convert strongly once discovered.
  • Funnel bottleneck detection: Pinpoint where user drop-off happens for specific product lines, brands, or categories.
  • Item-list attribution: Measure which lists (for example Search Results, Related Products, Summer Sale) drive engagement and sales.
  • Customizable insights: Tailor reporting with optional item and session drilldowns.

Attribution Models​

Item-list attribution is based on item list impressions and supports:

  • First: Credits the first list where an item was seen in the session.
  • Last: Credits the most recent list where an item was seen in the session.

This enables attribution even when later events (like purchase) do not include list parameters.

Output Table Descriptions​

The module produces three output tables for different analysis needs.

ga4_item_funnel_sessions​

  • Description: Granular, intermediate-style reporting table.
  • Granularity: 1 row per item per session.
  • Functionality: Aggregates e-commerce item events at session + item level and includes base session attributes plus list attribution arrays.

ga4_item_funnel_report​

  • Description: Aggregated daily funnel reporting table.
  • Granularity: Grouped by session_date, enabled item dimensions, and enabled drilldowns.
  • Functionality: Primary BI table with event/session/user funnel metrics and purchase revenue/quantity.

ga4_item_list_attribution_report​

  • Description: Aggregated reporting table focused on item-list performance.
  • Granularity: Grouped by session_date and configured item-list dimensions.
  • Functionality: Provides first-touch and last-touch list attribution metrics for downstream engagement and sales.

Technical Configuration (config.json)​

The module uses a single configuration file: includes/custom/modules/ga4_item_funnel/config.json

Example:

{
"version": 1,
"enabled": true,
"dependencies": ["ga4"],
"drilldowns": {
"channel_group": true,
"device_category": true,
"is_new_session": true
},
"listAttribution": {
"saveListInformation": true,
"dimsToStore": ["item_list_name", "item_list_id", "item_list_index"],
"pickDimsFromTheseEvents": ["view_item_list", "select_item", "view_item"]
},
"itemDrilldowns": {
"item_id": true,
"item_name": true,
"item_brand": false,
"item_variant": false,
"item_category": true,
"item_category2": false,
"item_category3": false,
"item_category4": false,
"item_category5": false,
"affiliation": false
},
"itemParamsCustom": [
{ "name": "item_params_custom.item_stocklevel", "renameTo": "stock" }
],
"sessionDimensions": [
{ "name": "session_params_custom.page_language", "renameTo": "language" },
{ "name": "geo.country" }
]
}

Configuration Options​

Essential Settings​

SettingDescriptionExample
enabledEnable/disable the moduletrue or false
versionConfiguration version (must remain 1)1
dependenciesRequired module dependencies["ga4"]

Session-Level Drilldowns​

Configure which session dimensions to include:

"drilldowns": {
"channel_group": true,
"device_category": false,
"is_new_session": false
}

Available Options:

  • channel_group: Adds last_non_direct_traffic_source.default_channel_grouping column
  • device_category: Adds device segmentation (desktop, mobile, tablet, smart tv)
  • is_new_session: Enables new vs. returning user analysis using ga_session_number = 1 logic

List Attribution Settings​

Configure extraction and stateful tracking of item-list properties:

"listAttribution": {
"saveListInformation": true,
"dimsToStore": ["item_list_name", "item_list_id", "item_list_index"],
"pickDimsFromTheseEvents": ["view_item_list", "select_item", "view_item"]
}
  • saveListInformation (boolean): Enables list tracking and attribution logic.
  • dimsToStore (array of strings): List dimensions to persist (item_list_name, item_list_id, item_list_index).
  • pickDimsFromTheseEvents (array of strings): Events scanned to capture list metadata for later funnel events.

Item Dimension Drilldowns​

Toggle standard item dimensions on/off:

"itemDrilldowns": {
"item_id": true,
"item_name": true,
"item_brand": true,
"item_variant": true,
"item_category": true,
"item_category2": true,
"item_category3": true,
"item_category4": true,
"item_category5": true,
"affiliation": true
}
Consistency Matters

Disable item dimensions that aren't filled consistently across all e-commerce events, as they can "break" funnel analysis when drilling down. For example, if view_item_list has no item_variant but add_to_cart does, consider disabling item_variant.

Custom Item Parameters​

Include custom item parameters from your configuration:

"itemParamsCustom": [
{ "name": "item_params_custom.item_stocklevel", "renameTo": "stock" }
]
Parameter Names

Use fully qualified source fields that exist in your available item parameters and map them with renameTo when needed.

Example:

[
{ name: "item_params_custom.item_stocklevel", renameTo: "stock" }
]

Additional Session Dimensions​

Add any column from the ga4_sessions table:

"sessionDimensions": [
{ "name": "session_params_custom.page_language", "renameTo": "language" },
{ "name": "geo.country" }
]
  • name: Valid column name from ga4_sessions table
  • renameTo: Optional renamed column in output (auto-sanitized if omitted)

Table Structures​

ga4_item_funnel_sessions​

Granularity: 1 row per item per session with aggregate metrics

ColumnDescription
session_dateDate of the session (partitioning column) - based on start date of the session
session_start_timestamp_utcUTC timestamp when the session started
session_start_timestamp_localLocal datetime when the session started (converted using LOCAL_TIMEZONE variable)
is_finalIndicates if the data is final or subject to change (based on 72h window)
session_idUnique identifier for the session - contains only non-NULL values (cluster column)
ga_session_numberGoogle Analytics session number for the user
user_pseudo_idPseudonymous identifier for the user
user_idUnique identifier for the user - last non-null value of the session
property_idGoogle Analytics property ID
platformThe data stream platform (Web, IOS or Android) from which the event originated
Item Details
item.item_idUnique identifier for the item
item.item_nameName of the item
item.item_brandBrand of the item
item.item_variantVariant of the item (e.g., size, color)
item.item_categoryPrimary category of the item
item.item_category2Secondary category of the item
item.item_category3Tertiary category of the item
item.item_category4Fourth-level category of the item
item.item_category5Fifth-level category of the item
item.price_in_usdItem price converted to USD
item.priceItem price in local currency
item.quantityQuantity of the item in the event
item.item_revenue_in_usdRevenue from this item converted to USD
item.item_revenueRevenue from this item in local currency
item.item_refund_in_usdRefund amount for this item converted to USD
item.item_refundRefund amount for this item in local currency
item.couponCoupon code applied to this item
item.affiliationAffiliation or partner associated with the item
item.location_idPhysical location identifier where the item was sold
item.item_list_idIdentifier for the list where the item appeared
item.item_list_nameName of the list where the item appeared
item.item_list_indexPosition of the item in the list
item.promotion_idIdentifier for the promotion applied to the item
item.promotion_nameName of the promotion applied to the item
item.creative_nameName of the creative/ad that promoted the item
item.creative_slotSlot position of the creative/ad
E-commerce Event Totals
item_totals.add_payment_infoNumber of times payment info was added for this item in the session
item_totals.add_shipping_infoNumber of times shipping info was added for this item in the session
item_totals.add_to_cartNumber of times this item was added to cart in the session
item_totals.add_to_wishlistNumber of times this item was added to wishlist in the session
item_totals.begin_checkoutNumber of times checkout was initiated with this item in the session
item_totals.purchaseNumber of times this item was purchased in the session
item_totals.refundNumber of times this item was refunded in the session
item_totals.remove_from_cartNumber of times this item was removed from cart in the session
item_totals.select_itemNumber of times this item was selected in the session
item_totals.select_promotionNumber of times a promotion for this item was selected in the session
item_totals.view_cartNumber of times cart containing this item was viewed in the session
item_totals.view_itemNumber of times this item was viewed in the session
item_totals.view_item_listNumber of times a list containing this item was viewed in the session
item_totals.purchase_quantityTotal quantity of this item purchased in the session
item_totals.item_revenueTotal revenue generated by this item in the session

ga4_item_funnel_report​

Granularity: Daily aggregates by item and configured dimensions

ColumnDescription
session_dateDate of the session used for aggregation (partitioning column for performance optimization)
property_idGoogle Analytics property ID
platformThe data stream platform (Web, IOS or Android) from which the events originated
is_finalIndicates if the data is final or subject to change (based on 72h window)
Dynamic Item Dimensions (conditionally included)
item.item_idUnique identifier for the item (included if itemDrilldowns.item_id = true)
item.item_nameName of the item (included if itemDrilldowns.item_name = true)
item.item_brandBrand of the item (included if itemDrilldowns.item_brand = true)
item.item_variantVariant of the item (included if itemDrilldowns.item_variant = true)
item.item_categoryPrimary category of the item (included if itemDrilldowns.item_category = true)
item.item_category2Secondary category of the item (included if itemDrilldowns.item_category2 = true)
item.item_category3Tertiary category of the item (included if itemDrilldowns.item_category3 = true)
item.item_category4Fourth-level category of the item (included if itemDrilldowns.item_category4 = true)
item.item_category5Fifth-level category of the item (included if itemDrilldowns.item_category5 = true)
item.affiliationAffiliation or partner associated with the item (included if itemDrilldowns.affiliation = true)
item.{custom_param_name}Custom item parameters as specified in itemParamsCustom array - field names match the configured parameter names
Session-Level Drilldowns (conditionally included)
default_channel_groupingDefault channel grouping for traffic attribution (included if drilldowns.channel_group = true)
device_categoryDevice category (Desktop, Mobile, Tablet, Smart TV) (included if drilldowns.device_category = true)
is_new_sessionBoolean indicating if this was the user's first session (included if drilldowns.is_new_session = true)
Custom Session Dimensions (dynamically added)
{custom_dimension_name}Additional dimensions from ga4_sessions table as specified in sessionDimensions configuration array - column names determined by renameTo value or auto-sanitized from original field name
Comprehensive Funnel Metrics
item_totals.events.{event_name}Total count of each e-commerce event type for this item (e.g., add_to_cart, purchase, view_item)
item_totals.sessions.{event_name}Count of unique sessions where each e-commerce event type occurred for this item
item_totals.users.{event_name}Count of unique users who performed each e-commerce event type for this item
item_totals.purchase_quantityTotal quantity of this item purchased across all purchase events
item_totals.item_revenueTotal revenue generated by this item across all purchase events
Dynamic Schema

ga4_item_funnel_report adapts its schema based on configuration:

  • Item dimensions: Only enabled itemDrilldowns appear in the item struct
  • Custom item parameters: Fields from itemParamsCustom array are dynamically added
  • Session drilldowns: Only enabled drilldowns create additional columns
  • Custom session dimensions: Additional columns based on sessionDimensions configuration
  • Event metrics: All standard e-commerce events are tracked (13 event types total)

ga4_item_list_attribution_report​

Granularity: Daily aggregates by item-list dimensions and configured drilldowns

ColumnDescription
session_dateSession date used for aggregation
property_idGoogle Analytics property ID
platformData stream platform (Web, IOS, Android)
is_finalIndicates if data is final (72h window logic)
item_list.item_list_nameItem list name (if enabled in listAttribution.dimsToStore)
item_list.item_list_idItem list ID (if enabled in listAttribution.dimsToStore)
item_list.item_list_indexItem list index (if enabled in listAttribution.dimsToStore)
attribution_first.events.{event_name}Event counts attributed to first list impression of the item in-session
attribution_last.events.{event_name}Event counts attributed to most recent list impression of the item in-session
attribution_first.item_revenueRevenue attributed with first-touch list model
attribution_last.item_revenueRevenue attributed with last-touch list model

Looker Studio Template + Calculation Examples​

tip

We created a free-to-use Looker Studio template that was specifically designed to work with the GA4Dataform modules. Feel free to copy it and adapt it to your needs! You can find it here.

When connecting ga4_item_funnel_report to your BI tool, here are useful calculated metrics:

Event-Based Metrics​

  • sum(item_totals.events.add_to_cart): Total add-to-cart events for item
  • sum(item_totals.events.purchase): Total purchase events for item

Session-Based Metrics​

  • sum(item_totals.sessions.purchase): Sessions where item was purchased
  • sum(item_totals.sessions.view_item): Sessions where item was viewed

User-Based Conversion Rates​

  • sum(item_totals.users.purchase) / sum(item_totals.users.view_item): User-based purchase-to-detail rate
  • sum(item_totals.users.add_to_cart) / sum(item_totals.users.view_item): User-based view-to-cart rate

Revenue Metrics​

  • sum(item_totals.item_revenue): Total item revenue
  • sum(item_totals.purchase_quantity): Total units sold
  • sum(item_totals.item_revenue) / sum(item_totals.purchase_quantity): Average selling price

Common Use Cases​

  1. Product Performance Analysis: Identify top and bottom-performing items across the funnel
  2. Category Optimization: Compare performance across product categories
  3. List Attribution Analysis: Compare first-touch vs. last-touch list impact on conversions
  4. Inventory Planning: Use purchase quantities and revenue data for demand forecasting
  5. Personalization Insights: Analyze item performance by user segments
  6. A/B Testing: Compare item performance across different user experiences