Documentation Fundamentals

The view_promotion Event in Google Analytics 4 (GA4)

The view_promotion event in Google Analytics 4 (GA4) is used to track when a user sees a promotion—for example, a banner, hero slider, coupon teaser, or promotional tile.

This is valuable when you want to actually “measure” promotions: which campaigns are being seen, which are being clicked, and which ultimately lead to purchases? Combined with select_promotion, you can derive meaningful promo performance insights.

[SCREENSHOT: Homepage or category with visible promo banner (“Sale”, coupon, promotion) with clear design; ideally showing position/slot (e.g., top of hero).]

Implementation

The most important point about view_promotion: only track promotions that the user actually sees.

Especially on pages with multiple banners, sliders, or teasers, it’s not a good idea to simply send everything on the page as view_promotion. Better approaches:

  • only track when a promo element becomes visible in the viewport, or
  • at minimum, only track promotions in the initially visible area (above the fold).

Clean naming: ID, Name, Slot

Even though GA4 makes many promo parameters technically optional, you’ll only get truly meaningful reports if you consistently send at least the following:

  • promotion_id (stable ID, e.g., winter_sale_2026)
  • promotion_name (human-readable name)
  • creative_name (which creative/asset)
  • creative_slot (where on the page, e.g., home_hero_1, sidebar_banner_2)

This way, you can later see not just that a promotion worked, but also which placement and which creative.

dataLayer

javascript
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
    event: "view_promotion",
    ecommerce: {
        items: [{
            promotion_id: "winter_sale_2026",
            promotion_name: "Winter Sale 2026",
            creative_name: "hero_banner",
            creative_slot: "home_hero_1",
            location_id: "home"
        }]
    }
});

Common pitfalls

  • Too many impressions: If you track every promo on the page again on every scroll, CTRs and funnels quickly become unrealistic.
  • Rotating sliders: For sliders, you can decide whether to only track the first slide (usually sensible) or later slides as well—but only if they were actually visible (e.g., after X seconds or on swipe).
  • Inconsistent IDs/names: If you write promotion_id/promotion_name differently depending on the page/template, reporting becomes fragmented (and much ends up as “(not set)” or in separate rows). Make sure the same teaser is named consistently everywhere.