Your WooCommerce Coupon Codes Are in GA4. The Discount Amounts Are Wrong.

April 3, 2026
by Cherry Rose

Your GA4 account knows your customers used a coupon. It knows the code — SUMMER20, WELCOME10, whatever you called it. What it almost certainly does not know is how much that coupon actually cost you. The discount parameter — the per-item monetary deduction that makes GA4 Promotion Analysis meaningful — is missing or wrong in the vast majority of WooCommerce implementations. You have redemption counts. You do not have ROI data.

Here’s why that matters: 73% of GA4 implementations have silent misconfigurations causing 30–40% data loss (SR Analytics, 2025). The missing discount field is one of the most consistent culprits — and one of the least visible, because GA4 looks complete. Events fire. The purchase is recorded. The coupon code appears. Only the number that makes it all meaningful is missing.

The Two-Parameter Problem Nobody Mentions

GA4 uses two entirely separate parameters to track WooCommerce coupons. Most documentation — and most plugins — only implement one of them.

The coupon parameter holds the code string: SUMMER20. It tells GA4 which promotion was applied. It populates the Order Coupon and Item Coupon dimensions in your reports. On its own, it tells you nothing about what the discount was worth.

The discount parameter holds the monetary unit discount amount applied per item — not a percentage, not the cart-level total, but the actual dollar (or euro, or pound) amount deducted from each unit in the items array. A $20 coupon applied to a two-item order should send discount: 10.00 for each item. That number is what allows GA4 to calculate Item Revenue correctly and what makes Promotion ROI analysis possible.

Most WooCommerce tracking plugins send the coupon parameter. They skip the discount parameter entirely. GA4 receives the code and records discount as zero.

The downstream result: your GA4 Promotions reports show how many times SUMMER20 was redeemed. They cannot show you the total discount value granted, the average discount per order, or the net revenue per coupon campaign. The data structure is broken at the source.

You may be interested in: Your GA4 Purchase Events Are Firing. The Revenue Values Are Wrong.

Why Google’s Own Documentation Made This Worse

The discount parameter problem has a compounding factor: Google published two incompatible sets of guidance, and they have never resolved the contradiction.

The Measure Ecommerce page shows examples where price equals the full unit price and discount equals the unit discount amount. Item Revenue in this model calculates as: (price – discount) × quantity.

The Apply Discount page — updated March 25, 2026, and still contradictory — shows examples where price already reflects the discounted unit price. In this model, the discount field is redundant, and Item Revenue calculates simply as price × quantity.

These two approaches produce different Item Revenue figures for the same order. Different WooCommerce plugins followed different pages. Your current tracking plugin likely picked one approach — possibly at random, possibly years ago — and your GA4 Item Revenue data reflects that choice. Most store owners have no idea which implementation they are running.

The Google documentation contradiction means two WooCommerce stores with identical coupon orders can send structurally incompatible purchase events to GA4 — and both think their tracking is correct.

What Incorrect Discount Data Costs You

The consequences are not limited to the Promotions report. They compound across every system downstream.

GA4 Item Revenue is wrong for every coupon order. If your plugin sends the full pre-coupon price without a corresponding discount amount, GA4 overstates revenue on those orders. If it sends the discounted price without the discount field, the Item Revenue dimension calculates correctly but the Promotions dimension has no data to work with. Either way, something is broken.

Google Ads conversion values are inflated. When the purchase event sends the full pre-coupon order value as the conversion value, Smart Bidding optimises toward that figure. Your ROAS for coupon campaigns looks better than it is. Bidding decisions — and budget allocations — are made on inaccurate signal data. According to Gartner (2024), bad data costs organisations an average of $12.9 million annually. Coupon-driven campaign mis-measurement is an invisible contributor to that figure.

Promotion ROI analysis is structurally impossible. You cannot calculate the true net revenue per coupon campaign when the discount amounts were never recorded. The 67% of data professionals who say they do not trust their analytics data (Precisely, 2025) are often looking at exactly this kind of silent gap — metrics that appear populated but are incomplete at the calculation layer.

You may be interested in: Every WooCommerce Tracking Plugin Sends a Different Purchase Value

The Calculation Problem by Coupon Type

WooCommerce supports three coupon discount types: percentage discount, fixed cart discount, and fixed product discount. Each requires different per-item calculation logic to arrive at a correct GA4 discount value.

