At a glance
Total discount value as a percentage of revenue, over the trailing 30 days. Margin-compression detector. Adobe Commerce stores often have higher discount-of-revenue % than Shopify equivalents because B2B tier pricing (customer_group_price) is structurally always-on. Healthy DTC ranges 3 to 8%; B2B-mixed stores 6 to 15%. Above 15% triggers margin scrutiny.
| What it counts | SUM(discount_amount) / SUM(grand_total). The numerator includes cart-rule discounts (BOGO, percent-off codes), customer-group price discounts (B2B tier pricing), and applied catalog price rules. Excludes shipping discounts (separate field). |
| API field | discount_amount, grand_total from GET /rest/V1/orders. |
| VAT / tax treatment | The ratio is a percentage so tax-bias washes out only if both numerator and denominator are tax-treated identically. Adobe stores discount typically pre-tax; grand_total is post-tax. This means discount % is slightly understated relative to a pure pre-tax view. |
| Shipping inclusion | discount_amount excludes shipping discount; grand_total includes shipping. Mild understatement of discount % because the denominator is “fatter” than the numerator. |
| Discounts | This card IS discount measurement. |
| Credit Memo refund treatment | NOT subtracted. A discount given on an order later refunded still counts as discount spent. |
state machine inclusion | All states except canceled. |
pending_payment quirk | Included; B2B net-30 orders with tier discounts are pipeline. |
Multi-currency grand_total vs base_grand_total | Uses base_discount_amount / base_grand_total for cross-currency rollup. |
Store View scope (store_id) | All Store Views; per-Store-View variants useful (B2B portal will show much higher discount %). |
| Time window | 30D vsP |
| Alert trigger | >15% (margin compression) |
| Sentiment key | discount_dependency |
| Roles | owner, marketing |
Calculation
Worked example
A homewares brand on Adobe Commerce 2.4.6 with US/UK/B2B Store Views. 30-day window ending Monday 4 May 26. Discount % by Store View:| Stream | 30D revenue | 30D discount | Discount % |
|---|---|---|---|
| US consumer | $312,800 | $14,800 | 4.7% |
| UK consumer | $246,000 | $12,400 | 5.0% |
| B2B portal | $462,000 | $42,600 | 9.2% |
| Blended | $1,020,800 | $69,800 | 6.8% |
- B2B at 9.2% reflects tier pricing (always-on
customer_group_pricediscounts). Material but expected; B2B unit margins absorb this in negotiated contracts. - Consumer (US 4.7%, UK 5.0%) is in the healthy DTC range. A campaign month would push these to 8-10%; current levels suggest light campaign activity.
- Blended +1.4 pt rise vs prior is driven by the B2B share growing (more B2B mix = higher blended discount %) plus a small consumer uptick (Mother’s Day campaign extension).
- Cross-checking B2B Revenue Share: B2B share rose 5.6 pts in the period. The discount % rise is consistent with the B2B mix shift; not an underlying margin compression issue.
- Cross-checking Discount Over Time: the daily chart confirms B2B baseline-discount drove the rise; consumer campaign discount was steady.
- Action: no immediate margin concern, but worth setting up a per-Store-View alert at 12% (consumer Store Views) to catch a future campaign creep without dragging on the B2B alert. The current 15% blended trigger is appropriate for the current B2B-mix shape but would not catch a consumer-side issue.
Sibling cards merchants should reference together
| Card | Why pair it with Discount % |
|---|---|
| Discount Over Time | Daily trend chart of the absolute value. |
| Total Discount | Single-period absolute value. |
| Total Revenue | The denominator. |
| AOV | Discount campaigns drag AOV. |
| B2B Revenue Share | B2B mix changes blended discount % independently of campaign activity. |
| B2B AOV vs B2C AOV | B2B tier-pricing impact on per-segment AOV. |
| Refund Rate | Discount-driven impulse buys can have higher refund rates. |
shopify.discount_pct | Cross-platform peer. |
Reconciling against the vendor’s own dashboard
Where to look in Adobe Commerce Admin:Reports > Sales > Coupons lists per-rule usage; manual computation needed for the % vs revenue.
Reports > Sales > Orders with date filter has a per-period discount column; the report total includes all discount types.
Marketing > Cart Price Rules for the rule list and per-rule discount totals.Why our number may legitimately differ from Admin:
| Reason | Direction of divergence |
|---|---|
| Coupon vs cart-rule scope. Admin Coupons report shows code-only rules; this card includes all discount types. | Card higher than coupons-report-only |
Customer-group price. Often invisible in Admin reports as “discounts”; the card includes them in discount_amount. | Card higher than admin perception |
| Time-zone. Admin in Store View timezone; card UTC. | Boundary effects |
Currency. Card uses base_* fields. Admin uses Store View base. | Material on multi-currency |
canceled exclusion. Card excludes; Admin includes unless filtered. | Marginal |
| Pair | Expected relationship | What divergence tells you |
|---|---|---|
| ESP campaign attribution | ESP-attributed discount ≤ card total | If ESP shows higher attributed discount than card has spent, attribution overlap. |
google_ads.google_ads_promo | Google Ads-attributed promotional revenue ≤ card | Material divergence indicates attribution drift. |
Known limitations / merchant FAQs
Why is my Adobe Commerce discount % higher than industry benchmarks for ecommerce? Industry benchmarks are dominated by pure-DTC stores. Adobe Commerce skews B2B-mixed; B2B tier pricing structurally drives discount % higher. Use Adobe-Commerce-matched peer benchmarks: pure-DTC 3-6%, B2B-mixed 6-12%, B2B-heavy 10-20%. Adobe Commerce vs Magento Open Source: difference? None at the calculation. Both editions handle discount machinery identically. My multi-store, can I see per-Store-View discount %? Yes, configure per-Store-View variants. Strongly recommended because B2B-tier-pricing-driven discount % can mask consumer-side campaign creep. Why exclude shipping discounts from the numerator? Shipping discounts (shipping_discount_amount) are a separately-managed promotional surface (free shipping over £X is a marketing decision distinct from item-discount campaigns). The card defaults to product-discount-only; configure to include shipping if you want a unified view.
Customer-group price counts as a discount, why?
Adobe Commerce’s data model: every customer-group-price-applied-vs-base-price difference flows into discount_amount as a per-line-item discount. From an accounting perspective this is correct (the difference is revenue forgone). From a campaign perspective, it’s not a “campaign discount”. The card surfaces the total; rule-name decomposition (in Discount Over Time) lets you separate.
My discount % spiked but I didn’t run a campaign, why?
Likely B2B mix shift. If B2B share rose, blended discount % rises mechanically because B2B has higher structural discount. Cross-check B2B Revenue Share.
Why does the alert at 15% feel too lenient for my consumer-only Store View?
The 15% default is for blended (B2B + consumer). Configure per-Store-View thresholds: 8-10% for consumer Store Views, 15-20% for B2B portal Store Views.
My multi-currency Adobe Commerce, is the % comparable across currencies?
Yes; the card uses base_* for both numerator and denominator so FX-conversion-related artefacts cancel out.
Why isn’t the % subtracting for refunded orders?
Discount given on a refunded order is still a discount the merchant chose to extend. The customer received the discounted price; the refund returned the post-discount cash. The discount cost was incurred. For pure-net-margin analysis you’d subtract; for marketing-cost analysis the gross figure is right.