Excel · ChatGPT

How to Build a Budget vs Actual Report in Excel with ChatGPT

Paste your budget and actuals into ChatGPT and get back a formula-driven variance report — dollar and percentage variances, favourable/unfavourable labels, threshold flags, and a blank commentary column ready for your team.

Choose your situation — copy the prompt:
ROLE
You are a senior financial analyst preparing a monthly budget variance
report in Excel.

OBJECTIVE
Take my budget and actual figures and produce a variance analysis report
with dollar and percentage variances, favourable/unfavourable labels,
threshold-based flags, and a blank commentary column.

DATA
Reporting period: [e.g. January–June 2025 / Q2 2025 / Full Year 2025]

Budget vs Actual (columns: Line Item, Type [Revenue or Expense], Budget,
Actual):
[Paste your data here]

VARIANCE RULES
- Revenue lines: Variance $ = Actual − Budget. Positive = Favourable.
- Expense lines: Variance $ = Budget − Actual. Positive = Favourable.
- Variance % = Variance $ ÷ Budget, formatted as percentage.

THRESHOLD RULES
Flag any line where: |Variance %| > [5]% OR |Variance $| > [$5,000]
Use "⚠ Review" for flagged items, "—" for others.

CONSTRAINTS
- Add subtotal rows for: Gross Profit (Revenue − COGS), Operating Income,
  Net Income. Calculate variances on subtotals too.
- Apply conditional formatting: green fill for favourable, red fill for
  unfavourable.
- Include a blank Commentary column after the Flag column — do NOT fill it in.
- Do NOT invent budget or actual figures.
- Do NOT fabricate explanations for variances.
- Do NOT change my line-item names or reorder them.

OUTPUT FORMAT
- Tab-separated table ready to paste into Excel.
- Formulas written explicitly (e.g. =C2-B2) so I can verify the logic.

Replace all bracketed sections with your real data, then paste the prompt into ChatGPT.

My variance report is flagging too many lines to be useful — I want to
tighten the threshold.

Here is my current variance data (columns: Line Item, Type, Budget, Actual,
Variance $, Variance %):
[Paste your variance data here]

Current threshold: flag if |Variance %| > [5]% OR |Variance $| > [$5,000]
New threshold: flag only if |Variance %| > [10]% AND |Variance $| > [$10,000]

Recalculate the Flag column using the new AND-based threshold and tell me
how many fewer lines are now flagged.

Switch OR to AND when a report is flagging so many lines that nothing stands out — the goal is 3-6 flagged items per report.

I need to compare year-to-date actuals against the YTD portion of my
annual budget — not the full-year figure.

Reporting period: YTD through [month, e.g. June 2025] of [6] months out
of a 12-month annual budget.

Annual budget and YTD actuals (columns: Line Item, Type, Annual Budget,
YTD Actual):
[Paste your data here]

Please prorate each Annual Budget figure to a YTD Budget by multiplying
by [6]/12 (or the correct fraction for non-linear items I flag), then
calculate variance using YTD Actual against YTD Budget — not the annual
figure. Flag any line where I should use a non-linear prorating method
(e.g. seasonal revenue, annual insurance premiums).

Comparing six months of actuals against a full-year budget makes every expense line look artificially favourable.

Before — budget and actuals are present, analysis columns are empty
ExcelHomeFormulasData
E2
fx
ABCDEFG
1Line ItemTypeBudgetActualVar £Var %Flag
2Revenue — UKRevenue£420,000£389,500???
3Revenue — EURevenue£180,000£201,400???
4COGSExpense£210,000£228,300???
5PayrollExpense£145,000£152,400???
6MarketingExpense£48,000£39,200???
7T&EExpense£12,000£18,750???
The source numbers are there, but there is no variance direction, percentage, F/U logic, materiality flag, or commentary field.
After — formulas turn the same rows into a review-ready variance report
ExcelHomeFormulasConditional Formatting
E2
fx
=IF(B2="Revenue",D2-C2,C2-D2)
ABCDEFGH
1Line ItemBudgetActualVar £Var %F/UFlagCommentary
2Revenue — UK£420,000£389,500−£30,500−7.3%U⚠ Review
3Revenue — EU£180,000£201,400+£21,400+11.9%F⚠ Review
4COGS£210,000£228,300−£18,300−8.7%U⚠ Review
5Gross Profit£390,000£362,600−£27,400−7.0%U⚠ Review
6Payroll£145,000£152,400−£7,400−5.1%U⚠ Review
7Marketing£48,000£39,200+£8,800+18.3%F⚠ Review
8T&E£12,000£18,750−£6,750−56.3%U⚠ Review
Formula logic
Var £:
=IF(Type="Revenue",Actual-Budget,Budget-Actual)

Var %:
=Var£/Budget

Flag:
=IF(OR(ABS(Var%)>5%,ABS(Var£)>5000),"⚠ Review","—")