A percentage coupon is relatively straightforward — the discount per item equals the item unit price multiplied by the percentage. A fixed product coupon applies a flat amount per item purchased, which is direct. The problematic one is the fixed cart coupon, which applies a single discount total across the entire order and must be pro-rated across all items proportionally. Most plugins either skip this calculation or apply the full cart discount amount to every item — both are wrong.

The correct approach reads directly from the WooCommerce order object at the time of event generation: item subtotal minus item total. That figure — the difference between what the item would have cost and what it actually cost after coupon — is the definitive per-item discount amount. It is calculated by WooCommerce itself and is always correct regardless of coupon type.

How to Audit Your Current Implementation

The diagnostic takes about five minutes.

Open GA4 DebugView (Admin → DebugView). Place a test order on your WooCommerce store with a coupon code applied. When the purchase event fires, click through to the event detail and expand the items array. Find the item entry and look for two fields: coupon and discount.

If coupon is present but discount is absent or zero: your implementation has the one-parameter problem. GA4 knows the code was used. It has no monetary data.

If both coupon and discount are present: calculate what the per-item discount should be for your coupon type and compare it to what was sent. A mismatch means the calculation logic is wrong even if the field exists.

One correct implementation tells you more about your coupon ROI than months of incomplete reports.

The Server-Side Fix

The root cause of the missing discount parameter is architectural. Browser-side tracking plugins fire at page load — they read dataLayer values that were populated before the WooCommerce order object was fully built. They do not have reliable access to the per-item discount calculations WooCommerce performed on the server side.

The Transmute Engine™ operates differently. It captures purchase events via WooCommerce server-side hooks — specifically, the hooks that fire after the order is completely built and saved. At that point, the WooCommerce order object contains every item’s subtotal, total, and applied coupons. The Transmute Engine reads item subtotal minus item total per line item to calculate the exact discount amount — the same figure WooCommerce used to process the order. It then sends both coupon and discount to GA4 with mathematically correct values, regardless of whether the coupon was percentage, fixed cart, or fixed product.

The result: GA4 Item Revenue is correct for every coupon order. Promotions reports have real monetary data. Google Ads conversion values reflect what customers actually paid. ROAS calculations for coupon campaigns are no longer structurally misleading.

Key Takeaways

  • GA4 requires two parameters for coupon tracking: coupon (the code string) and discount (the per-item monetary amount). Most plugins only send one.
  • Google’s own documentation is contradictory on whether price should reflect the full or discounted unit value — creating two incompatible implementations across WooCommerce stores.
  • Missing discount data corrupts GA4 Item Revenue, inflates Google Ads conversion values, and makes Promotion ROI analysis impossible.
  • The correct per-item discount amount is calculated as item subtotal minus item total from the WooCommerce order object — available server-side only.
  • Audit your implementation now: GA4 DebugView, one test order with a coupon, check the items array.

The coupon code in your GA4 report is not coupon tracking. It’s coupon labelling. Actual coupon tracking — the kind that tells you which promotions generate margin and which ones erode it — requires the discount amount. If it’s zero, the data infrastructure under your promotion strategy is broken.

Why does GA4 show my coupon code but the discount value is zero?

Most WooCommerce tracking plugins send the coupon code string to the coupon parameter but do not calculate or send the per-item monetary discount amount to the discount parameter. GA4 receives the code — it knows a coupon was used — but has no data on what it was worth. The discount field defaults to zero or is omitted entirely.

How should I pass item-level discount amounts from WooCommerce to GA4?

GA4 expects the discount parameter to hold the monetary unit discount per item — not a percentage, not the total cart discount. For a $20 fixed cart coupon on a two-item order, each item should receive discount: 10.00. The calculation must be performed at the point of event creation using the WooCommerce order object, where item subtotal and item total are both available.

How do I verify whether my store is sending correct discount amounts to GA4?

Open GA4 DebugView and place a test order with a coupon applied. In the purchase event, expand the items array and check whether the discount field is present and non-zero. Then divide the total coupon value by the number of items — if the discount value does not match this figure, your implementation is incorrect.

Does a missing discount parameter affect Google Ads ROAS?

Yes. When the discount parameter is missing and item price reflects the full undiscounted value, the purchase event sends an inflated conversion value to Google Ads. Smart Bidding optimises toward this higher number, making coupon-driven campaign ROAS appear better than it actually is. Bidding decisions downstream are made on inaccurate signal data.

If your GA4 discount data has always shown zero, your promotion analysis has never been accurate. The fix starts with understanding the architecture — and the question is whether you want to keep guessing at your coupon ROI or actually measure it.

Share this post
Related posts