Financial Modeling skill for Codex

Runway you can trace back to one input. Codex builds startup financial models the way an FP&A lead would: one assumptions tab, revenue and headcount builds that match how the company sells, a monthly P&L and cash flow, and a single scenario switch. Every output traces to a labelled input, hardcodes inside formulas get flagged, and a checks tab proves cash and the balance sheet tie before anyone sees runway.

  • Business & Operations
  • $financial-modeling
  • 199 lines
  • 2 files
  • ~2,400 tokens
  • MIT
  • Updated
  • Editor's pick

Install

curl -fsSL codexskills.dev/install.sh \  | sh -s -- financial-modeling

Installs to ~/.agents/skills/financial-modeling/ for every project on this machine.

104-line POSIX script. No sudo, no telemetry. Read install.sh

Use it in Codex

Start a prompt with $financial-modeling, or pick it from /skills. You can also just describe the task: Codex reads the description below and loads the playbook when your request matches.

What Codex reads before loading it

Builds and audits driver-based startup financial models in Excel or Google Sheets - assumptions tab, revenue and headcount builds, monthly P&L, cash flow, runway and scenario switches - with no hardcoded numbers inside formulas and a balance check that proves the model ties. Use when asked for a startup financial model, a 3-statement model, a runway or burn forecast, a fundraising model for investors, or to review and fix an existing forecast spreadsheet.

Use it when

  • You need a monthly P&L, cash flow and runway forecast for a startup
  • Preparing a model to share with investors during a fundraise
  • An inherited spreadsheet forecast has to be checked before a board meeting
  • Leadership wants base, downside and upside cases from one workbook

Use something else when

  • You only need to track spending against an approved budget: use budget-tracking
  • You need SaaS metric definitions and cohort maths rather than a forecast: use saas-metrics
  • The task is formula syntax or a single broken lookup: use excel-formulas

How to check the result

The Checks tab returns TRUE for every month: balance sheet balances, cash ties between statements, no error cells, and the first forecast month lines up with the last month of actuals.

The mistake it prevents

Treating annual prepaid contracts as monthly revenue and cash at the same time, which distorts both burn and runway.

~/.agents/skills/financial-modeling/SKILL.md

--- name: financial-modeling description: Builds and audits driver-based startup financial models in Excel or Google Sheets - assumptions tab, revenue and headcount builds, monthly P&L, cash… license: MIT ---

A good startup model is one where every output traces back to a labelled input, a founder can change one assumption and watch runway move, and the cash at the bottom of the cash flow equals the cash on the balance sheet every month. Precision is not the goal; transparent, defensible assumptions are.

This skill builds models; it does not give investment, tax or accounting advice. Say so when the model will be used for fundraising, debt covenants, audits or tax filings, and recommend an accountant review the statements before they leave the company.

Before building

  1. Ask, or infer from files, the purpose: runway planning, fundraising, budget-setting or board reporting. Purpose decides horizon and granularity:
PurposeHorizonGranularityStatements
Runway / burn18-24 monthsMonthlyP&L + cash flow
Seed / Series A raise36 months (+2 annual years)Monthly, annual roll-upP&L, cash flow, simple balance sheet
Annual budget12 monthsMonthlyP&L by department + cash
Later-stage / debt3-5 yearsMonthly then quarterlyFull three statements
  1. Collect actuals: last 6-12 months of P&L (export from QuickBooks or Xero as CSV), bank balance, current headcount with salaries and start dates, pricing, and customer or subscription counts. Model forward from real numbers, never from zero.
  2. Check the repo or folder for an existing model, AGENTS.md notes on file formats, and whether the user works in Excel or Google Sheets. Do not mix: Google Sheets lacks some Excel functions (and vice versa), so write formulas for the target.
  3. If the model is code-generated (openpyxl, ExcelJS), plan to recalculate it in a real engine before trusting outputs. openpyxl writes formulas but never computes them.

Workbook structure

One direction of flow: inputs on the left/top, calculations in the middle, outputs at the end. Never reference a cell on a later tab from an assumption.