Marketing is correctly flagged because 18.3% > 5%. ✓
Before — the 5% OR £5k rule creates too many review items
ExcelHomeFormulasConditional Formatting
G2
fx
=IF(OR(ABS(F2)>5%,ABS(E2)>5000),"⚠ Review","—")
AEFG
2Revenue — UK−£30,500−7.3%⚠ Review
3Revenue — EU+£21,400+11.9%⚠ Review
4COGS−£18,300−8.7%⚠ Review
5Payroll−£7,400−5.1%⚠ Review
6Marketing+£8,800+18.3%⚠ Review
7T&E−£6,750−56.3%⚠ Review
8Software−£320−4.2%
6 of 7 lines are flagged. Software is correctly unflagged because it breaches neither the 5% nor the £5,000 threshold.
After — 10% AND £10k isolates only truly material exceptions
ExcelHomeFormulasConditional Formatting
G2
fx
=IF(AND(ABS(F2)>10%,ABS(E2)>10000),"⚠ Review","—")
AEFG
2Revenue — UK−£30,500−7.3%
3Revenue — EU+£21,400+11.9%⚠ Review
4COGS−£18,300−8.7%
5Payroll−£7,400−5.1%
6Marketing+£8,800+18.3%
7T&E−£6,750−56.3%
8Software−£320−4.2%
New threshold result
Old rule: >5% OR >£5,000
Flagged: 6 of 7

New rule: >10% AND >£10,000
Flagged: 1 of 7

Only Revenue — EU breaches BOTH:
11.9% and £21,400. ✓
Before — six months of actuals are compared with a full-year budget
ExcelHomeFormulasData
D2
fx
=C2-B2
ABCDEF
1Line ItemAnnual BudgetYTD ActualVar £Var %Interpretation
2Revenue£600,000£289,500−£310,500−51.8%Misleading
3Payroll£290,000£152,400+£137,600+47.4%Misleading
4Marketing£96,000£39,200+£56,800+59.2%Misleading
5T&E£24,000£18,750+£5,250+21.9%Misleading
The arithmetic is valid, but the comparison basis is wrong: 6-month actuals are being measured against 12 months of budget.
After — annual budget is prorated to a like-for-like YTD budget
ExcelHomeFormulasData
C2
fx
=B2*6/12
ABCDEFG
1Line ItemAnnual BudgetYTD BudgetYTD ActualVar £Var %Flag
2Revenue£600,000£300,000£289,500−£10,500−3.5%
3Payroll£290,000£145,000£152,400−£7,400−5.1%
4Marketing£96,000£48,000£39,200+£8,800+18.3%
5T&E£24,000£12,000£18,750−£6,750−56.3%
YTD basis
YTD Budget = Annual Budget × 6/12

Revenue:
£600,000 × 6/12 = £300,000
£289,500 − £300,000 = −£10,500 (−3.5%)

T&E:
£24,000 × 6/12 = £12,000
£12,000 − £18,750 = −£6,750 (−56.3%) ✓

Use a non-linear budget profile for seasonal items instead of simple proration.
Why the variance report is misleading — the 4 most common causes
Period mismatch
Half-year actuals vs full-year budget makes everything look favourable
Most common
Wrong variance direction
Expense variance calculated as Actual − Budget instead of Budget − Actual
Most common
Threshold too loose
Every line gets flagged → nothing stands out, the meeting has no focus
Easy fix
Mismatched line-item names
"Marketing" in budget vs "Marketing Costs" in actuals breaks row matching
Invisible

Build a budget vs actual report step by step

Build a budget variance report with ChatGPT — 5 steps
1

Label each line as Revenue or Expense

This is what makes the variance direction work. Revenue: Actual − Budget (positive = good). Expense: Budget − Actual (positive = good). Without the Type column, ChatGPT has to guess.

2

Match the reporting period exactly

Comparing six months of actuals against a full-year budget is the most common mistake in variance analysis. If you're reporting Q2 YTD, provide the Q2 YTD budget — not the annual figure.

3

Define your flag threshold

Pick one: percentage-only (flag if >10%), dollar-only (flag if >$50k), or combined. Most mid-size companies use combined with OR logic: flag if >5% or >$5,000.

4

Use consistent line-item names

"Marketing" in budget and "Marketing Costs" in actuals creates a mismatch. ChatGPT matches rows by exact text. Standardise before pasting.

5

Leave the commentary column blank

The numbers come from formulas. The explanations come from your team — the people who know why a line went 30% over. ChatGPT can draft placeholder commentary, but your team should own the real story.

Period mismatch trap: Comparing six months of actuals against an annual budget will show every expense line as "favourable" and every revenue line as "unfavourable" — because you're only halfway through. Always compare like-for-like periods.

Frequently asked questions

Should variance be calculated as Budget minus Actual or Actual minus Budget?
Convention varies. For revenue lines, Actual minus Budget is common so a positive number means favourable. For expense lines, Budget minus Actual is typical so under-spending shows as positive. The prompt asks you to specify your convention and ChatGPT applies it consistently across all line items.
What variance threshold should trigger a flag?
A common rule flags any line where the variance exceeds 5-10 percent or a fixed dollar amount like 5000. The right threshold depends on materiality for your business. The prompt lets you set both a percentage and an absolute amount, combined with AND or OR logic.
Can ChatGPT write the variance commentary for me?
ChatGPT can draft commentary based on the numbers — for example noting that a line is 12 percent over budget. But meaningful explanations require business context only your team has. Use ChatGPT's draft as a starting point, then add the real reasons.
How do I handle budget variance for a partial period?
Compare year-to-date actuals against the YTD portion of the annual budget — not the full year. The prompt includes a reporting period field so ChatGPT labels the report correctly and can prorate if needed.
What is the difference between a favourable and unfavourable variance?
A favourable variance improves the bottom line — revenue above budget or expenses below budget. An unfavourable variance hurts the bottom line — revenue below budget or expenses above budget. The label depends on the line type, not just the sign of the number.

Related Excel workflows