Finance & Accounting
Compare budget vs actual and flag large variances
Change any figure in the sample table and the variance in amount and percent updates, with rows above your threshold flagged. For a full ledger, upload a CSV and get the same table for every row.
or drop it here
Free: 3 jobs a dayPro: up to 200 jobs a day · €12.99/month or €89.99/year · Compare plans
| Item | Budget | Actual | Variance | Variance % | Material |
|---|---|---|---|---|---|
| 475 | 9.5% | Yes | |||
| −18 | −2% | No | |||
| 1,110 | 37% | Yes | |||
| Total | 8,900 | 10,467 | 1,567 | 17.61% |
Total variance 1,567 · 2 of 3 rows material
Variance is Actual minus Budget. Variance % is measured against Budget and stays empty when Budget is 0. A row is material when its variance, up or down, reaches the threshold. An uploaded CSV goes through the same rules and returns result.csv, findings.csv and manifest.json.
How the full CSV job works
- 1
Upload one CSV
It needs an Item, Account or Category column plus Budget and Actual columns. Up to 100,000 account-period rows per job.
- 2
Set the threshold
Enter the material variance threshold. Rows that reach it are marked material. No row is removed.
- 3
Download the package
result.csv with every row, findings.csv with the material rows, manifest.json with source hashes and the totals.
Budget vs actual variances from one CSV
What your CSV needs
You upload a CSV with an Item, Account or Category column and separate Budget and Actual columns (budget_amount and actual_amount also work). The tool reads those columns as they are and does not guess them. One job takes up to 100,000 account-period rows. For each row you get the variance as an amount and as a percentage. Where the budget is zero or missing, the percentage stays empty instead of showing an inflated figure.
The files you get back
result.csv holds every row with its variance, so nothing is dropped. findings.csv lists the rows that reach your materiality threshold. manifest.json records the source file and a summary, so a reviewer can tie the numbers back to the CSV you uploaded. Check a few rows by hand against your own ledger before you pass the files on. Your original file stays unchanged.
Threshold, signs and your commentary
The one setting is the material variance threshold. It decides which rows are flagged and does not remove anything. Every row is calculated as Actual minus Budget, so a positive variance means actual came in above budget. That is good news for revenue and bad news for costs, so read the sign by account type. The tool does not explain why a variance happened. That commentary is yours to write, and the figures support your review rather than replace financial judgement.
Questions before you run it
How does my budget CSV have to be laid out?
Budget and actual amounts need explicit columns alongside the account and period, and the tool reads those columns rather than inferring them. Up to 100,000 account-period rows go through in one job.
What does the material variance threshold actually do?
Rows whose variance reaches the amount you set are written to findings.csv as material. Nothing is dropped from result.csv; the threshold only decides what gets flagged for attention.
Does it treat revenue and expense accounts differently?
No. Every row is calculated as Actual minus Budget, so a positive variance means actual came in above budget. For revenue that is favourable, for costs it is not, so read the sign by account type rather than assuming a negative number is bad news.
What percentage does it show when the budget figure is zero?
A percentage against a zero or missing budget is not meaningful, so the row keeps its amount variance and the percentage stays unset instead of showing an inflated figure.
Can I hand this output straight to a board pack?
result.csv and findings.csv are built for hand-off, with manifest.json recording source hashes so a reviewer can tie the numbers back to the file you uploaded. The commentary explaining why a variance happened is still yours to write.