You set a budget at the start of the quarter, and now reality has diverged from it — but a table of red and green cells doesn't tell anyone why, or which gaps matter. "Marketing is 30% over" could be a problem, a timing shift, or a deal you chose to chase. This is the monthly loop that turns a variance report into an explanation: line up budget against actuals, flag the gaps that cross your threshold, and force each one to be explained as price, volume, or timing — so leadership gets a story they can act on, not a spreadsheet they have to interpret.
- Your budget for the period —
budget-2026.csvwith the planned amount per category per month. - This month's actuals, already cleaned and categorized via Make a messy export trustworthy and your
categorization-rules.md— so budget and actuals use the same category buckets, or the comparison is meaningless. - A materiality threshold — the variance size worth explaining (e.g. "flag anything over $2,000 or 10%") — so the report surfaces signal, not every rounding difference.
-
Align budget and actuals to the same buckets first
A variance report is only as good as the alignment underneath it. In Claude Desktop, open the folder with both files and ask in the chat — no terminal needed. Before any comparison, make Claude prove the two files use the same categories — a budget bucket that doesn't exist in actuals silently shows up as a 100% variance that isn't real.
you askOpen budget-2026.csv and this month's actuals. Before comparing anything, confirm both use the same category names and the same month format. List any category that's in one file but not the other, and any name that's close-but-not-identical (Software vs Software & Tools). Don't compute variances yet — I just want the buckets aligned.what you get back An alignment check: "Both files share 9 categories. 'Professional Fees' is in the budget but not in actuals (no spend yet — true zero, not missing). 'SaaS' in actuals maps to 'Software' in the budget — confirm before comparing." Catching this prevents a fake variance from a naming mismatch.
Most alarming variances are a category-alignment problem, not a spending problem. Align the buckets before you trust a single red cell — the same discipline as confirming a reconciliation's join key.
-
Compute the variances and flag what crosses the threshold
Ask for the gaps in dollars and percent, then filter to the ones that actually matter. A variance report that flags everything flags nothing.
you askNow compute budget vs actual per category: planned, actual, variance in dollars, variance in percent, and over/under. Then apply my threshold — flag only variances over $2,000 or 10%, whichever is larger — and sort the flagged ones biggest-first. Show me the full table but make the flagged rows obvious.what you get back A full variance table with the material ones surfaced: "Marketing: planned 20,000, actual 26,500, +6,500 / +33% — FLAGGED. Hosting: planned 18,000, actual 18,300, +300 / +2% — within tolerance." The three or four rows that need a sentence are now the ones standing out.
-
Force each variance into a real explanation
"Over by 6,500" is a number, not an explanation. Make Claude propose whether each gap is price, volume, or timing — the three things a variance can actually be — and hand it the context only you know so the why is real, not invented.
you askFor each flagged variance, propose the most likely cause and classify it as price (we paid more per unit), volume (we bought more), or timing (it landed in a different month than budgeted). Here's the context I know: the Marketing overage is a conference we approved mid-quarter; the Software gap is an annual renewal that hit a month early. Fold my context in, and where you're guessing, say so — don't invent a cause.what you get back A classified explanation per gap: "Marketing +6,500 — volume, approved conference spend (your context), non-recurring. Software +4,000 — timing, annual renewal pulled forward one month, not a real overrun. Travel +2,200 — cause unclear, flagged to investigate." Each gap is now a cause, not just a delta.
Price / volume / timing is the whole trick. A timing variance reverses next month and needs no action; a price or volume variance is a real trend. Classifying each is what tells leadership which gaps to actually worry about.
-
Write the variance narrative and keep it re-runnable
End with the short narrative leadership reads and a verifiable appendix underneath — then save it so next month is an update, not a rebuild.
you askWrite a short budget-vs-actuals narrative under 200 words: total over/under for the period, the 3 variances worth explaining (with their price/volume/timing cause), and which are one-off vs ongoing. Below it, add the full variance table as an appendix. Save it as budget-vs-actuals-may.md so I can drop in next month's actuals and re-run.what you get back A
budget-vs-actuals-may.mdwith a tight narrative on top — "$4,300 over plan for the month, but $4,000 is a renewal that pulled forward; underlying spend is on budget" — and the full table below, traceable and reusable next month.
- Feeds the leadership summary and the close: the variance narrative drops straight into Brief leadership in plain English as the 'why' behind the numbers, and into Run month-end close as the budget-discipline step — run this first and both get easier.
- Rolling forecast: once a few months are in, ask Claude to re-forecast the rest of the year off actuals-to-date — the budget becomes a living forecast, not a frozen plan you've already blown past.
- Quarter and YTD views: add a year-to-date column so a one-month timing blip doesn't read as a trend — a category can be over for the month but on-budget for the quarter.
- Run it on a schedule (Power Track): once stable, a scheduled agent (see the Features tab) can produce the variance table when the month's actuals land and surface only the flagged rows — but a human writes the why and owns the narrative.
- Align the buckets before you trust a variance. A category-name mismatch produces an alarming 100% gap that is pure noise — the same way a bad join key wrecks a reconciliation. Confirm the alignment first, every time.
- Timing is not overspending. The most common false alarm is a renewal or invoice that landed a month early or late. Classifying each variance as price / volume / timing is what stops a self-reversing timing blip from triggering a budget panic.
- Don't let Claude invent a cause. If the reason for a gap isn't in the context you provided, the report should say 'cause unclear, investigating' — a plausible-but-wrong explanation sends someone chasing the wrong fix.
- Budget and actuals are sensitive planning data. Keep them in your approved workspace, swap anything truly confidential for a
[placeholder], and remember the variance call — act, ignore, or escalate — is a human's, not Claude's.
you'll end up with A monthly budget-vs-actuals report where every material variance is aligned, classified as price/volume/timing, and explained in plain English — backed by a verifiable table, in a reusable template you update each month instead of rebuilding.
Questions people ask
- Why align the categories before computing variances?
- Because a category that's named differently in the budget and the actuals — Software vs SaaS, or a bucket that exists in one file but not the other — shows up as a huge variance that isn't real. Most alarming gaps are an alignment problem, not a spending problem, so confirming the two files use the same buckets first is the same discipline as verifying a reconciliation's join key.
- What does classifying a variance as price, volume, or timing actually buy me?
- It tells leadership which gaps to worry about. A timing variance — an invoice that landed a month early — reverses next month and needs no action. A price or volume variance is a real trend that might. Forcing every gap into one of those three causes turns a wall of red cells into a short list of things that actually matter.
- How do I keep the report from flagging every tiny difference?
- Set a materiality threshold — flag only variances over a dollar floor or a percentage, whichever is larger — so the report surfaces the three or four rows worth a sentence instead of every rounding difference. A variance report that flags everything flags nothing.
- Can Claude explain why a variance happened on its own?
- Only partly. Claude can classify a gap as price, volume, or timing from the data, but the real *why* — the approved conference, the deal that slipped, the renewal pulled forward — is context only you have. Hand it that context so the narrative explains causes; where a cause isn't provided, it should flag 'unclear, investigating' rather than invent one.