audit-xls
$
npx mdskill add anthropics/financial-services/audit-xlsAudit spreadsheet formulas and financial model integrity instantly.
- Detects formula errors, hardcodes, and logic flaws across any scope.
- Integrates with spreadsheet engines to parse cells and calculate totals.
- Selects audit depth based on user intent and requested range.
- Reports findings with specific error types and corrected formula suggestions.
SKILL.md
.github/skills/audit-xlsView on GitHub ↗
--- name: audit-xls description: 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", "model review". --- # Audit Spreadsheet 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. ## Step 1: Determine scope If the user already gave a scope, use it. Otherwise **ask them**: > What scope do you want me to audit? > - **selection** — just the currently selected range > - **sheet** — the current active sheet only > - **model** — the whole workbook, including financial-model integrity checks (BS balance, cash tie-out, roll-forwards, logic sanity) 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. --- ## Step 2: Formula-level checks (ALL scopes) 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` — the `1.05` should be a cell reference | | Inconsistent formulas | A formula that breaks the pattern of its neighbors in a row/column | | Off-by-one ranges | `SUM`/`AVERAGE` that misses the first or last row | | Pasted-over formulas | Cell that looks like a formula but is actually a hardcoded value | | Circular references | Intentional or accidental | | Broken cross-sheet links | References to cells that moved or were deleted | | Unit/scale mismatches | Thousands mixed with millions, % stored as whole numbers | | Hidden rows/tabs | Could contain overrides or stale calculations | --- ## Step 3: Model-integrity checks (MODEL scope only) If scope is **model**, identify the model type (DCF / LBO / 3-statement / merger / comps / custom) and run the appropriate integrity checks below. ### 3a. Structural review | Check | What to look for | |---|---| | Input/formula separation | Are inputs clearly separated from calculations? | | Color convention | Blue=input, black=formula, green=link — or whatever the model uses, applied consistently? | | Tab flow | Logical order (Assumptions → IS → BS → CF → Valuation)? | | Date headers | Consistent across all tabs? | | Units | Consistent (thousands vs millions vs actuals)? | ### 3b. Balance Sheet | Check | Test | |---|---| | BS balances | Total Assets = Total Liabilities + Equity (every period) | | RE rollforward | Prior RE + Net Income − Dividends = Current RE | | Goodwill/intangibles | Flow from acquisition assumptions (if M&A) | If BS doesn't balance, **quantify the gap per period and trace where it breaks** — nothing else matters until this is fixed. ### 3c. Cash Flow Statement | Check | Test | |---|---| | Cash tie-out | CF Ending Cash = BS Cash (every period) | | CF sums | CFO + CFI + CFF = Δ 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 (ΔAR, ΔAP, ΔInventory) | ### 3d. Income Statement | Check | Test | |---|---| | Revenue build | Ties to segment/product detail | | Tax | Tax expense = Pre-tax income × tax rate (allow for deferred tax adj) | | Share count | Ties to dilution schedule (options, converts, buybacks) | ### 3e. Circular references - Interest → debt balance → cash → interest is a common intentional circ in LBO/3-stmt models - If intentional: verify iteration toggle exists and works - If unintentional: trace the loop and flag how to break it ### 3f. Logic & reasonableness | Check | Flag if | |---|---| | Growth rates | >100% revenue growth without explanation | | Margins | Outside industry norms | | Terminal value dominance | TV > ~75% of DCF EV (yellow flag) | | Hockey-stick | Projections ramp unrealistically in out-years | | Compounding | EBITDA compounds to absurd $ by Year 10 | | Edge cases | Model breaks at 0% or negative growth, negative EBITDA, leverage goes negative | ### 3g. Model-type-specific bugs **DCF:** - Discount rate applied to wrong period (mid-year vs end-of-year) - Terminal value not discounted back - WACC uses book values instead of market values - FCF includes interest expense (should be unlevered) - Tax shield double-counted **LBO:** - Debt paydown doesn't match cash sweep mechanics - PIK interest not accruing to principal - Management rollover not reflected in returns - Exit multiple applied to wrong EBITDA (LTM vs NTM) - Fees/expenses not deducted from Day 1 equity **Merger:** - Accretion/dilution uses wrong share count (pre- vs post-deal) - Synergies not phased in - Purchase price allocation doesn't balance - Foregone interest on cash not included - Transaction fees not in sources & uses **3-statement:** - Working capital changes have wrong sign - Depreciation doesn't match PP&E schedule - Debt maturity schedule doesn't match principal payments - Dividends exceed net income without explanation --- ## Step 4: Report Output a findings table: | # | Sheet | Cell/Range | Severity | Category | Issue | Suggested Fix | |---|---|---|---|---|---|---| **Severity:** - **Critical** — wrong output (BS doesn't balance, formula broken, cash doesn't tie) - **Warning** — risky (hardcodes, inconsistent formulas, edge-case failures) - **Info** — style/best-practice (color coding, layout, naming) 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 **Don't change anything without asking** — report first, fix on request. --- ## Notes - **BS balance first** — if it doesn't balance, everything downstream is suspect - **Hardcoded overrides are the #1 source of silent bugs** — search aggressively - **Sign convention errors** (positive vs negative for cash outflows) are extremely common - If the model uses VBA macros, note any macro-driven calculations that can't be audited from formulas alone
More from anthropics/financial-services
- 3-statement-modelComplete, populate and fill out 3-statement financial model templates (Income Statement, Balance Sheet, Cash Flow Statement) . Use when asked to fill out model templates, complete existing model frameworks, populate financial models with data, complete a partially filled IS/BS/CF framework, or link integrated financial statements within an existing template structure. Triggers include requests to fill in, complete, or populate a 3-statement model template
- accrual-scheduleBuild the period-end accrual schedule — for each accrual, compute the entry, cite the support, and draft the JE. Use during month-end close; the JE is a draft for controller approval, not a posting.
- ai-readinessScan the portfolio for the highest-leverage AI opportunities and rank where to deploy operating-partner time. Ingests quarterly updates and financials across multiple portfolio companies, identifies quick wins at each, and stacks them into a single ranked action list. Use during quarterly portfolio reviews, annual planning, or when deciding which companies get AI investment first. Triggers on "AI readiness", "AI opportunity scan", "where should we deploy AI", "AI across the portfolio", "AI quick wins", or "which portcos are ready for AI".
- bond-futures-basisAnalyze the bond futures basis by pricing futures, identifying the cheapest-to-deliver, and comparing with yield curves to assess delivery option value and basis trading opportunities. Use when analyzing bond futures, computing the basis, identifying CTD bonds, calculating implied repo rates, or evaluating basis trades.
- bond-relative-valuePerform relative value analysis on bonds by combining pricing, yield curve context, credit spreads, and scenario stress testing. Use when analyzing bond richness/cheapness, computing spread decomposition, comparing bonds, assessing bond value vs curves, or running rate shock scenarios.
- break-traceRoot-cause a reconciliation break to its source transaction or posting — follow the audit trail from the break row back to the originating entry on each side and state what differs and why. Use after gl-recon has classified a break.
- buyer-listBuild and organize a universe of potential acquirers for sell-side M&A processes. Identifies strategic and financial buyers, assesses fit, and prioritizes outreach. Use when preparing for a sell-side mandate, building a buyer universe, or evaluating potential partners. Triggers on "buyer list", "buyer universe", "potential acquirers", "who would buy this", "strategic buyers", or "financial sponsors".
- catalyst-calendarBuild and maintain a calendar of upcoming catalysts across a coverage universe — earnings dates, conferences, product launches, regulatory decisions, and macro events. Helps prioritize attention and position ahead of events. Triggers on "catalyst calendar", "upcoming events", "what's coming up", "earnings calendar", "event calendar", or "catalyst tracker".
- cim-builderStructure and draft a Confidential Information Memorandum for sell-side M&A processes. Organizes company information into a professional, investor-ready document with consistent formatting and narrative flow. Use when preparing sell-side materials, drafting a CIM, or organizing company data for a sale process. Triggers on "CIM", "confidential information memorandum", "offering memorandum", "info memo", "draft CIM", or "sell-side materials".
- clean-data-xlsClean up messy spreadsheet data — trim whitespace, fix inconsistent casing, convert numbers-stored-as-text, standardize dates, remove duplicates, and flag mixed-type columns. Use when data is messy, inconsistent, or needs prep before analysis. Triggers on "clean this data", "clean up this sheet", "normalize this data", "fix formatting", "dedupe", "standardize this column", "this data is messy".