By ForeCraft · Published 2026-09-08 · Updated 2026-09-08
Variance analysis compares each line of the accounts against a prior period or budget and explains why it moved. This page shows the arithmetic on a worked example, a two-part materiality rule for deciding which lines deserve attention, and how to name the driver behind each movement rather than restating the number.
Download
forecraft-variance-analysis-template.csv — a blank template with the formula notes in the header and columns for driver, explanation, owner, and due date.
The two calculations
For any line, comparing a current period against a prior period:
Variance = Current − Prior Variance % = Variance ÷ ABS(Prior) × 100
Use ABS(Prior) in the denominator rather than Prior. If the prior figure is negative — a contra-revenue line, or a credit sitting in an expense category — dividing by the signed value flips the sign of the percentage and makes an increase look like a decrease.
A worked example
The figures below are illustrative and invented for this example. They are not a customer, a case study, or an industry benchmark.
| Category | Prior | Current | Variance | Variance % | Flagged |
|---|---|---|---|---|---|
| Revenue | 120,000 | 132,000 | +12,000 | +10.0% | Yes |
| Cost of goods sold | 48,000 | 56,100 | +8,100 | +16.9% | Yes |
| Payroll | 41,000 | 41,400 | +400 | +1.0% | No |
| Software and subscriptions | 3,200 | 5,900 | +2,700 | +84.4% | Yes |
| Marketing | 9,000 | 6,300 | −2,700 | −30.0% | Yes |
| Professional fees | 1,500 | 1,530 | +30 | +2.0% | No |
The materiality rule used above
A line is flagged when either test is met:
- the absolute variance is at least 2,000 (a fixed amount you set per client), or
- the variance is at least 10 percent of the prior figure.
Applying only one test misses real movements in both directions:
- Percentage alone misses payroll. Payroll moved +400, which is under one percent — correctly ignored here. But on a larger base a movement can be financially significant while staying under any percentage threshold. The absolute test is what catches it.
- Absolute alone misses software. Software rose by 2,700 — small in currency terms against revenue of 132,000, but an 84 percent increase on a normally stable line. That pattern usually means an annual renewal posted in one month, a new tool, or a duplicate subscription. The percentage test is what catches it.
Professional fees rose by 30, or 2 percent — below both thresholds, so it is correctly left alone. Not flagging a line is a decision worth making deliberately; a pack that flags everything communicates nothing.
Naming the driver
A variance table that stops at the number is only half the work. Each flagged line needs a driver, and there are only five useful categories:
| Driver | Means | Example from the table above |
|---|---|---|
| Volume | More or fewer units, customers, or hours | Revenue +12,000 alongside cost of goods sold +8,100 |
| Price | The same volume at a different rate | A supplier increase inside cost of goods sold |
| Timing | Cost landed in this period but relates to several | Software +2,700 from an annual renewal |
| One-off | Genuinely non-recurring | A campaign that did not repeat, reducing marketing |
| Correction | A coding or cut-off error | Anything traced back to the wrong category |
If the driver is correction, stop and fix the books rather than explaining the error in the pack. If it is timing, say so explicitly — otherwise the reader assumes a permanent step change and plans around a cost that will not recur.
Checking gross margin, not just gross profit
Revenue rose 10.0 percent and cost of goods sold rose 16.9 percent in the example. Both look healthy in isolation, but the ratio moved:
Prior gross margin = (120,000 − 48,000) ÷ 120,000 = 60.0% Current gross margin = (132,000 − 56,100) ÷ 132,000 = 57.5%
A 2.5 point margin decline in a growing month is the most important line in this table, and it appears nowhere in the variance column. Ratios have to be checked separately from movements.
Doing this automatically
ForeCraft runs this comparison across every line, ranks what moved, and drafts the explanation with the source row attached, so you can trace any figure back to the file it came from.
Related resources
- How to write monthly financial commentary — turning a flagged variance into a sentence.
- Monthly close checklist — where variance analysis sits in the month.
- CFO management pack template — the section this table feeds.
- All resources