π£ 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β
| Parameter | Required |
|---|---|
transaction_id | required β original order's tx id |
currency | required |
value | required β refunded amount |
items | optional β partial refund only |
Platformsβ
| Platform | Native event |
|---|---|
| GA4 | refund |
| Meta | (no native event; agency-defined) |
| Google Ads | Conversion refund via API (agency-handled) |
Pitfallsβ
- β Pushing a refund without matching
transaction_id. - β Including
itemson a full refund β leave it empty.