Budget vs. Actual Variance Analysis Skill
Perform rigorous period-end budget vs. actual analysis. This skill guides Sam Ledger through pulling actuals, comparing against budget, calculating variances, identifying root causes, drafting management commentary, and producing a reforecast update.
When to Use This Skill
Trigger phrases:
- - "Run budget vs. actual for [month/quarter]"
- "Explain our variances this month"
- "Why did we miss/beat revenue?"
- "Prepare the management report for [period]"
- "Update the rolling forecast based on actuals"
- "Board needs BvA commentary"
- "What drove the EBITDA miss?"
- "Reforecast the rest of the year"
NOT for:
- - Building the original budget — use INLINECODE0
- Tax filings or tax provision work — use compliance workflows
- Real-time bookkeeping or transaction categorization — use
qbo-automation or INLINECODE2 - Multi-entity consolidations with intercompany eliminations (requires dedicated consolidation tooling)
- Strategic planning or multi-year long-range planning (LRP)
Core Concepts
Variance Types
| Type | Formula | Meaning |
|---|
| Absolute Variance | Actual − Budget | Dollar difference |
| Percentage Variance |
(Actual − Budget) / Budget × 100 | Magnitude relative to budget |
| Favorable (F) | Revenue: Actual > Budget / Expense: Actual < Budget | Better than plan |
| Unfavorable (U) | Revenue: Actual < Budget / Expense: Actual > Budget | Worse than plan |
Materiality Thresholds (Default — customize per engagement)
CODEBLOCK0
Variance Root Causes — Taxonomy
Revenue Variances:
- - Volume variance: More/fewer units/customers than planned
- Price/rate variance: ASP or pricing differed from assumption
- Mix variance: Different product/segment mix than modeled
- Timing variance: Deal closed in wrong period (pulled forward or pushed out)
- New vs. existing: Over/under-performance in specific cohort
Expense Variances:
- - Headcount timing: Hire later/earlier than budgeted
- Contractor/vendor: Over/under-spend vs. plan
- One-time items: Non-recurring expenses not in budget
- Volume-linked: COGS, sales commission scaled with revenue
- Pricing/inflation: Vendor price changes not modeled
Step-by-Step Workflow
Step 1: Collect Inputs
CODEBLOCK1
Step 2: Normalize Data
Map actuals to budget line items. Standard P&L mapping:
CODEBLOCK2
Step 3: Calculate Variances
For each line item:
CODEBLOCK3
Step 4: Build the Variance Table
Standard Output Format:
CODEBLOCK4
Step 5: Root Cause Analysis
For each flagged variance, drill down:
Revenue miss example (Product Revenue -$11,500 / -9.6%):
CODEBLOCK5
S&M overrun example ($2,400 / +9.6% unfavorable):
CODEBLOCK6
Step 6: Management Commentary
Draft in this structure for each material variance:
CODEBLOCK7
Example commentary:
EBITDA — Unfavorable $7,500 (-16.7%)
WHAT: March EBITDA of $37,500 missed the $45,000 budget by $7,500, driven by a revenue shortfall partially offset by lower R&D spend.
WHY: Product revenue missed by $11,500 due to 2 enterprise deals slipping to April (pipeline confirmed, not lost). S&M ran $2,400 over budget on a one-time conference registration. R&D came in $1,500 favorable as one contractor engagement started late.
ACTION: The 2 slipped deals are expected to close in April (both in final contract stage). Conference registration expensed — not recurring. R&D contractor now onboarded; expect full burn starting April.
OUTLOOK: Revising Q2 forecast to front-load the 2 slipped deals. Full-year EBITDA forecast unchanged at $540,000.
Step 7: Update Rolling Forecast
After analyzing actuals, update the remainder of the year:
CODEBLOCK8
Reforecast summary table:
CODEBLOCK9
Output Formats
1. Management Report (Narrative + Table)
Full commentary with variance table, root causes, and reforecast. For CFO/CEO/Board use.
2. Quick BvA Flash (1 Page)
Three sections only:
- - Headline KPIs: Revenue, Gross Margin, EBITDA, Cash (actual vs budget, one line each)
- Top 3 variances with one-sentence explanations
- Reforecast change vs. prior
3. Structured JSON (for downstream processing)
{
"period": "2026-03",
"period_type": "month",
"generated_at": "2026-04-02",
"summary": {
"total_revenue_budget": 150000,
"total_revenue_actual": 142700,
"total_revenue_variance_abs": -7300,
"total_revenue_variance_pct": -4.87,
"ebitda_budget": 45000,
"ebitda_actual": 37500,
"ebitda_variance_abs": -7500,
"ebitda_variance_pct": -16.67
},
"line_items": [
{
"name": "Product Revenue",
"budget": 120000,
"actual": 108500,
"variance_abs": -11500,
"variance_pct": -9.58,
"favorable": false,
"material": true,
"root_cause": "2 enterprise deals slipped to April (pipeline confirmed)",
"action": "Deals expected April close; no change to full-year forecast"
}
],
"reforecast": {
"full_year_revenue_original": 1800000,
"full_year_revenue_current": 1762000,
"full_year_ebitda_original": 540000,
"full_year_ebitda_current": 512500
}
}
QBO Integration Workflow
When actuals come from QuickBooks Online (via qbo-automation):
CODEBLOCK11
Common QBO mapping pitfalls:
- - QBO may break out subcategories that are lumped in budget → aggregate up
- Owner draws in QBO are not an expense → exclude from P&L analysis
- Payroll taxes may be in separate QBO accounts → roll up to loaded headcount cost
Handling Common Edge Cases
Budget is $0 for a line item that has actuals
CODEBLOCK12
Prior period restatements
CODEBLOCK13
Multiple departments / cost centers
CODEBLOCK14
Seasonal businesses
Include YoY comparison alongside BvA:
March 2026 Actual vs. March 2026 Budget (primary)
March 2026 Actual vs. March 2025 Actual (context)
Flag: is variance seasonal (expected) or structural (new issue)?
Metrics Glossary
| Term | Definition |
|---|
| BvA | Budget vs. Actual |
| F |
Favorable (better than plan) |
| U | Unfavorable (worse than plan) |
| pp | Percentage points (for margin comparisons) |
| YTD | Year-to-date (cumulative from Jan 1) |
| QTD | Quarter-to-date |
| MTD | Month-to-date |
| Reforecast | Updated projection for remainder of year, based on actuals to date |
| Flash | Quick preliminary BvA before full close (estimates OK) |
| Hard close | Final, locked actuals (no further adjustments) |
| Soft close | Preliminary actuals, subject to accruals and adjustments |
Integration Points
- -
qbo-automation — Pull actuals directly from QuickBooks Online startup-financial-model — Original budget/forecast data sourcekpi-alert-system — Trigger alerts when variance thresholds are breachedreport-generator — Format BvA output into board-ready PDF or deckfinancial-analysis-agent — Deep-dive trend analysis when root cause isn't obvious
Example Intake Prompt
"March is closed. Budget had us at $150k revenue and $45k EBITDA. Actuals came in at $142k revenue and $37.5k EBITDA. Product was $11.5k short — two enterprise deals slipped. Service came in $4.2k over. S&M ran $2.4k over on a conference. R&D was $1.5k under — contractor started late. Draft the BvA table, root cause summary, and board commentary. Flag reforecast impact."
Sam will:
- 1. Build the variance table with F/U flags and materiality indicators
- Write root-cause summaries for all flagged lines
- Draft management commentary in WHAT/WHY/ACTION/OUTLOOK format
- Produce the reforecast delta (timing vs. structural adjustments)
- Output structured JSON if downstream processing is needed
预算与实际差异分析技能
执行严格的期末预算与实际分析。本技能指导Sam Ledger提取实际数据、与预算对比、计算差异、识别根本原因、起草管理层评论并生成重新预测更新。
何时使用本技能
触发短语:
- - 运行[月份/季度]的预算与实际对比
- 解释本月的差异
- 为什么我们未达成/超额完成收入?
- 准备[期间]的管理报告
- 基于实际数据更新滚动预测
- 董事会需要BvA评论
- 是什么导致了EBITDA未达标?
- 重新预测本年度剩余期间
不适用于:
- - 编制原始预算——请使用startup-financial-model
- 税务申报或税务准备金工作——请使用合规工作流
- 实时记账或交易分类——请使用qbo-automation或expense-categorization
- 含公司间抵消的多实体合并(需要专门的合并工具)
- 战略规划或多年长期规划(LRP)
核心概念
差异类型
| 类型 | 公式 | 含义 |
|---|
| 绝对差异 | 实际 − 预算 | 金额差异 |
| 百分比差异 |
(实际 − 预算) / 预算 × 100 | 相对于预算的幅度 |
| 有利差异 (F) | 收入:实际 > 预算 / 费用:实际 < 预算 | 优于计划 |
| 不利差异 (U) | 收入:实际 < 预算 / 费用:实际 > 预算 | 差于计划 |
重要性阈值(默认值——可根据业务定制)
收入项目: ≥ $5,000 或 ≥ 预算项目的 5% → 需调查
费用项目: ≥ $2,500 或 ≥ 预算项目的 10% → 需调查
EBITDA总额: ≥ $10,000 或 ≥ 预算EBITDA的 5% → 需董事会评论
年初至今累计: 结转月度差异;若YTD超过全年重要性阈值则标记
差异根本原因——分类体系
收入差异:
- - 数量差异:单位/客户数多于或少于计划
- 价格/费率差异:平均售价或定价与假设不符
- 组合差异:产品/细分市场组合与模型不同
- 时间差异:交易在错误期间完成(提前或推迟)
- 新客户vs.现有客户:特定客户群表现超预期或低于预期
费用差异:
- - 人员时间:招聘晚于或早于预算
- 承包商/供应商:支出超预算或低于预算
- 一次性项目:预算中未包含的非经常性费用
- 与数量挂钩:与收入规模相关的销售成本、销售佣金
- 定价/通胀:未建模的供应商价格变动
分步工作流程
第一步:收集输入
必需:
□ 期间(月份、季度、年初至今)
□ 预算/预测文件(CSV、Sheets或输入数据)
□ 实际数据文件或QBO导出(相同期间、相同科目映射)
□ 会计科目表映射(若预算和实际使用不同标签)
□ 重要性阈值(若未指定则使用默认值)
□ 受众(内部管理层、董事会、投资者)
可选:
□ 上期实际数据(用于趋势背景)
□ 上年同期数据(用于同比背景)
□ 上期现有叙述
第二步:标准化数据
将实际数据映射到预算项目。标准损益表映射:
预算标签 → QBO/实际数据对应项
收入 → 总收入
销售成本 → 销售成本 / 直接成本
毛利润 → (计算得出)
销售与市场推广 → 广告、销售佣金、市场推广费用
研发/工程 → 合同工(技术)、软件工具
行政管理费用 → 薪资(行政)、法律、会计、保险
总运营费用 → (上述各项之和)
EBITDA → (毛利润 − 总运营费用)
第三步:计算差异
对于每个项目:
python
差异计算逻辑
for each line_item:
absolute_var = actual - budget
pct_var = (actual - budget) / abs(budget) * 100 # 处理预算为0的边缘情况
if isrevenueline:
favorable = actual > budget
else: # 费用项目
favorable = actual < budget
flag = abs(pctvar) >= thresholdpct or abs(absolutevar) >= thresholddollar
第四步:构建差异表
标准输出格式:
期间:2026年3月 | 预算与实际对比
项目 | 预算 | 实际 | 金额差异 | 百分比差异 | 有利/不利 | 标记
-------------------|-----------|-----------|-----------|--------|-----|------
收入 | | | | | |
产品收入 | $120,000 | $108,500 | ($11,500) | -9.6% | U | ⚠️
服务收入 | $30,000 | $34,200 | $4,200 | +14.0% | F | ⚠️
总收入 | $150,000 | $142,700 | ($7,300) | -4.9% | U |
| | | | | |
销售成本 | $45,000 | $43,100 | $1,900 | +4.2% | F |
毛利润 | $105,000 | $99,600 | ($5,400) | -5.1% | U | ⚠️
毛利率 | 70.0% | 69.8% | -0.2个百分点 | | |
| | | | | |
运营费用 | | | | | |
销售与市场推广 | $25,000 | $27,400 | $2,400 | +9.6% | U | ⚠️
研发 | $20,000 | $18,500 | ($1,500) | -7.5% | F |
行政管理 | $15,000 | $16,200 | $1,200 | +8.0% | U |
总运营费用 | $60,000 | $62,100 | $2,100 | +3.5% | U |
| | | | | |
EBITDA | $45,000 | $37,500 | ($7,500) | -16.7% | U | 🚨
EBITDA利润率 | 30.0% | 26.3% | -3.7个百分点 | | |
第五步:根本原因分析
对于每个标记的差异,深入分析:
收入未达标示例(产品收入 -$11,500 / -9.6%):
根本原因分析:
- - 数量:完成8笔交易 vs. 预算10笔 = 少2笔交易
- 价格:平均交易规模$13,563 vs. 预算$12,000 → 每笔交易+$1,563(有利组合)
- 净额:少2笔交易 × $12,000平均售价 = -$24,000数量未达标
+ 8笔交易 × $1,563价格溢价 = +$12,500价格/组合抵消
= 报告净额($11,500) ✓
评估:数量问题,非定价问题。销售管道延迟——2笔交易推迟至4月。
销售与市场推广超支示例($2,400 / +9.6%不利):
根本原因分析:
- - 计划:$15k付费广告 + $10k薪资
- 实际:$15k付费广告 + $10k薪资 + $2,400会议注册费(未预算)
- 分类:一次性/非经常性——下月不会重复
评估:良性。为明年做预算;无需采取行动。
第六步:管理层评论
按以下结构为每个重大差异起草:
[项目] — [差异方向] 金额 $[金额]([百分比]%)
是什么:[用通俗语言说明数字含义]
为什么:[根本原因——具体而非笼统]
行动:[我们正在采取的措施,或为何无需行动]
展望:[对全年预测的影响]
示例评论:
EBITDA — 不利 $7,500(-16.7%)
是什么:3月EBITDA为$37,500,未达到$45,000的预算,差额$7,500,主要由于收入缺口,部分被较低的研发支出抵消。
为什么:产品