Budget Builder

Dual-mode budget pipeline for FP&A-quality budget management. Mode A (--build) generates an annual budget from 12 months of QBO history with auto-detected se...

samledger67-dotcom

@samledger67-dotcom

What This Skill Does

Dual-mode budget pipeline that builds an annual budget from 12 months of QuickBooks Online history with auto-detected seasonal patterns and configurable growth assumptions, then compares YTD actuals against the saved budget with material variance flags, management commentary stubs, and rolling forecasts. Outputs professional Excel workbooks with 4-6 tabs.

Replaces manual spreadsheet budgeting and variance analysis by automating the full FP&A budget cycle from historical data through board-ready reports.

When to Use It

  • Build an annual operating plan from 12 months of QBO history with seasonal adjustments
  • Run monthly budget vs actual variance analysis with materiality flags
  • Generate management commentary stubs for board-ready variance reports
  • Track which budget categories consistently miss targets using CDC accuracy data
  • Apply custom growth assumptions and manual overrides to specific accounts
  • Produce a rolling forecast updated with YTD actuals and remaining budget

Install

$ openclaw skills install @samledger67-dotcom/budget-builder

Budget Builder + Budget vs Actual

Overview

This pipeline handles the full FP&A budget cycle for QBO-connected clients:

  1. Build an annual budget from QBO history with seasonal patterns + growth assumptions
  2. Compare YTD actuals vs. budget with material flags, commentary, and rolling forecast

Both modes output Excel workbooks in a standard suite format (Calibri, dark header, F/U coloring, CDC log).


Script Location

scripts/pipelines/budget-builder.py

Cache Locations (auto-created)

.cache/budget-builder/{slug}_budget_{year}.json   # Budget file for Mode B
.cache/budget-builder/{slug}_cdc.json             # CDC accuracy tracker

Mode A: Budget Builder (--build)