TabContains
CoverPurpose, version, date, author, scenario selected, key outputs (runway, cash low point)
AssumptionsEvery input, one per row, with unit, source and owner columns
RevenueCustomer/volume build -> bookings -> revenue (recognised) -> collections
HeadcountOne row per role: department, start month, salary, benefits load
OpExNon-headcount costs by department, driven by % of revenue, per-head or fixed
PLMonthly income statement, linked only from builds
CashFlowNet income adjusted for working capital, capex, financing
BalanceSheetCash, AR, AP, deferred revenue, equity; check row
ActualsImported historical data, untouched, for variance
ChecksEvery integrity check in one place, summing to a single TRUE/FALSE

Formatting conventions (state them on the Cover tab):

  • Blue font = hardcoded input. Black = formula. Green = link from another tab.
  • Time runs left to right, one column per month, same columns on every calc tab so column F is always the same month everywhere.
  • A row header in column A, units in column B, totals or start values in column C.

Revenue build patterns

Pick the build that matches how the business actually sells:

ModelDriver chain
Self-serve SaaSVisitors x signup rate x paid conversion -> new customers; existing x (1 - monthly churn); x ARPA
Sales-led SaaSReps (ramped) x quota attainment -> new ARR; + expansion - churn; MRR = ARR / 12
MarketplaceGMV = orders x AOV; revenue = GMV x take rate
Transactional / e-commerceSessions x conversion x AOV; COGS per order; return rate
ServicesBillable heads x utilisation x hours x rate

Example SaaS rows (Excel, months in columns F onward, inputs on Assumptions):

New customers   F12 =ROUND(F10 * Assumptions!$C$8 * Assumptions!$C$9, 0)
Churned         F13 =ROUND(E14 * Assumptions!$C$10, 0)
Ending cust.    F14 =E14 + F12 - F13
MRR             F16 =F14 * Assumptions!$C$11

Rules for revenue:

  • Separate bookings (contract signed), billings (invoice sent), revenue (recognised over the service period) and collections (cash in). Annual prepaid contracts create deferred revenue and front-loaded cash; monthly ones do not.
  • Ramp new sales reps (for example 0%, 25%, 50%, 75%, 100% over five months) instead of assuming full quota from day one.
  • Growth assumptions expressed as month-over-month rates compound fast; show the implied annual figure next to each so nobody types 15% MoM by accident.

Headcount and costs

  • One row per person or planned hire, with start month; cost formula multiplies salary / 12 by a benefits and payroll-tax load (commonly 1.15-1.30 in the US; ask for the real figure) and by a flag =IF(F$3>=$D20,1,0) for months after start.
  • Headcount usually drives 60-80% of early-stage spend. Get it right before polishing anything else.
  • Per-head costs (software seats, equipment, recruiting fees) link to headcount counts, not to hardcoded totals.
  • COGS for SaaS: hosting, third-party APIs, payment processing, support staff. Keep it separate from OpEx so gross margin is honest.

Cash, runway and scenarios

Net burn          = -(ending cash - starting cash) for months where cash falls
Runway (months)   = ending cash / average net burn of the last 3 months
Cash low point    = MIN(cash row) and the month it occurs (INDEX/MATCH or XLOOKUP)

Scenario switch: put Scenario (1 = base, 2 = downside, 3 = upside) on Assumptions, keep three columns of values per driver, and select with =CHOOSE($C$3, D8, E8, F8) or =INDEX(D8:F8, $C$3). One switch drives the whole model; never maintain three copies of the workbook.

Downside cases worth building by default: revenue 30% below plan with costs unchanged, a fundraise that lands six months late, and churn doubled.

Integrity checks

Put each on Checks and show the combined result on Cover:

  • Balance sheet balances every month: =ROUND(Assets - Liabilities - Equity, 2) = 0.
  • Cash on CashFlow equals cash on BalanceSheet every month.
  • Revenue on PL equals the sum from Revenue; headcount cost equals Headcount total.
  • No errors anywhere: =SUMPRODUCT(--ISERROR(PL!F5:AO80)) = 0.
  • Actuals months tie to the accounting export within rounding.

