Every month, I sit down with a spreadsheet full of actuals vs. budget numbers and write the same kind of narrative analysis. Revenue was up here, OpEx was over there, headcount came in under plan. It's important work, but the first draft is largely mechanical. So I decided to build a bot that handles that first draft for me.
The idea is simple: feed Claude a structured table of monthly actuals versus budget by line item, and have it generate a narrative variance analysis that I can review, edit, and send to leadership. Not a replacement for judgment, but a replacement for the blank page.
## The setup
I start by exporting my monthly close data into a clean CSV with four columns: `Line Item`, `Actual`, `Budget`, and `Variance %`. I strip out subtotals and formatting so the model gets clean inputs. Then I pass it to Claude with a system prompt that sets the tone and structure.
Here's the core of the prompt I landed on after a few iterations:
```
You are a senior FP&A analyst writing a monthly variance commentary
for the CFO. Given the data below, produce a narrative that:
1. Leads with the 3-5 most material variances by dollar impact
2. Groups related items (e.g., all revenue lines, all OpEx lines)
3. Distinguishes between timing differences and true run-rate changes
4. Flags anything that needs follow-up or decision
5. Uses plain language, not jargon (the audience is a busy executive)
Format: 2-3 paragraphs, no bullet points, under 300 words.
Data:
{paste CSV here}
```
## What I learned
The first few outputs were decent but generic. The breakthrough was adding context. I started appending a short section like: "Additional context: We hired 3 engineers in January that were budgeted for March. The Q1 marketing campaign pulled $40K of spend forward from Q2." That context layer turns a mediocre summary into something genuinely useful.
I also found that asking Claude to "distinguish between timing differences and true run-rate changes" was the single most valuable instruction. Without it, every variance gets treated the same. With it, the narrative actually prioritizes what matters.
## Where it fits in my workflow
I run this at the end of each monthly close cycle. It takes about five minutes: export the data, paste it into the prompt, review the output, and make edits. The bot handles maybe 70% of the writing, and I handle the judgment calls: the "why this matters" and "what we should do about it" parts.
It's not magic. It's a well-structured prompt that saves me an hour of drafting time every month. And because the prompt is reusable, consistency across months has actually improved. If you want context on why automating this stuff matters so much, I wrote about the [[signal/Seven Truths About FP&A|realities of FP&A work]] that make tools like this a sanity saver.
If you're doing variance analysis regularly, I'd encourage you to try this. Start with clean data and a clear prompt, and iterate from there. The model is surprisingly good at financial narrative once you give it the right guardrails.
---
Related: [[notebook/MBA Forecasting Notes|MBA forecasting notes]]
← [[Lab|Back to /lab]]