Variance analysis
Are we on budget, and if not, why?
Variance analysis: how far a month’s revenue landed from budget, split into price, volume and mix, so you know which lever missed and by how much.
The answer
September 2026 against budget
€17,892 under budget. Growth’s price, €99 a month against €109 budgeted, cost €12,300. 158 fewer customers than budgeted cost €12,244. A richer plan mix gave back €6,652.
Budget
€360,350
4,650 customers paying, Growth at €109.
Actual
€342,458
4,492 customers paying, Growth at €99.
Variance
−€17,892
5.0% under budget, 158 customers short.
Budget to actual, recurring revenue, September 2026 (€)
The same data as a table, by plan
| Step | Starter | Growth | Scale | All plans |
|---|---|---|---|---|
| Budget | €84,100 | €141,700 | €134,550 | €360,350 |
| Volume | −€2,857 | −€4,815 | −€4,572 | −€12,244 |
| Mix | −€188 | −€2,815 | +€9,655 | +€6,652 |
| Price | €0 | −€12,300 | €0 | −€12,300 |
| Actual | €81,055 | €121,770 | €139,633 | €342,458 |
What if September had gone differently?
The controls start at what happened. Move one and the split, the chart and the tables redraw.
€17,892 under budget. Volume −€12,244, mix +€6,652, price −€12,300.
| Plan | Customers, budget | Customers, actual | Price, budget | Price, actual | Revenue, budget | Revenue, actual | Variance |
|---|---|---|---|---|---|---|---|
| Starter | 2,900 | 2,795 | €29 | €29 | €84,100 | €81,055 | −€3,045 |
| Growth | 1,300 | 1,230 | €109 | €99 | €141,700 | €121,770 | −€19,930 |
| Scale | 450 | 467 | €299 | €299 | €134,550 | €139,633 | +€5,083 |
| All plans (average price) | 4,650 | 4,492 | €77.49 | €76.24 | €360,350 | €342,458 | −€17,892 |
How the variance splits
The budget, set in December 2025, planned 4,650 paying customers at the end of September 2026 and €360,350 of recurring revenue, with Growth’s price up €10 to €109 a month, and Starter and Scale at their list prices. September closed at 4,492 customers and €342,458, with Growth still at €99: €17,892 under budget, 5.0%.
| Effect | How it is calculated | September 2026 |
|---|---|---|
| Volume | (actual customers − budget customers) × the budget’s average price at its own plan mix | (4,492 − 4,650) × €77.49 = −€12,244 |
| Mix | actual customers × (each plan’s actual share − its budget share) × its budget price, added up over the plans | Starter −€188, Growth −€2,815, Scale +€9,655: +€6,652 |
| Price | (each plan’s actual price − its budget price) × its actual customers, added up over the plans | Growth (€99 − €109) × 1,230 = −€12,300; Starter and Scale €0 |
| Variance | volume + mix + price = actual − budget | €342,458 − €360,350 = −€17,892 |
Volume prices every missing customer at the budget’s average, €77.49 a month, more than a Starter customer pays. The shortfall sits mostly on the cheapest plan: Starter is 105 customers short of budget at €29, Growth 70 short at €109, and Scale 17 ahead at €299. The customers the company has sit on dearer plans, on average, than the budget assumed, and the mix line gives that back: +€6,652.
The three add up to actual less budget exactly. Volume and mix come out in fractions of a euro; they print in whole euros, rounded so that every row and every column of the table by plan still adds up.
What this shows, and what it does not
The split says which lever missed and by how much. It does not say why: why fewer trials converted to paid, or why the price rise has not happened. Each control moves one thing, so a lower Growth price here wins no extra customers, as a real discount can. And the order of the split is a convention, volume at budget prices and price at actual customers; another order moves euros between the three lines, never the total.
The actual month is the September of the example monthly revenue report, for the same company. The revenue bridge shows what moved revenue from August to September; this page sets September against its budget.
Start here
Want this split on your own budget?
Up to thirty minutes on your budget and billing data, then a fixed proposal.