Promotion ROI Calculations
Context
Vividly calculates Return on Investment (ROI) for promotions to answer one critical question: Did this promotion generate more incremental profit than it cost to run? ROI is calculated using your planned lift, expected sales, list price, product margin, and trade spend. The same core formula is used in both Promotions Planning (live promotions) and Scenario Planning / Scenarios (draft promotions you're testing). The key difference is that Scenarios always uses expected (planned) values, while Promotions Planning can also surface actual post-event ROI for eligible accounts.
When to Use This Article
- You want to understand why a specific ROI value is appearing on a promotion or promotion line
- You're building promotions and want to know what inputs drive ROI
- You're comparing scenarios and want to understand what the ROI column represents
- ROI is showing N/A and you want to know why
- You want to understand the difference between line-level and promotion-level ROI
Prerequisites
| Roles / Permissions | All users with access to Promotions Planning or Scenarios |
| Promotions Planning access | Available on all Vividly plans |
| Scenario Planning access | Requires the SCENARIO_PLANNING feature flag — contact your Customer Success Manager to enable |
| Actual ROI (Analytics) | Requires ROI Analysis feature gate + syndicated data (SPINS, Nielsen, IRI) |
| Lift | Must be configured on the promotion type |
| Product Margin | Must be set at the Product Group or Product level |
| Pricing | Must be configured at the Customer + Product Group level (First Receiver & Direct Customer only) |
| Promotion dates | Must include in-store dates (buy-in or scan-back window required for Performance Ratio) |
Part 1 — The Core ROI Formula
1. The formula in plain English
ROI measures how much incremental profit you generated above your trade spend, relative to what you spent.
Core ROI Formula
ROI = (Gross Margin − Trade Spend) ÷ Trade Spend
How to read your ROI result:
|
Result |
What it means |
|---|---|
|
0.50 (50%) |
You earned $0.50 of profit for every $1.00 spent — you got $1.50 back per dollar invested |
|
0 (0%) |
Break-even — trade spend exactly equals incremental profit |
|
−0.30 (−30%) |
You lost $0.30 for every $1.00 spent — promotion cost more than it returned |
|
N/A |
ROI cannot be calculated — a required input is missing or zero (see Troubleshooting) |
2. What “Gross Margin” means in this formula
Gross Margin is the incremental profit your promotion generated — not total sales, but the extra profit driven by the promotion above your baseline.
-
Incremental Units — Additional units sold because of the promotion (beyond baseline)
-
List Price — Price per unit used for the promotion
-
Product Margin % — Your profit margin on those units (as a decimal — e.g., 50% = 0.50)
3. The Full Calculation Chain — Step By Step
Vividly builds Gross Margin from the bottom up:
|
Step 1 — Incremental Units |
Incremental Units = Expected Sales × ( Lift ÷ (1 + Lift) ) × Performance Ratio |
|
Step 2 — Incremental Revenue |
Incremental Revenue = Incremental Units × List Price |
|
Step 3 — Gross Margin |
Gross Margin = Incremental Revenue × Product Margin % |
|
Step 4 — ROI |
ROI = (Gross Margin − Expected Spend) ÷ Expected Spend |
ℹ️ Note: ROI is only calculated when both Expected Spend > 0 and Gross Margin > 0. If either is zero or negative, ROI displays as N/A.
Part 2 — Key Inputs Explained
4. Lift
Lift is the expected percentage increase in sales during a promotion period, expressed as a decimal (e.g., 15% lift = 0.15).
The formula Lift ÷ (1 + Lift) isolates the incremental fraction of total sales.
Example: A 15% lift means: 0.15 ÷ 1.15 = 0.1304 → approximately 13% of total expected sales are incremental (driven by the promotion)
5. Performance Ratio
The Performance Ratio adjusts for situations where your in-store promotion period is shorter than your buy-in or scan-back window. It ensures you only count the lift that occurred while the promotion was active in store.
|
Condition |
Performance Ratio Formula |
|---|---|
|
Buy-in window AND in-store window both exist |
In-store window days ÷ Buy-in window days |
|
Scan-back window AND in-store window both exist |
In-store window days ÷ Scan-back window days |
|
Scan-back window AND buy-in window exist (no in-store) |
Scan-back window days ÷ Buy-in window days |
|
None of the above apply |
Performance Ratio = 1.0 (no adjustment) |
Example: Buy-in window = 30 days. In-store promotion = 21 days. Performance Ratio = 21 ÷ 30 = 0.70. Only 70% of expected sales are counted as incremental.
Part 3 — Line-Level vs. Promotion-Level ROI
6. Line-level ROI
Every promotion is made up of one or more promotion lines (e.g., a scan-back line for Product Group A, an MCB line for Product Group B). Each line gets its own ROI calculation.
Example — 3-Line Promotion
Line 1 (Scan, Product Group A): Expected Spend $1,000 • Gross Margin $1,500 → ROI = 50%
Line 2 (MCB, Product Group B): Expected Spend $800 • Gross Margin $1,200 → ROI = 50%
Line 3 (Ad, All Products): No lift / no margin applied → ROI = N/A
7. Promotion-level ROI
The overall promotion ROI rolls up all line metrics into one number:
Total Gross Margin = Sum of Gross Margin across all lines
Total Expected Spend = Sum of Expected Spend across all lines
Promotion ROI = (Total Gross Margin − Total Expected Spend) ÷ Total Expected Spend
Example (continuing from above):
Total Gross Margin = $1,500 + $1,200 + $0 = $2,700
Total Expected Spend = $1,000 + $800 + $600 (Ad) = $2,400
Promotion ROI = ($2,700 − $2,400) ÷ $2,400 = 0.125 → 12.5%
Note: Even if an individual line shows N/A (e.g., an Ad line with no lift), its expected spend still rolls into the promotion-level denominator — which can lower your overall promotion ROI.
Part 4 — Expected ROI vs. Actual ROI
|
Expected ROI |
Actual ROI |
|
|---|---|---|
|
What it uses |
Planned lift + expected units + expected spend |
Real POS/syndicated data (after promotion is closed) |
|
Available when |
As soon as a promotion is planned with lift configured |
After promotion status = Closed + syndicated data loaded |
|
Where to find |
Promotions Planning & Scenario Planning |
Insights → Promotion Analytics 2.0 → ROI Analysis tab only |
Important: ROI is only as reliable as its inputs. If product margins, list pricing, or lift values are missing or incorrect, the ROI output will be unreliable. Verify your data setup before drawing conclusions.
Part 5 — ROI in Each Module
1. Promotions Planning
Where To Find ROI?
-
Navigate to "Planning" in the left sidebar and open any promotion.
-
ROI is displayed on each promotion line and at the promotion-level summary header.
-
The ROI shown here is Expected ROI — calculated from your planned lift and expected sales as entered in the promotion.
-
After a promotion is closed and syndicated data is available, Actual ROI appears in Insights → Promotion Analytics 2.0 → ROI Analysis — not in the Planning view itself.
Which Team Should Use Which Margin Setting?
|
Team |
Recommended setting |
Purpose |
|---|---|---|
|
Sales Teams |
Set to 1 (100%) |
Shows pure volume and revenue impact without exposing sensitive cost data |
|
Finance Teams |
Actual COGS-based margin |
Measures true profitability — whether the promotion generated incremental profit net of trade spend |
Warning: Whether to use actual product margins is an organizational decision, not a technical one. Discuss with your team before configuring — it directly determines who sees profitability data and how results are interpreted.
Scenario Planning (Scenarios)
How To View ROI in a Scenario?
-
Navigate to "Scenarios" in the left sidebar and click "Scenario Planning".
-
Open an existing scenario or click "Create Scenario" to start a new one.
-
Add or create Draft promotions within the scenario.
-
For each promotion in the scenario list, you will see: Expected Spend, Revenue, Gross Margin, ROI, and Trade Rate.
-
The scenario-level header rolls up all promotion metrics into aggregate totals.
How Scenario ROI is calculated?
Scenario Planning uses the exact same Expected ROI formula as Promotions Planning (see Parts 1–3 above). Because all promotions in a Scenario are in Draft status, they always use planned/expected values — no actual deductions or POS data.
Note: Draft promotions in Scenarios are fully isolated. They do not affect your live promotion analytics, deduction reconciliation, or forecast calculations. ROI shown in Scenarios is purely for planning comparison.
Comparing ROI across scenarios
-
In the Scenario Planning section, click "Compare Scenarios".
-
Check the boxes next to up to 5 scenarios you want to compare.
-
Click "Generate Comparison".
-
Review side-by-side charts showing Trade Spend, Revenue, and Trade Rate by month.
-
For a direct ROI comparison, review the per-promotion ROI values within each individual scenario view.
How to Interpret Your ROI Result?
|
Result |
What it means |
|---|---|
|
Positive (> 0) |
The promotion generated more incremental profit than it cost — it is profitable |
|
Zero (= 0) |
Break-even — trade spend exactly equals incremental profit |
|
Negative (< 0) |
The promotion cost more than the incremental profit it generated — it ran at a loss |
|
N/A |
ROI cannot be calculated — see Troubleshooting below |
Troubleshooting
Problem: ROI Shows as N/A on a Promotion Line
-
Likely cause: One or more required inputs are missing — Expected Spend is zero/negative, Gross Margin is zero/negative, or the promotion type does not include lift.
- Fix:
- Confirm the promotion line has a non-zero expected spend.
- Confirm the promotion type is configured with lift.
- Confirm product margin is set for the associated product group or product.
- Confirm pricing is configured at the Customer + Product Group level.
Problem: ROI Shows as N/A at the Promotion Level Even Though Some Lines Have ROI
-
Likely cause: Total gross margin across all lines is zero or negative (high-spend lines without lift are outweighing profitable lines), or total expected spend sums to zero.
- Fix: Review each line's individual Gross Margin and Expected Spend. Ensure all lines intended to contribute to ROI have lift, margin, and pricing configured.
Problem: ROI is Much Lower than Expected
-
Likely cause: The Performance Ratio is reducing incremental units significantly — this happens when the buy-in window is much longer than the in-store window.
-
Fix: Review the buy-in and in-store date windows on the promotion. If the in-store window is short relative to the buy-in window, the Performance Ratio will be a small fraction. Adjusting date windows to more accurately reflect the actual promotion period will improve accuracy.
Problem: I Don’t See The “Scenarios” Section in the Left Sidebar
-
Likely cause: The SCENARIO_PLANNING feature flag is not enabled on your account.
-
Fix: Contact your Customer Success Manager to request access to Scenario Planning.
Problem: I Can See Expected ROI But Not Actual ROI For Closed Promotions
-
Likely cause: Actual ROI requires syndicated POS data to be loaded into Vividly and is only visible in the ROI Analysis tab under Insights → Promotion Analytics 2.0.
-
Fix: Confirm your account has syndicated data configured. If so, navigate to Insights → Promotion Analytics 2.0 → ROI tab. If you don’t have access to this tab, contact your Customer Success Manager to enable the ROI Analysis feature gate.
Frequently Asked Questions
Does ROI In Scenario Planning Affect My Live Plan or Analytics?
-
No. Draft promotions in Scenarios are fully isolated and do not impact live promotion analytics, deductions, or forecast calculations. ROI shown in Scenarios is purely for planning comparison purposes.
Why Does My Promotion-Level ROI Look Different From The Individual Line ROIs?
-
Promotion-level ROI aggregates all lines — including lines with no lift (like Ad lines) that still contribute their expected spend to the denominator. A high-spend line with no incremental revenue will pull the promotion-level ROI down relative to individual line ROIs.
Should I Set Product Margin To 100% Or Use Our Actual Margin?
-
It depends on your team's goals. Sales teams typically set product margin to 1 (100%) to see pure volume and revenue impact without introducing profitability complexity. Finance teams should use actual margins (based on real COGS and list price) to measure true profitability. This is an organizational decision — discuss with your team before configuring.
What Happens To ROI If A Promotion Line Has No Lift?
-
If a line has no lift (e.g., an Ad placement), there are no incremental units, so Gross Margin = 0 and ROI = N/A for that line. The line's expected spend still rolls into the promotion-level total, which can reduce overall promotion ROI.
Why Does a Negative Product Margin Make ROI Show as N/A Instead of a Negative Number?
-
When the gross margin is negative (the product is selling below cost), Vividly returns N/A rather than a negative ROI. This prevents a misleading double-negative result. The underlying gross margin value is still accessible in the data.