Spreadsheets pack
Claude Skill
Scenario Model Builder
What-if scenario modeling — input toggles, side-by-side scenarios, sensitivity table.
What it does
Builds a what-if model: a clean inputs tab with toggles for the levers, multiple scenario columns side-by-side that recompute the same outputs, and a sensitivity table showing how a key output changes across two driver dimensions. Designed for "what if we raise prices 10%, what if conversion drops 20%, what if both?" conversations.
When to use
- ✓A pricing change, a hiring plan, or a market entry decision needs a "what could happen" view
- ✓You're tired of saving copies of the same model with different numbers
- ✓Board / leadership wants to see scenario comparison, not just a base case
When not to use
- ✗You need a full financial model — use the financial-model-builder skill instead
- ✗You only have one variable to test — that's a sensitivity, not a scenario
Install
Download the .zip, then unzip into your Claude skills folder.
mkdir -p ~/.claude/skills
unzip ~/Downloads/scenario-model-builder.zip -d ~/.claude/skills/
# Restart Claude Code session.
# Skill is now available — Claude will use it when relevant.SKILL.md
SKILL.md
---
name: scenario-model-builder
description: Use when building a what-if scenario model with toggles, side-by-side scenario columns, and a sensitivity table. Triggers on "scenario model", "what-if model", "sensitivity analysis", "pricing scenarios".
---
# Scenario Model Builder
Build a model that answers "what if" without saving 6 copies of the workbook. The discipline: levers in one tab, formula structure shared across scenarios, outputs comparable side-by-side. The two-input data table is the secret weapon nobody uses.
## Required inputs
1. **The decision** — pricing, hiring, market entry, capex, marketing spend
2. **The levers** — 2-5 inputs that vary across scenarios. Each gets a row in Inputs.
3. **The outputs** — 3-5 metrics that matter. Revenue, profit, headcount, runway, customer count.
4. **Scenarios** — usually 3 named (Conservative / Base / Aggressive, or Bull / Base / Bear). Some users want 4-6. Cap at 6 — beyond that, no one compares meaningfully.
5. **Sensitivity dimensions** — pick 2 of the levers for the data table. The two with the most uncertainty + impact.
6. **Time horizon** — usually annual or 3-year. Scenarios over time can get unwieldy; consider summary view.
If the user gives you 8 levers, push back. A scenario model with 8 levers has 256 combinations. Pick 3-5 levers; everything else is in Assumptions and held constant.
## Approach
**openpyxl** with formulas. The architecture is critical: Inputs tab has columns for each scenario (Conservative, Base, Aggressive), Output tab has the same column structure, formulas in Output reference Input by relative column position. Drag the formula across; each column auto-pulls its scenario's inputs.
The **Excel Data Table** (`What-If Analysis → Data Table`) is what builds the 2D sensitivity grid live. openpyxl can write the data-table reference; the user re-triggers calc on open. Alternative: pre-compute the grid in pandas and write static values, sacrificing live interactivity for portability.
## Workbook structure
1. **Cover** — model purpose, scenario names + descriptions, what each lever means, owner, version
2. **Inputs** — levers down rows, scenarios across columns. Each lever has a description and a unit. Assumptions held constant in their own section below.
3. **Build** — the calc tab. Same column structure as Inputs (one column per scenario). Formulas reference `Inputs!B5` for Conservative, `Inputs!C5` for Base, etc. — same row, different column.
4. **Outputs** — the comparison view. Outputs down rows, scenarios across columns. Pulls from Build. Adds a "Delta vs Base" row for each output.
5. **Sensitivity** — a 2D Data Table. One driver across the top, another down the side, the cell value = a chosen output. Conditional format as a heatmap.
6. **Charts** — bar chart of each output across scenarios; the sensitivity heatmap.
## Formula principles
- **Same formula structure across scenario columns.** `=Build!B5*Inputs!B$2` works in column B; copy to column C and it becomes `=Build!C5*Inputs!C$2` automatically. This is why you align column-by-column.
- **Inputs use absolute row references, relative columns** ($-on-row, no-$-on-column).
- **Named ranges still apply** for assumptions held constant — but scenario-varying inputs get column-relative refs by design.
- **Delta vs Base row**: `=Output_Scenario - Output_Base` for each output, % change too. The interpretive layer.
- **Data Table for sensitivity**: pick a single output cell as the formula reference. Excel computes the grid by substituting row/column header values into the input cells. Powerful — most users have never set one up.
## The Inputs tab — getting it right
Layout:
```
Conservative Base Aggressive
Price $80 $100 $120
Churn (mo) 7% 5% 4%
CAC $500 $400 $350
New customers/mo 50 80 120
```
Use blue fill on input cells to signal "this is a lever." Use cell comments to describe each lever. Bold the Base column header.
For the sensitivity table, the user picks 2 levers (e.g., Price and Churn). The data table varies those across a grid. Other levers stay at Base values during sensitivity.
## Common pitfalls
- **Each scenario in its own tab.** You'll diverge formulas. Same tab, columns for scenarios, shared formula structure.
- **Hardcoded values in the Build tab.** A coefficient typed in `=Customers*0.6` for gross margin should be on Inputs and reference the scenario column.
- **Sensitivity table that doesn't recompute.** If you build it as static values, label it static and add the year/version. Otherwise the user will assume it's live.
- **Outputs that don't actually move across scenarios.** If your Aggressive case shows the same EBITDA as Base, your formulas aren't picking up the scenario column — check refs.
- **Too many scenarios.** Five "small variations" is harder to interpret than three meaningful ones. Force the user to declare what's materially different.
- **No "what's the same across all scenarios" tab.** Assumptions held constant should be listed somewhere obvious so the audience doesn't ask "what about market growth — is that flexed too?"
## Common scenarios to model
- **Pricing**: price × volume × churn impact
- **Hiring**: headcount × productivity ramp × revenue per head
- **Marketing spend**: budget × CAC × LTV
- **Market entry**: TAM × share × cost to enter
- **Macro**: revenue growth × cost inflation × headcount freeze
## Output
Generate the .xlsx. Print: scenario list with descriptions, key output deltas (e.g., "Aggressive ARR is 38% higher than Base; Conservative is 22% lower"), and the sensitivity table's two dimensions. End with a one-line callout on which lever has the biggest output swing per unit change — that's the variable to focus negotiation/decision on.
Example prompts
Once installed, try these prompts in Claude:
- Build a scenario model for our pricing change. Levers: price (current / +10% / +20%), churn delta (0% / +1pp / +2pp). Outputs: ARR, gross profit, customer count.
- Hiring plan scenarios. Conservative (4 hires), base (8), aggressive (14). Show payroll, productivity ramp, ending headcount.