Guide 52 · Ecommerce · GA4 + Tag Manager
The coupon on a purchase: the event-level code, the item-level code, and the Order coupons report
A purchase carries two coupon fields that are independent: the event-level code for the order and the item-level code for each item. Send both, spelled the same way every time.
After the events flow, Reports, then Life cycle, then Monetization, then Order coupons shows revenue by coupon code. In the worked order below, the event coupon reads SUMMER_SALE, the item coupon reads SUMMER_FUN, and the recorded item discount is 6.66.
Download the reference: the coupon-on-purchase reference (JSON) (1353 bytes, MD5 5e28afac3d1d258cf1017cc9b8cc0fb3). It holds the event parameters, the worked example, and the recomputed figures.
What you need
- The Google tag on the site. The event is sent through the Google tag; the install guide covers it.
- Access to the website source code, or a Tag Manager container. The coupon parameters are set where the purchase event is sent.
- One worked order with a coupon. Google's tutorial order: three tees at 10.01, value 30.03, event coupon SUMMER_SALE, item coupon SUMMER_FUN, discount 2.22 per unit.
The trace
- Send the event-level coupon for the order. The purchase call carries
coupon: "SUMMER_SALE"at the event level, beside transaction_id, value, tax, shipping, and currency. The event-level coupon is what the Order coupons report groups by: it shows the revenue associated with each coupon on the website. Google's tutorial order isgtag("event", "purchase", { transaction_id: "T_12345_1", value: 30.03, tax: 4.90, shipping: 5.99, currency: "USD", coupon: "SUMMER_SALE", items: [...] }). - Send the item-level coupon for each item it applies to. The tee inside the items array carries its own
coupon: "SUMMER_FUN". The event-level and item-level coupon parameters are independent: the order can carry one code and an item another, and each is reported in its own place. An item with no coupon leaves the field out; an empty string is not the same as absent. - Record the discount on the item beside the coupon. The tee carries discount 2.22 per unit, so the recorded discount for the three tees is 2.22 × 3 = 6.66. The value stays at the items total, 10.01 × 3 = 30.03, and the charged total is 30.03 + 4.90 + 5.99 = 40.92. The coupon names the promotion; the discount records what it took off.
- Spell the code the same way every time. The Order coupons report groups by exact string, so
SUMMER_SALEandsummer_saleare two different coupons in the report, and a code typed with a trailing space is a third. Fix the code in the checkout, in upper case, and send it as stored. - Confirm the reports after about 24 hours. Open Reports, then Life cycle, then Monetization, then Order coupons, and check the SUMMER_SALE row shows the order's revenue. A coupon that appears in DebugView but never in the report usually means the code was sent on the item only, and the event-level field — the one the report groups by — was left out.
Dead ends
DEAD END — THE COUPON ONLY ON THE ITEM. The Order coupons report is grouped by the event-level coupon. A purchase that sends the code on the item but not on the event arrives in the reports with no order coupon attached, and the report shows the revenue under no coupon at all.
DEAD END — TWO SPELLINGS OF ONE CODE. A promotion that reaches customers as both SUMMER_SALE and summer_sale splits into two rows, each with part of the revenue. The report cannot join them after the fact. One code, one spelling, everywhere it is sent.
DEAD END — THE DISCOUNT FOLDED INTO THE PRICE WITH NO COUPON. A price sent already reduced, with no coupon and no discount recorded, looks like a cheap product instead of a promotion. The coupon names the promotion and the discount records the amount; send both, or the promotion is invisible in the reports.
End state
Every purchase with a coupon sends the event-level code (SUMMER_SALE) and the item-level code (SUMMER_FUN) where each applies, spelled the same way every time, with the item discount recorded (2.22 per unit, 6.66 for the order). The worked order is value 30.03, tax 4.90, shipping 5.99, charged total 40.92. After about 24 hours the Order coupons report shows the revenue by coupon code.
Sources
- Google Analytics developer docs — Set up a purchase event — the worked order with event coupon SUMMER_SALE and item coupon SUMMER_FUN, and the discount per unit
- Analytics Help — Life cycle collection — the Order coupons report in the Monetization section of the Life cycle collection
Checked 11 November 2026. The coupon fields above are the ones in Google's purchase tutorial and the recommended events reference, both opened 11 November 2026, with the report listed in the Life cycle collection in Analytics Help. No step was run inside a live Analytics property, because that needs a Google sign-in and this site does not sign in as anyone. The figures were recomputed in Python: 10.01 × 3 = 30.03, 2.22 × 3 = 6.66, and 30.03 + 4.90 + 5.99 = 40.92. The reference file was checked the same way.