Track Upsells, Cross-Sells, and Post-Purchase Offers in GA4 | Adslytics | Adslytics

Enhanced Ecommerce Tracking How-To Guide

Tracking Upsells, Cross-Sells, and Post-Purchase Offers in Your Store

By Muhammad Farooq · March 3, 2026 · 5 min read
Tracking Upsells, Cross-Sells, and Post-Purchase Offers in Your Store

Why Upsell Tracking Is Often Missing

Standard ecommerce tracking records the purchase event once on the order confirmation page. If an upsell or cross-sell is offered after the initial purchase (post-purchase upsell flow, one-click upsell pages) and accepted, a second purchase event fires — but without careful implementation, it might reuse the same transaction_id (causing deduplication to drop it) or fire incorrectly.

Similarly, in-checkout cross-sells (order bumps) need to be included in the items array of the checkout events to be properly attributed.

In-Checkout Cross-Sells (Order Bumps)

An order bump is an additional item offered during checkout — "Add the extended warranty for £9.99." When a customer adds an order bump:

  • The add_to_cart event should fire for the bumped item
  • All subsequent checkout events (add_shipping_info, add_payment_info, purchase) should include both the original item AND the bumped item in the items array
  • The value parameter should reflect the total including the bump

This is straightforward if your data layer is rebuilt at each checkout step — all items in the cart at that moment, including the bump, are included.

Post-Purchase Upsell Flows

Post-purchase upsells (offered after the thank-you page, before the customer leaves) require a second purchase event with a new, unique transaction_id:

// WRONG: reusing the original transaction_id causes deduplication
transaction_id: "T-123"  // already sent on main purchase

// CORRECT: new unique ID for the upsell purchase
transaction_id: "T-123-UP1"  // or a completely new order ID from your backend

If your platform creates a new order ID for the upsell, use it. If the upsell is added to the existing order (order amended after placement), use the amended order ID with a suffix to distinguish from the original purchase event.

Identifying Upsell Revenue in GA4

Use the item_list_name parameter on upsell items to identify their origin:

items: [{
  item_id: "WARRANTY-1Y",
  item_name: "1-Year Warranty",
  price: 9.99,
  quantity: 1,
  item_list_name: "Post-Purchase Upsell"
}]

In GA4 reports, filter by Item list name = "Post-Purchase Upsell" to see the revenue and transaction count attributable to post-purchase upsells.

Recommendation Widget Cross-Sells

If you use "Customers also bought" or "Frequently bought together" widgets on product pages or in the cart, implement view_item_list (list_name: "Cross-Sell - Product Page") and select_item events on these widgets. Purchases of cross-sell products that were viewed via these widgets will be attributed to the list_name in GA4's product list reports.

Summary

Upsell and cross-sell tracking requires three things: including all items (including order bumps) in checkout event items arrays, using unique transaction IDs for post-purchase upsell purchases, and using item_list_name to label upsell items for attribution. Without these, the revenue contribution of upsell and cross-sell programmes is invisible in reports.

See our Enhanced Ecommerce Tracking service for upsell and cross-sell tracking implementation.

Need upsell tracking implemented? Contact Adslytics.

Need expert tracking setup?

Our Google Tag Manager experts have delivered 500+ tracking setups with a 98% success rate.

Get a Free Consultation →
← Back to Blog
Muhammad Farooq

Author

Muhammad Farooq GTM & Analytics Expert · Adslytics Founder

Tracking specialist with 10+ years of experience in Google Tag Manager, GA4, Server-Side Tracking, and Google Ads. Founder of Adslytics — a dedicated analytics agency with a 98% success rate across 232+ projects on Upwork.

Top Rated Plus LinkedIn Visit the author's profile →