WoluTools

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

CSV with Item, Budget and Actual columns · up to 100,000 account-period rows
Free account needed to upload · 3 free jobs a day

No file at hand? Try the sample table

Free: 3 jobs a dayPro: up to 200 jobs a day · €12.99/month or €89.99/year · Compare plans

Try it now · sample figures · runs in your browserEdit Budget or Actual and the variance updates
Sample budget vs actual variance table
ItemBudgetActualVarianceVariance %Material
4759.5%Yes
−18−2%No
1,11037%Yes
Total8,90010,4671,56717.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.

BringCSV
GetVariance CSV, materiality findings and manifest
PrivacyEncrypted source · 24-hour result

How the full CSV job works

  1. 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. 2

    Set the threshold

    Enter the material variance threshold. Rows that reach it are marked material. No row is removed.

  3. 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.