Skip to main content

🟣 Phase 3 β€” OptionalΒ Β·Β Implement when refund analytics matter.

refund

When to push​

When a refund is issued (full or partial). Often triggered from the back-office, so push from the admin page OR server-side via webhook β†’ GTM Server directly.

β†’ Coordinate with the agency depending on your refund flow.

Full refund​

window.dataLayer.push({ ecommerce: null });
window.dataLayer.push({
event: 'refund',
ecommerce: {
transaction_id: 'ORD-2026-00123',
currency: 'EUR',
value: 109.00
}
});

Partial refund​

Specify the refunded items:

window.dataLayer.push({ ecommerce: null });
window.dataLayer.push({
event: 'refund',
ecommerce: {
transaction_id: 'ORD-2026-00123',
currency: 'EUR',
value: 25.00, // refunded amount
items: [
{
item_id: 'BIO-SER-002',
item_name: 'Radiance Serum',
price: 25.00,
quantity: 1
}
]
}
});

Parameters​

ParameterRequired
transaction_idrequired β€” original order's tx id
currencyrequired
valuerequired β€” refunded amount
itemsoptional β€” partial refund only

Platforms​

PlatformNative event
GA4refund
Meta(no native event; agency-defined)
Google AdsConversion refund via API (agency-handled)

Pitfalls​

  • ❌ Pushing a refund without matching transaction_id.
  • ❌ Including items on a full refund β€” leave it empty.