Audit a spreadsheet for formula accuracy, errors, and common mistakes. Scopes to a selected range, a single sheet, or the entire model, including financial-model integrity checks like BS balance, cash tie-out, and logic sanity. Triggers on "audit this sheet", "check my formulas", "find formula errors", "QA this spreadsheet", "sanity check this", "debug model", "model check", "model won't balance", "something's off in my model", and "model review".
Audit formulas and data for accuracy and mistakes. Scope determines depth, from quick formula checks on a selection up to full financial-model integrity audits.
Before starting, verify required libraries are installed and install any that are missing.
python3 -c "import pandas" 2>/dev/null || python3 -m pip install pandas
python3 -c "import openpyxl" 2>/dev/null || python3 -m pip install openpyxl
Important: Do not skip this step — the workflow below will fail without these libraries.
If the user already gave a scope, use it. Otherwise ask:
What scope do you want me to audit?
- selection — just the currently selected range
- sheet — the current active sheet only
The model scope is the deepest. Use it for DCF, LBO, 3-statement, merger, comps, or any integrated financial model before sending to a client or IC.
Run these regardless of scope:
| Check | What to look for |
|---|---|
| Formula errors | #REF!, #VALUE!, #N/A, #DIV/0!, #NAME? |
| Hardcodes inside formulas | =A1*1.05 where the 1.05 should be a cell reference |
| Inconsistent formulas | A formula that breaks the pattern of its neighbors in a row or column |
| Off-by-one ranges | SUM or AVERAGE that misses the first or last row |
| Pasted-over formulas | A cell that looks like a formula location but is actually a hardcoded value |
| Circular references | Intentional or accidental |
| Broken cross-sheet links | References to cells that moved or were deleted |
| Unit or scale mismatches | Thousands mixed with millions, or percentages stored as whole numbers |
| Hidden rows or tabs | Could contain overrides or stale calculations |
If scope is model, identify the model type: DCF, LBO, 3-statement, merger, comps, or custom, then run the appropriate checks.
| Check | What to look for |
|---|---|
| Input/formula separation | Are inputs clearly separated from calculations? |
| Color convention | Blue=input, black=formula, green=link, or the model's equivalent, applied consistently |
| Tab flow | Logical order such as Assumptions -> IS -> BS -> CF -> Valuation |
| Date headers | Consistent across all tabs |
| Units | Consistent: thousands vs millions vs actuals |
| Check | Test |
|---|---|
| BS balances | Total Assets = Total Liabilities + Equity for every period |
| RE rollforward | Prior RE + Net Income - Dividends = Current RE |
| Goodwill/intangibles | Flow from acquisition assumptions if M&A applies |
If the balance sheet does not balance, quantify the gap per period and trace where it breaks. Nothing else matters until that is fixed.
| Check | Test |
|---|---|
| Cash tie-out | CF Ending Cash = BS Cash for every period |
| CF sums | CFO + CFI + CFF = Delta Cash |
| D&A match | D&A on CF = D&A on IS |
| CapEx match | CapEx on CF matches PP&E rollforward on BS |
| WC changes | Signs match BS movements for AR, AP, and Inventory |
| Check | Test |
|---|---|
| Revenue build | Ties to segment or product detail |
| Tax | Tax expense = Pre-tax income x tax rate, allowing for deferred tax adjustments |
| Share count | Ties to dilution schedule: options, converts, buybacks |
| Check | Flag if |
|---|---|
| Growth rates | Greater than 100% revenue growth without explanation |
| Margins | Outside industry norms |
| Terminal value dominance | TV > about 75% of DCF EV |
| Hockey-stick | Projections ramp unrealistically in out-years |
| Compounding | EBITDA compounds to absurd levels by Year 10 |
| Edge cases | Model breaks at 0% or negative growth, negative EBITDA, or negative leverage |
DCF
LBO
Merger
3-statement
Output a findings table:
| # | Sheet | Cell/Range | Severity | Category | Issue | Suggested Fix |
|---|
Severity:
For model scope, prepend a summary line:
Model type: [DCF/LBO/3-stmt/...] — Overall: [Clean / Minor Issues / Major Issues] — [N] critical, [N] warnings, [N] info
Do not change anything without asking. Report first, fix on request.