What It Does

  1. Pulls 12 months of monthly P&L from QBO (trailing from today's last completed month)
  2. Discovers all accounts and their section types (income / cogs / expense)
  3. Loads growth assumptions (global + per-account overrides from JSON)
  4. Auto-detects seasonal patterns for each account (strength ≥ 1.30 = seasonal)
  5. Generates monthly budget: base_monthly_avg × seasonal_index × growth_factor
  6. Applies manual dollar overrides from CSV (full precedence over calculated amounts)
  7. Saves budget to JSON cache + produces Excel workbook

Excel Output (4 tabs)

TabContents
Budget SummaryAnnual KPI totals + monthly Revenue/EBITDA grid
Monthly DetailAll line items × 12 months + Annual total
AssumptionsGrowth method, rate, base avg, annual budget per account
Seasonal PatternsMonthly indices, strength, peak/trough months per account

Usage

# Basic — use default growth rates (revenue +5%, COGS +3%, expenses +3%)
python3 budget-builder.py --slug <client-slug> --build --year 2026

# Custom growth assumptions
python3 budget-builder.py --slug <client-slug> --build --year 2026 --assumptions growth.json

# With manual overrides for specific accounts
python3 budget-builder.py --slug <client-slug> --build --year 2026 --overrides overrides.csv

# Custom output directory
python3 budget-builder.py --slug <client-slug> --build --year 2026 --out ~/Desktop/reports

Assumptions JSON Format

{
  "global": {
    "income":  0.08,
    "cogs":    0.04,
    "expense": 0.03
  },
  "overrides": {
    "Rent": {"method": "flat"},
    "Software Subscriptions": {"method": "pct_growth", "rate": 0.12},
    "Total Income": {"method": "pct_growth", "rate": 0.08}
  }
}

Methods:

  • pct_growth (default) — apply percentage growth rate to trailing average
  • flat — no growth from trailing average (rate = 0)

Overrides CSV Format (--overrides)

For hard-coded monthly amounts that override the calculated budget:

account,section_type,2026-01,2026-02,2026-03,...,2026-12
Rent,expense,3500,3500,3500,...,3500
Owner's Draw,expense,8000,8000,8000,...,8000

Columns: account + section_type + one column per YYYY-MM (or Jan/Feb/Mar shorthand).


Mode B: Budget vs Actual (--compare, default)

What It Does

  1. Loads saved budget (JSON cache or supplied file)
  2. Pulls YTD actuals from QBO P&L (Jan 1 → end of last completed month)
  3. Also pulls each month individually for per-month variance detail
  4. Computes: $ delta, % delta, Favorable/Unfavorable per line item
  5. Flags material variances: revenue ≥5% or ≥$2,500 | expenses ≥10% or ≥$2,500
  6. Generates WHAT/WHY/ACTION/OUTLOOK commentary stubs for flagged variances
  7. Builds rolling forecast: actuals locked for closed months + budget × blend for open months
  8. Updates CDC accuracy log and surfaces systematic bias patterns

Excel Output (6 tabs)

TabContents
Variance SummaryHeadline KPIs + all material variances
Monthly DetailAll line items × closed months (Budget | Actual | Var per month)
Material FlagsSorted by $ variance + monthly trend + action prompts
Rolling ForecastFull-year forecast by account (gray=closed, blue=forecasted)
Management CommentaryWHAT/WHY/ACTION/OUTLOOK per material variance (draft)
CDC LogBudget accuracy tracker + systematic bias analysis

Usage

# Default: compare through last completed month, use cached budget
python3 budget-builder.py --slug <client-slug> --compare

# Specify through month
python3 budget-builder.py --slug <client-slug> --compare --through 2026-02

# Use explicit budget file
python3 budget-builder.py --slug <client-slug> --compare --budget-file ~/Desktop/Budget_client_2026.json

# Use manually-prepared budget CSV
python3 budget-builder.py --slug <client-slug> --compare --budget-file my_budget.csv

# Custom output
python3 budget-builder.py --slug <client-slug> --compare --through 2026-03 --out ~/Desktop/reports

Budget CSV Format (for --budget-file)

If the budget was prepared outside this tool (e.g., in Excel), export as:

account,section_type,2026-01,2026-02,...,2026-12
Total Income,income,50000,52000,...,85000
Cost of Goods Sold,cogs,15000,15600,...,25500
Rent,expense,3500,3500,...,3500

Material Variance Thresholds

Category$ Threshold% Threshold
Revenue≥ $2,500≥ 5%
Expenses≥ $2,500≥ 10%

Both conditions use OR logic — either trigger alone is enough to flag.


Seasonal Pattern Detection

  • Seasonal strength = max_monthly_index / min_monthly_index
  • Accounts with strength ≥ 1.30 are marked IS SEASONAL = YES
  • Monthly index = month_amount / annual_average_monthly
  • Index > 1.0 = above average month; index < 1.0 = below average
  • Peak/trough months are identified and highlighted in the Seasonal Patterns tab

Example: Q4 revenue spike → indices for Oct/Nov/Dec will be > 1.0, Q1-Q2 will be < 1.0. Budget will correctly allocate more to Q4.


Rolling Forecast Logic

Closed months:  Actual values locked in (not adjusted)
Open months:    Budget × blend_factor

blend_factor = (0.70 × ytd_factor) + (0.30 × 1.0)
ytd_factor   = actual_YTD / budget_YTD
  • If actuals are running 15% above budget → open months forecasted at +10.5% above budget
  • If actuals are running 10% below budget → open months forecasted at -7% below budget
  • Blend weight (0.70) is configurable in script FORECAST_TREND_WEIGHT

CDC — Budget Accuracy Tracker

Tracks per-account variance data across all BvA runs. After 2+ periods, identifies:

  • Consistently over-budget accounts (actual > budget 75%+ of the time)
  • Consistently under-budget accounts (actual < budget 75%+ of the time)
  • Average variance magnitude per account

Use case: If Marketing always runs 20% over budget, the CDC will surface this after 2-3 months. Use for next year's budget calibration.

CDC is appended, not overwritten — it accumulates across fiscal years.


Workflow Integration

1. [Month 1 of new FY] Run --build to generate annual budget
   → Saves: .cache/budget-builder/{slug}_budget_{year}.json
   → Share Excel with the reviewer for approval before using in BvA

2. [Each month after close] Run --compare
   → Pulls actuals from QBO automatically
   → Flags variances, generates commentary stubs
   → Updates CDC accuracy log

3. [Mid-year review] Re-run --build with updated assumptions + YTD overrides
   → Export updated budget JSON, pass to --budget-file in --compare

Error Handling

ScenarioBehavior
QBO connection errorRaises RuntimeError with stdout/stderr for diagnosis
Missing month in historyFills with $0; warns in console
Budget file not foundRaises FileNotFoundError with clear message + instructions
Division by zero (budget = $0 for actuals)Returns ZERO variance; flags if actual > $2,500
Invalid CSV column formatSkips unrecognized columns; warns

Dependencies

pip install openpyxl
# Node.js QBO client must be configured with valid auth tokens

Output File Naming

Mode A: Budget_{slug}_{year}.xlsx              (e.g., Budget_acme_2026.xlsx)
Mode B: BvA_{slug}_{month_label}.xlsx         (e.g., BvA_acme_Feb_26.xlsx)
Cache:  .cache/budget-builder/{slug}_budget_{year}.json
CDC:    .cache/budget-builder/{slug}_cdc.json

Example: Full FY2026 Cycle

# January 2026: Build the budget
python3 budget-builder.py --slug <client-slug> --build --year 2026 \
  --assumptions clients/<client-slug>/budget-assumptions-2026.json

# February 28 (after Jan close):
python3 budget-builder.py --slug <client-slug> --compare --through 2026-01

# March 31 (after Feb close):
python3 budget-builder.py --slug <client-slug> --compare --through 2026-02

# Q2 reforecast (after March close):
python3 budget-builder.py --slug <client-slug> --compare --through 2026-03
# Review CDC log — which categories need budget adjustment?
# Build revised budget with Q1 actuals as overrides:
python3 budget-builder.py --slug <client-slug> --build --year 2026 \
  --overrides clients/<client-slug>/q1-actuals-overrides.csv

Top skills in this category

Stock Analysis

@udiedrichsen

Analyze stocks and cryptocurrencies using Yahoo Finance data. Supports portfolio management, watchlists with alerts, dividend analysis, 8-dimension stock scoring, viral trend detection (Hot Scanner), and rumor/early signal detection. Use for stock analysis, portfolio tracking, earnings reactions, crypto monitoring, trending stocks, or finding rumors before they hit mainstream.

25959k

Stock Market Pro

@kys42

Yahoo Finance (yfinance) powered stock analysis skill: quotes, fundamentals, ASCII trends, high-resolution charts (RSI/MACD/BB/VWAP/ATR), plus optional web a...

15532k

Stock Watcher

@robin797860

Manage and monitor a personal stock watchlist with support for adding, removing, listing stocks, and summarizing their recent performance using data from 10jqka.com.cn. Use when the user wants to track specific stocks, get performance summaries, or manage their watchlist.

8837k

A股量化 AkShare

@mbpz

A股量化数据分析工具,基于AkShare库获取A股行情、财务数据、板块信息等。用于回答关于A股股票查询、行情数据、财务分析、选股等问题。

10232k

Intelligent Stocks Screener

@financial-ai-analyst

基于东方财富数据库,支持通过自然语言输入筛选A港美股、基金、债券等多种资产,支持多元指标筛选,含技术面、消息面、基本面及市场情绪等,可用于全球资产速筛、跨市场监控、投资组合构建、策略回测等场景。返回结果包含数据说明及 csv 文件。Natural language screener for investment...

10627k