It's really hard to load large XLS financial models into Claude — particularly those with 100,000+ formulas. It's even harder to give Claude the skills to navigate these models in a way that's accurate and useful for quick scenario modeling in chat, or for transforming that model into other applications.
So I built [excel-to-engine](https://github.com/ebootheee/excel-to-engine) — a tool that transpiles and deconstructs large financial models (think 6M+ cells, 2M+ formulas, 80+MB) and wraps them in a CLI. The result is ~10x the speed and ~95% reduced context window and token usage with Claude. Claude Code is very good at navigating CLIs when it gets the proper context, so the repo ships with a comprehensive skill file. Tell Claude to git clone the repo, read the docs, and start turning your models into applications.
The 60-second demo
# 1. Build the parser (one-time)
cd pipelines/rust && cargo build --release && cd ../..
# 2. Parse your model — handles everything: parse, manifest, auto-detect metrics
node cli/index.mjs init model.xlsx --output ./my-model/
# 3. Ask questions
node cli/index.mjs summary ./my-model/chunked/
node cli/index.mjs scenario ./my-model/chunked/ --exit-multiple 16 --revenue-adj techGP:-20%
node cli/index.mjs sensitivity ./my-model/chunked/ --vary exit-multiple:14-22:2 --vary exit-year:2028-2034:1 --metric grossIRR That's it. The CLI auto-generates a model manifest (mapping EBITDA, IRR, carry, equity to the right cells), runs a smart refinement pass, and is ready for scenario analysis immediately.
What Claude can actually ask
Once a model is parsed, Claude doesn't load the whole thing into context to answer questions — it queries the CLI. A sample of what that covers across the PE stakeholder chain:
- Analyst / VP: "What's IRR if exit multiple drops 2 turns?" →
ete scenario --exit-multiple X - Partner: "Attribution — why did IRR drop 5pp?" →
ete compare --attribution - LP / IR: "TVPI, DPI, RVPI, net IRR" →
ete query --name tvpi - Portfolio CFO: "What's FCF if rates go up 100bps?" →
ete eval <cell> --inputs '{"Assumptions!Rate": 0.08}' - Audit: "Where does totalCarry come from?" →
ete explain totalCarry
Every agent-consumed output supports --compact — ~60% fewer tokens than --format json.
Under the hood
There are two pipelines:
- A Claude-skill-based engine for simpler models. Fast to set up, great for quick one-offs.
- A Rust transpiler that recognizes and transpiles 60+ Excel functions. This is what lets the tool chew through 6M+ cells in reasonable time — it's calamine-based, roughly 10–50x faster than SheetJS.
When you run a scenario, the CLI doesn't re-execute the full engine (which can take 10+ minutes on large models). Instead it reads the base case from ground truth JSON, applies your adjustments to the annual P&L, and recomputes the chain: exit EBITDA → terminal value → exit equity → MOIC → IRR → carry. Newton-Raphson for IRR, American/European waterfall for carry.
The CLI accepts JSON inputs for stringing together compound two-dimensional queries. There's also a full eval suite, including complex randomized evals that use a Claude API key to generate questions and interrogate your model directly — so you can verify accuracy on your own data rather than trusting benchmark numbers.
Accuracy
A fresh Claude API session with zero knowledge of the engine answers 25 randomized financial questions per model. Across 9 real models spanning 15.5M cells:
- Fund model A (2 sheets, 5.7K cells): 25/25 (100%)
- Fund model B (7 sheets, 96K cells): 25/25 (100%)
- Platform model A (51 sheets, 1.8M cells): 25/25 (100%)
- Platform model B (60 sheets, 1.8M cells): 25/25 (100%)
- Corporate model A (20 sheets, 5.8M cells): 25/25 (100%)
- Corporate model B (21 sheets, 6.1M cells): 24/25 (96%)
Total: 149/150 (99.3%).
Try it
It's a public repo:
git clone https://github.com/ebootheee/excel-to-engine.git Point Claude Code at it, have it read skill/SKILL.md and the README, and start turning your models into applications. If you fix something along the way, tell Claude to open a PR.