At a glance
The fraction of revenue given away as discount in the last 30 days vs the prior 30 days. A direct margin-compression indicator, when this ratio creeps past 15%, you are no longer running promotions, you are running a permanent discount.
| What it counts | SUM(discountAmount) ÷ SUM(totalIncTax) over the trailing 30-day window, vs the prior 30 days. The output is a percentage, e.g. “12.3% of revenue is discount”. The denominator includes tax, the numerator is pre-tax discount, so the ratio is slightly understated by 5-20% depending on tax rate. Most merchants treat this as close-enough; precision-conscious teams should run a tax-stripped variant. |
| VAT / tax treatment | Numerator is pre-tax (BC stores discountAmount pre-tax). Denominator is tax-inclusive (totalIncTax). The ratio is therefore VAT-rate-dependent; a 20% UK store sees this card read ~17% lower than a tax-exclusive equivalent. Consistent within-store; meaningful when comparing same store over time. Don’t compare directly between a UK and US store. |
| Shipping | Included in the denominator (it’s part of totalIncTax); free-shipping discounts are NOT in the numerator. Free-shipping-heavy stores see this card understate true margin compression. |
| Discounts | The numerator. Sum of all discountAmount per order. |
| Refunds | NOT deducted on either side. Refunded orders contribute their original discount and original revenue. To see refund-net discount %, use Refund Value and adjust both numerator (zero, refunds don’t reverse discount) and denominator (subtract refund value). |
| Cancelled / voided orders | Included on both sides. A cancelled order with total_inc_tax = $100 and discount_amount = $20 contributes both numerator and denominator. |
| Currency | Multi-currency arithmetic without FX. The ratio comes out as a “currency-mix-weighted blended discount %”, which is internally consistent for trend-tracking but not meaningful as an absolute number on multi-currency stores. |
| Channels / sources | All channels contribute. POS manager-overrides, B2B contract pricing, web storewide promos, and marketplace coupons all roll into a single ratio. B2B Edition stores see this number much higher because contract pricing is captured as discount-vs-list, often 10-30% structurally. |
| Why 15% is the threshold | Below 10%: low promotional dependency, healthy margin profile. 10-15%: typical D2C, balanced promo cadence. 15-25%: high dependency, margin pressure obvious in P&L. Over 25%: discount is the brand position, customers will not buy at full price. The 15% line is where most merchants start to feel the squeeze in their finance reporting. |
| Time window | 30D vsP (rolling 30 days, compared to prior 30 days) |
| Alert trigger | >15% (margin compression), sentiment key discount_dependency |
| Roles | owner, marketing |
Calculation
Worked example
A US homewares brand on BigCommerce Pro, comparing 14 Mar 26 to 12 Apr 26 vs prior 30 days (12 Feb 26 to 13 Mar 26).| Metric | Prior 30 days | Last 30 days | Delta |
|---|---|---|---|
Total revenue (total_inc_tax) | $312,400 | $338,900 | +8.5% |
Total discount (discount_amount) | $28,650 | $52,180 | +82.1% |
| Discount % of Revenue | 9.2% | 15.4% | +6.2 pp, ALERT FIRES |
- Revenue grew 8.5% but discount grew 82.1%. The discount-driven growth is fragile, you bought 8.5% more revenue at a 6 percentage-point margin cost. Net contribution margin probably declined despite top-line growth.
- Crossing the 15% threshold matters psychologically. Below 15% most stores can claim “promotional but disciplined”. Above 15% the conversation shifts to “we are discount-dependent”. That conversation involves finance, marketing, and the founder; this card is the trigger.
- The +82% discount jump always has a story. Most likely candidates: (a) a flash sale ran for 7+ days instead of the planned 3 days, (b) a new always-on welcome code was added to the welcome email and is now compounding with other codes, (c) a B2B contract was priced 30% below list and three big orders have just landed in the window.
- Diagnostic sequence: open BC Top Coupons, identify the top 3 codes by discount value in the last 30 days; verify each was sanctioned. If contract-pricing is the cause (a single B2B order represents 40%+ of the discount jump), the alert is misleading and should be muted on B2B-heavy windows.
- The compounding factor: discount-acquired customers tend to refund and return at 2-3x the rate of full-price-acquired customers. Look at Refund Rate for the same window; if it’s also up, the realised margin compression is worse than the headline 6.2pp.
- Audit live promotions in Marketing → Promotions. Disable any promotion older than 60 days; customers no longer see it as a deal.
- Audit live coupon codes in Marketing → Coupons. Kill any codes leaked to aggregators (search the code on Honey / RetailMeNot, if it’s listed publicly, it’s compromised).
- Reissue welcome / back-in-stock codes as cookie-tied codes so they cannot be applied by browser extensions sourcing from aggregator sites.
- Tighten paid-search promo extensions, ensure Google Ads promotion extensions match the live promo calendar; stale extensions train customers to expect codes that no longer exist.
- For B2B-heavy stores, check whether contract pricing is inflating the number; consider running a B2B-excluded view as the primary KPI.
Sibling cards merchants should reference together
| Card | Why pair it with Discount % of Revenue |
|---|---|
| Discounts Given Over Time | The shape of the trend. This card is the headline ratio; that one is the daily breakdown. |
| Total Discount | The numerator. Discount-pct alerts triggered by a small revenue base + small discount can be misleading; check the absolute value. |
| Total Revenue | The denominator. Look at both, declining revenue with stable discount $ also lifts this ratio (algebra, not behaviour). |
| BC Top Coupons | The “which code” diagnostic. When this ratio jumps, this card identifies the cause. |
| BC AOV by Discount | The AOV-uplift view. Healthy discounting raises AOV (bundles); unhealthy discounting just lowers per-unit price. |
| Refund Rate | The downstream cost. Discount-driven customers refund at 2-3x the full-price rate. |
| BC Channel Revenue Mix | Channel decomposition. A spike in this ratio often correlates with a marketplace channel running an aggressive promotion. |
shopify.discount_pct | Cross-platform peer. Shopify stores typically see this ratio 2-5pp lower because Shopify’s promotion engine is simpler. |
Reconciling against the vendor’s own dashboard
Where to look in BigCommerce Control Panel: BigCommerce does not surface “discount percent of revenue” as a single tile natively. You can compute it manually from Analytics → Sales (showing total revenue) and Analytics → Marketing → Promotions (showing total discount). Plus / Pro / Enterprise plans have a “Discount as % of revenue” tile in the Marketing analytics tab; Standard plan does not. For B2B Edition, contract-pricing reporting is in B2B → Reports and is not aggregated with retail discount; reconciling requires manual addition. Why our number may legitimately differ from BC Analytics:| Reason | Direction |
|---|---|
Tax treatment of denominator. Our denominator includes tax (totalIncTax); BC’s Marketing analytics may use pre-tax revenue. UK / EU stores see our number ~17% lower than the BC report; US sales-tax stores see less of a gap. | Vortex IQ LOWER (UK/EU especially) |
| B2B contract pricing inclusion. We include contract-pricing discount; BC’s Marketing report typically excludes it. | Vortex IQ HIGHER on B2B-heavy stores |
Manual order-level discounts. Support-staff manual discounts show in discount_amount; BC promotion reports may exclude them as “not a promotion”. | Vortex IQ HIGHER |
| Time zone. UTC vs store time zone for the 30-day window boundary. | Boundary effects |
| Cancelled orders. We include them; BC may exclude. | Vortex IQ HIGHER if decline rate is high |
| Multi-currency. Arithmetic-mixed in our calculation; BC may segregate by currency in reports. | Mixed |
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
google_adwords.ga_promo_revenue_share | Paid-search-attributed promo revenue share should overlap | Paid search sees only paid-channel orders; this card sees all channels. |
klaviyo.kl_discount_revenue_share | Email-driven discount share | Klaviyo sees email-attribution; BC sees the actual checkout. |
shopify.discount_pct(planned)adobe_commerce.discount_pct(planned)
Known limitations / merchant FAQs
My discount % crossed 15% and the alert fired, what’s the action? Investigate before reacting. (1) Open BC Top Coupons and identify the top 3 codes by discount value, sanctioned or not? (2) Check whether a B2B contract or large wholesale order has just landed; B2B contract pricing flows into this number unhelpfully. (3) Review live promotions, kill any that have run for over 60 days. (4) If the cause is a structural always-on welcome code, plan a 14-day cookie-tied reissue, do not yank the code with no replacement. My number reads 22%, is that bad? Above 20% is industry-dependent. Fashion D2C: 22% is high, sustained margin pressure visible in P&L. Homewares: 22% is normal during seasonal sales, concerning if year-round. B2B-heavy: 22% includes contract pricing and is healthy if list-vs-contract gaps are 20-30% by design. Compare against same period last year first, if you were 18% last year and 22% this year, the 4-pp drift is the signal. Why is my B2B-only store reading 28% all the time? Because B2B contract pricing (negotiated price < list price) populatesdiscount_amount. A B2B store with 30%-off contracts reads 30% on this card structurally. The right view for a B2B store is “discount above contract”, run a custom slice that excludes B2B customerId from the calculation; we are working on a B2B-aware version.
Should I include refunds in the calculation?
The standard view (this card) does not. To get a refund-net version, divide (discount_amount × (1 - refund_rate)) by (total_inc_tax - refund_value). Most stores don’t bother; the directional signal is the same. Refund-adjusted matters when refund rate moves significantly between comparison periods.
My ratio is 4%, am I underpromoting?
Possibly. 4% is low, on the “premium / no-promo” side. If you also have stable revenue, healthy AOV, and acceptable conversion rate, you’re fine, premium positioning works for some brands. If revenue is flat and CR is below industry benchmark, you may be leaving acquisition revenue on the table. Run a controlled “first-time-buyer 10% off” test for 30 days and compare CR uplift to discount cost.
What’s the relationship to gross margin?
Discount % of revenue is a leading indicator for gross-margin compression. A 5pp rise in discount % maps roughly to a 3-5pp drop in gross margin (depending on COGS structure). If your gross margin in finance is dropping faster than this card suggests, the gap is usually freight, returns, or input-cost inflation, not discount.
My ratio dropped from 18% to 12% but revenue dropped too, is that a win?
Tactically yes, strategically maybe. Pulling promotions raises margin per order but loses some revenue. The right metric is gross profit dollars (revenue × gross margin), not either input alone. Run Total Revenue and your gross-margin source side by side. Most “kill the discount” experiments lose 8-15% revenue and gain 12-20% margin, net positive.
My PoS terminal applies a manager override discount on 5% of orders, is that polluting this number?
Slightly, but rarely materially. POS manager overrides typically average 0.3-0.8% of total revenue across the store. If POS makes up 30% of your business and 5% of POS orders get a 10% override, that’s about 0.15 percentage points of dilution on this card. Worth knowing, not worth acting on.
Does Cybersource / payment-side decline affect this number?
No, declines do not refund discount; the order is created with discount applied, then the payment fails. Both numerator and denominator include the declined order; the ratio is unaffected. If your decline rate is high, your absolute figures (discount, revenue) are both higher than realised cash.