Building with code

When generating the workbook programmatically, write formulas as strings so the model stays live, then recalculate with LibreOffice before reading results:

from openpyxl import Workbook
from openpyxl.styles import Font
wb = Workbook()
a = wb.active; a.title = "Assumptions"
a["A8"], a["C8"] = "Signup rate", 0.03
a["C8"].font = Font(color="0000FF")                 # blue = input
pl = wb.create_sheet("PL")
pl["F12"] = "=ROUND(F10*Assumptions!$C$8,0)"
wb.save("model.xlsx")
# Round-trip through LibreOffice so formulas get cached values (needs LibreOffice installed)
soffice --headless --convert-to xlsx --outdir recalculated model.xlsx
python3 -c "from openpyxl import load_workbook as l; print(l('recalculated/model.xlsx', data_only=True)['PL']['F12'].value)"

If the check prints None, nothing was calculated: open the file in Excel or Sheets instead and report that outputs are unverified until then.

For cell styling, named ranges and charts, see the xlsx-spreadsheets skill. For formula debugging, see excel-formulas.

Auditing an existing model

  • Trace three key outputs (revenue in month 24, ending cash, runway) back to inputs
  • Search for hardcoded numbers inside formulas (=F10*1.05, +25000)
  • Check that every row uses the same formula across all months (a broken pattern in one column is the most common silent error)
  • Confirm units: monthly vs annual rates, thousands vs units, percent stored as 5 vs 0.05
  • Look for circular references (interest on average cash is a classic); break them with prior-month balances instead of enabling iterative calculation
  • Compare first forecast month to last actual month for implausible jumps
  • Sanity-check ratios against stage: gross margin, S&M as % of revenue, revenue per employee

Gotchas

  • Mixing cash and accrual: a 12-month prepaid deal is 1/12 revenue per month but full cash up front. Models that show both as revenue overstate runway or understate it.
  • Hiring plans that start every role on the 1st of the next month make burn jump in steps that do not happen; stagger by realistic recruiting time.
  • Churn applied to new customers in their first month double-counts; apply it to the opening balance.
  • Percent growth applied to a small base produces absurd year-3 numbers. Cap or switch to capacity-driven drivers (reps, marketing spend) after year one.
  • Taxes, VAT/sales tax and payroll timing are jurisdiction-specific; flag them as assumptions for the accountant rather than inventing rates.

Output contract

Deliver the workbook plus a short note:

## Model summary - <company>, <scenario>, v<n> (<date>)
- Starting cash: $X (as of <date>); runway: N months; cash low point: $Y in <month>
- Revenue: $A ARR at month 12, $B at month 24; key drivers: <3 bullets with values>
- Headcount: N now -> M at month 24; burn peaks at $Z/month in <month>
- Checks: all passing | <list failures>
- Assumptions needing confirmation: <list, each with owner>
- Not modelled: <taxes, debt, FX, ...> - review with an accountant before external use

What the zip contains

SKILL.md plus the interface file below. Nothing runs on install.

agents/openai.yamlgenerated from this page

Gives the Codex app a display name, a one-line description and a starter prompt for this skill.

interface:
  display_name: "Financial Modeling"
  short_description: "Runway you can trace back to one input"
  default_prompt: "$financial-modeling Build a 36-month financial model for our seed raise from these QuickBooks exports and the hiring plan"

About this skill

Written and maintained by the Codex Skills editors to the same editorial standard as every skill here: a selective description, a real workflow, known pitfalls and a way to verify the work. First published , last updated . MIT licensed. Something wrong or out of date? Tell us.

esc
Just launched

Codex Skills Pro is live

79 premium skills for Codex, each with scripts, references and an evidence report that proves the result.

Bought one by one$882.21
All 79 skills$49
94% off

That's $0.62 a skill, paid once.

Get all 79 for $49Or pick single skills from $4.99 →

Secure checkout by Creem