Skip to main content

🟣 Phase 3 β€” OptionalΒ Β·Β Internal promotion analytics.

view_promotion & select_promotion

When to push​

  • view_promotion: when a promotional banner / internal push appears (homepage hero, sale ribbon, etc.).
  • select_promotion: when the user clicks it.

view_promotion example​

window.dataLayer.push({ ecommerce: null });
window.dataLayer.push({
event: 'view_promotion',
ecommerce: {
items: [
{
promotion_id: 'sale_summer_2026',
promotion_name: 'Summer Sale -20%',
creative_name: 'hero_banner_summer_v1',
creative_slot: 'homepage_hero',
location_id: 'home_top'
}
]
}
});

select_promotion example​

Same shape, different event name:

window.dataLayer.push({ ecommerce: null });
window.dataLayer.push({
event: 'select_promotion',
ecommerce: {
items: [
{
promotion_id: 'sale_summer_2026',
promotion_name: 'Summer Sale -20%',
creative_name: 'hero_banner_summer_v1',
creative_slot: 'homepage_hero',
location_id: 'home_top'
}
]
}
});

Parameters​

ParameterRequired
promotion_idrequired*
promotion_namerequired*
creative_namerecommended
creative_slotrecommended β€” placement
location_idoptional

* At least one of the two.

Platforms​

PlatformNative event
GA4view_promotion / select_promotion
Metaβ€”
Google Adsβ€”

Multiple banners​

When several banners appear at once (e.g. 3 hero slots): either 3 separate view_promotion events or 1 event with 3 items.

Recommended: 3 separate events β€” easier to attribute later.

Pitfalls​

  • ❌ Pushing on every scroll β†’ use Intersection Observer: fire once when β‰₯ 50% visible.
  • ❌ Confusing with a product (view_item) β€” a promotion is a marketing asset, not a product.