spreadsheet-model-builder
Skill1 starsChanged 38 days agoMITView on GitHub
Structures spreadsheet models a second analyst can audit - separated input/calc/output sheets, one-formula-per-row hygiene, built-in error checks, and a documented cover sheet. Use when someone asks "how should I structure this model", "clean up this spreadsheet before the board sees it", "why does my model break when I insert a column", or is building any forecast or calculator others will review. Do NOT use for the SaaS revenue logic itself - use revenue-modeling instead; for a full FP&A operating model use fpa-model; for personal or department budgets use budget-builder; for cash timing use cash-flow-forecast; for GAAP statement construction use financial-statement-builder.
In this repository6 other files it gives its agents.
- data-table-designSkill
- document-template-systemSkill
- executive-summarySkill
- formatted-report-writerSkill
- one-pager-designerSkill
- slide-deck-builderSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
13 rules. About 0 are common, 13 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈13
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Distinctive: line 20
Every assumption the user already holds, each with a source.
- Distinctive: line 38
Every row carries a clear label, units, and the basis for the number in an adjacent note column ("per signed MSA", "mgmt guess", "trailing …
- Distinctive: line 45
One formula per row, consistent across all columns: If row 5 computes differently in column D than in column E, something is wrong.
- Distinctive: line 47
No INDIRECT - it hides dependencies from the audit trail and breaks refactoring.
- Distinctive: line 48
No volatile functions (NOW, RAND, OFFSET, TODAY) in calculation paths - they recalculate on every edit and make "what changed" undetectable.
- Distinctive: line 61
Never merge cells in data ranges - merging breaks sorting, filtering, and fill-down formulas.
- Distinctive: line 92
Every number in CALCS traces to a blue input.
- Distinctive: line 100
Do not hardcode any number in a formula - the model dies by a thousand buried constants.
- Distinctive: line 101
Do not run scenarios by overtyping inputs.
- Distinctive: line 102
Do not use VLOOKUP with a literal column index, INDIRECT, or volatile functions in calculation paths.
- Distinctive: line 103
Do not merge cells in data ranges or vary a row's formula midway across columns.
- Distinctive: line 104
Do not ship without an error-check block.
- Distinctive: line 105
Do not mix sourced numbers and guesses without labeling - the note column exists so reviewers can weight each assumption.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Spreadsheet Model Builder
A spreadsheet model is judged by whether a second analyst can verify it without a guided tour. The costly failure is not a wrong formula - it is a hidden wrong formula: a hardcoded number buried in cell F47, an inconsistent row that Ctrl+\ would have caught, a scenario someone ran by overtyping inputs and never restoring. This skill builds models where errors have nowhere to hide.
Operating procedure
Structure comes before formulas: retrofitting sheet separation onto a finished tangle costs more than the model did.
Step 1: gather inputs
- What question the model answers and who reviews it. A model only the builder reads can cut corners; a reviewed model cannot.
- The time axis: granularity (monthly/quarterly), horizon, and history vs forecast boundary.
- Every assumption the user already holds, each with a source. Anything unsourced gets written down anyway - labeled a guess in the note column, never silently blended with sourced numbers.
- How many scenarios are needed. Decide now: each scenario is a column on the Inputs sheet, never a separate file.
Step 2: lay out the sheet structure
Separate sheets with single roles:
- Inputs (or Assumptions) - every editable variable lives here, and only here.
- Calcs - derived values only; no raw inputs, nothing typed by hand.
- Output (or Summary) - the numbers a reader cares about, linked from Calcs.
- Data - raw imported or pasted data, never edited by hand.
- Cover - what the model does, key assumptions, what changed in the last update.
The iron rule: no hardcoded number inside a formula, anywhere. If a value might ever change, it is an input. =D12*1.05 is a bug even when 5% is correct today, because nobody will find it when it stops being correct.
Step 3: build the Inputs sheet
- Group assumptions by theme: revenue, costs, headcount, timing.
- Every row carries a clear label, units, and the basis for the number in an adjacent note column ("per signed MSA", "mgmt guess", "trailing 6-mo actual").
- Color-code inputs distinctly (blue text on white is the convention) so an auditor identifies editable cells at a glance without a legend.
- Date the assumption set on the sheet.
- Scenarios (base / upside / downside) are side-by-side columns with one live selector cell; formulas read the selected column via INDEX, so switching scenarios is one edit, and no one ever overtypes the base case.
Step 4: write formulas to hygiene rules
- One formula per row, consistent across all columns. If row 5 computes differently in column D than in column E, something is wrong. Audit with Ctrl+\ (Windows) / Cmd+\ (Mac), which highlights row inconsistencies instantly.
- Nested IFs at most two levels deep; a third level becomes a lookup table or a helper row.
- No INDIRECT - it hides dependencies from the audit trail and breaks refactoring.
- No volatile functions (NOW, RAND, OFFSET, TODAY) in calculation paths - they recalculate on every edit and make "what changed" undetectable.
- INDEX+MATCH (or XLOOKUP) over VLOOKUP - it survives column insertion; VLOOKUP's hardcoded column index is a deferred error.
- Flow left-to-right and top-to-bottom; a formula should reference cells above or to its left, not reach forward.
Step 5: add an error-check block
At the top of the Output sheet, build explicit checks that read PASS/FAIL: balance items tie out, bridges reconcile, percentages sum to 100%, no negative headcount. Format FAIL in red. A model with zero checks is not conservative - it is unverified.
Step 6: format for navigation
- Freeze the top row and leftmost label column on every sheet.
- One date format everywhere (YYYY-MM or MMM-YY).
- Text labels left-aligned, numbers right-aligned, column headers centered; consistent column widths within a section.
- Never merge cells in data ranges - merging breaks sorting, filtering, and fill-down formulas.
Step 7: write the Cover sheet
Three things, before sharing: what the model does, what the key assumptions are, and what changed in the last update. A model without a cover note is incomplete.
Worked artifact: model skeleton with real numbers
A 12-month subscription forecast, showing the layout (revenue logic itself belongs to revenue-modeling):
INPUTS Base Upside Note
Starting customers 400 400 billing system, Jan
New customers / month 30 40 trailing 3-mo avg / stretch
Monthly churn rate 2.5% 2.0% trailing 6-mo actual
ARPA ($/mo) 90 95 price list / planned increase
Scenario selector: [Base] <- one cell drives everything
CALCS (monthly columns Jan..Dec, one formula per row)
Customers BOP = prior month EOP (Jan = starting input)
New customers = Inputs new/month
Churned = Customers BOP * churn rate
Customers EOP = BOP + New - Churned Jan: 400+30-10 = 420
MRR = Customers EOP * ARPA Jan: 420*90 = $37,800
OUTPUT
Dec EOP customers: 617 Dec MRR: $55,530 ARR run-rate: $666,360
CHECKS: EOP - BOP - New + Churned = 0 each month -> PASS
Customer count never negative -> PASSEvery number in CALCS traces to a blue input; changing churn to 3.0% requires editing exactly one cell.
Deliverable
Produce a workbook with the five-sheet structure, a scenario-column Inputs sheet with units and source notes on every assumption, a Calcs section passing the Ctrl+\ consistency audit, an error-check block reading PASS on all checks, and a dated Cover sheet stating purpose, key assumptions, and last change.
Do NOT
- Do not hardcode any number in a formula - the model dies by a thousand buried constants.
- Do not run scenarios by overtyping inputs; the base case never comes back intact.
- Do not use VLOOKUP with a literal column index, INDIRECT, or volatile functions in calculation paths.
- Do not merge cells in data ranges or vary a row's formula midway across columns.
- Do not ship without an error-check block; "it looked right" is not verification.
- Do not mix sourced numbers and guesses without labeling - the note column exists so reviewers can weight each assumption.
Quality bar
The model ships only when: every editable cell is blue and lives on Inputs; Ctrl+\ finds zero inconsistent rows; every check in the error block reads PASS; every assumption carries units and a source or "guess" label; scenarios switch from one selector cell; and a second analyst can trace any Output number to its inputs in under a minute without asking the builder anything.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

