deskstack

AI-built models get numbers wrong.
deskstack checks every one against the filings.

A deal team inside Claude. One agent builds the model from free, cited data. Others tie every number to the SEC or European filing. Nothing ships until you sign off.

  • 0 of 3,230figures wrong with deskstack's data, across 199 DCFs and comps tables
  • 3.5%of figures wrong with web search alone (DCFs), read by hand against the filings
  • ⅓of the cost per model, and 2–5× faster
  • 10,419US companies, plus large European issuers, straight from the filings

50 companies × DCF and comps × 3 setups, Claude Sonnet 5.5, November 2026. The zero is partly by construction: the scorer checks against the same data, which is checked every night against two other parsers.

The team

One agent builds the model. Others check every number.

Each role is a skill with its own checklist and a fixed report. Reviewers report; they never edit your file.

Explore the roles
Apple · DCF · USD m

History, from the filings

FY2023FY2024FY2025
Revenue383,285391,035416,161
EBIT114,301123,216133,050
D&A11,51911,44511,698
Capex10,9599,44712,715

Source: Apple 10-K FY2025 · 0000320193-25-000079 · sec.gov

Inputs

WACC9.0%
g3.0%
Tax16.0%

Agents build and check. You sign off.

In Claude Code and Cowork the reviewers run as separate agents that never see how the model was built. They review work you bring, too: any .xlsx.

Tie-out

Checked against the filing. Not against another model.

verify_value reads the filed figure for the same company, line and period, and says why a number differs: scale, sign, currency, period, line item or a typo.

Explore the tools
  1. 1Read the filing
  2. 2Write the model
  3. 3Tie out
  4. 4Fix and re-check

A reason, not just a red cell

Every mismatch comes back with the filed value, the filing's accession number and the likely cause.

  • ScaleTyped in thousands, filed in millions
  • SignCapex entered as negative
  • PeriodMatches FY2026, not the last twelve months
  • TypoTwo adjacent digits swapped

Watch it catch a typo

The review scripts on Apple's FY2025 DCF with one planted typo. The model review can't see it; the tie-out to the 10-K can.

Replay of /deal-team on Apple: the analyst builds the DCF from cited data; /associate finds 13 of 14 figures match the filings and flags FY2025 revenue 416,116 against a filed 416,161 as swapped digits; after the fix all 14 match; the red team, compliance and sign-off follow, and nothing is exported without approval.
Benchmark

We measured it. Then read every wrong figure by hand.

Claude Sonnet 5.5 built a DCF and a comps table for each of 50 companies (35 US, 15 European), three ways. Every reported figure was scored against the filing.

Explore the benchmark

DCF, 50 companies

Analysis and transcripts
SetupReported figures wrongCost / modelTime
Web search only3.5% 20 of 573$0.2358 s
deskstack data0% 0 of 593$0.0718 s
deskstack + reviewers0% 0 of 606$0.1032 s

Comps, the same 50 companies

Analysis and transcripts
SetupReported figures wrongCost / modelTime
Web search only3.6% 16 of 445, and 7 left as 0$0.56171 s
deskstack data0% 0 of 1,021$0.1736 s
deskstack + reviewers0% 0 of 1,010$0.2251 s

What web search got wrong

In the DCFs, numbers it couldn't find and filled in anyway: derived share counts, estimated capex, non-GAAP revenue. In the comps, twelve-month figures a quarter out of date, from an aggregator.

With more searches?

A pre-registered re-run with 30 searches and high effort still wrote a figure that isn't the filing's. The placeholders went away; the cost per table more than doubled.

Robustness check

It checks us too

The runs found gaps in deskstack's own data and two bugs in the scorer. All fixed, tested, and written up with the results.

What it catches

Real errors, from the benchmark.

Claude with web search alone made these errors building DCFs and comps tables. Each was read by hand against the filing, and each is caught by a deskstack check.

See them caught
ErrorReal exampleWhat catches it
Last twelve months a quarter lateFedEx, Fortinet, Motorola Solutions: an aggregator's "TTM" to June, after the September 10-Qs (15 figures)/associate: verify_value says Stale and gives the latest twelve months
A quarter written as the yearBoeing net income: the fourth quarter (8,220) as the full year (2,235)/associate: mismatch against the filed annual figure
Share count derived or from the wrong periodBoeing, Pfizer, GE diluted shares: net income ÷ EPS, a six-month count, a Q1 count/associate: mismatch, and a flag when diluted shares are more than 10% from the cover page
Non-GAAP or segment figure for the groupGE "adjusted revenue"; Stellantis D&A for industrial activities only/associate: mismatch against the group's filed line
Figure from an aggregator or WikipediaCisco and Verizon operating income; Schneider operating income, rounded/associate: mismatch, with the filed value and its source
Estimate typed as a filed figureNetflix capex as operating cash flow minus free cash flow/associate: mismatch; rule DS016 also flags a figure labelled as an estimate with no filing cited
Placeholder left at 0Cigna, CVS and Humana in UnitedHealth's comps, labelled "NOT FOUND" (7 figures)/vp-review rule DS016: a typed 0 labelled as not found
Without Claude

Check any AI-built model in one command.

deskstack-check checks any .xlsx model, whether Claude, ChatGPT, Copilot, another tool or a person built it. Offline, it runs the 21 model checks. With --verify, it also ties every typed figure to the filing; only those figures are sent, each with its line item, period and cell reference.

Command reference
deskstack-check
pipx run deskstack-check model.xlsx --verify
$ deskstack-check model.xlsx --verify
model.xlsx  (deskstack_check 0.2.0, sha256 ced59305c2dd)
Model checks: 0 blocker, 0 major, 0 minor, 0 info
Tie-out to the filings (AAPL): 13 of 14 match, 1 do not
  MISMATCH  Inputs!C5  Revenue FY2025  416,116  filed 416,161
           Typo: two adjacent digits look swapped (filed 416,161, written 416,116).
FAIL (fails on blocker)

Soon on PyPI. Today, from a clone: pipx run --spec ./checker deskstack-check model.xlsx.

In a repository

The GitHub Action checks every workbook on each push and writes the report in the job summary.

- uses: joaquimmj/deskstack@main
  with:
    files: "models/**/*.xlsx"
    verify: "true"
    fail-on: blocker
Examples

Download a reviewed model, with every report.

Built with deskstack's real tools from recorded responses: the workbook, the tie-out, the model review, compliance and the sign-off page.

All examples

US tech comps

Apple against Microsoft, Alphabet, Amazon, Meta and Nvidia: 24 of 24 figures tie. Market caps stay empty without a price.

examples/us-tech-comps

Heineken DCF

From its ESEF annual reports, in euros. 14 of 14 tie; the review flags a terminal value at 82% of EV.

examples/heineken-dcf

Errors caught

A Microsoft DCF with four benchmark errors typed in on purpose. All four are caught.

examples/errors-caught

The leaderboard compares models on the same 50 companies: Claude Sonnet 5.5 so far, more soon.

Data

Free data, with the source on every figure.

Official filings and public datasets only. A figure that isn't filed stays empty; it is never estimated.

Explore the data
SEC EDGAR

Financial statements, US

10-K, 10-Q and 20-F filings: annual and last twelve months, for US-listed companies including foreign filers under IFRS.

filings.xbrl.org

Financial statements, Europe and UK

ESEF and UKSEF annual reports of 232 large issuers in 14 countries: 72 UK listed companies, and issuers from France and the Netherlands to Spain, Italy and the Nordics.

CVM open data

Financial statements, Brazil

Annual DFP and quarterly ITR statements of 20 large listed companies, by CVM id or B3 ticker. Under the ODbL: the derived data is free to download whole.

U.S. Treasury · ECB

Risk-free rates

Daily yields from 1 month to 30 years.

European Central Bank

Exchange rates

30+ currencies, on a date or averaged over a period.

Aswath Damodaran, NYU Stern

Valuation inputs

Equity risk premium by country; betas and cost of capital by industry.

Every answer

A citation

Source, URL, accession or ID, period and as-of date on each figure, so you can open the filing it came from.

Accuracy, checked every night

Golden questions answered exactly as filed, against the live connector, and every answer re-read from the filing by an independent parser.

How it is checked
Install

Install in three steps. No terminal, no account to create.

You need a Claude account with code execution on; the roles need a paid plan.

Read the tutorial
  1. Add the data connector

    In Claude, open Settings, then Connectors, then Add custom connector. Paste the URL, with no sign-in.

    Coming soon
  2. Add the deal team

    Open Customize, then Plugins, then Add marketplace. Paste this repository, then install deskstack.

    https://github.com/joaquimmj/deskstack
  3. Ask for a model

    Claude builds the DCF, has every number checked and reviewed, then waits for your approval.

    /deal-team Apple quick-dcf
Pricing

Free. Hosted or yours.

No account, no card, no trial. The hosted connector has a daily capacity shared by everyone; for more, run your own copy.

Hosted

Ready now

Paste one URL into Claude and start.

$0 forever

Install in Claude
90,000calls a day, shared
60calls a minute per address
  • Every data tool and the review roles
  • US filings, European ESEF reports, rates, FX, Damodaran
  • Citations on every figure
  • No sign-in; nothing stored

Self-hosted

Your own copy, on your own free Cloudflare account.

$0 on Cloudflare's free plan

Self-hosting guide
Yoursdaily capacity
Yoursrate limits
  • Same code, MIT license
  • Deploys in a few minutes
  • Nightly data refresh with GitHub Actions (fork, add three secrets)
  • Your own logs and settings
FAQ

Questions,
answered.

Is it free?

Yes. The data connector runs on Cloudflare's free plan with a daily cap shared by everyone, and the code is MIT-licensed. For heavy use, deploy your own copy in a few minutes: self-hosting guide.

Where do the numbers come from?

From the filings themselves: SEC EDGAR for US companies, ESEF reports on filings.xbrl.org for European ones, plus the U.S. Treasury, the ECB and Damodaran's datasets. Every figure carries its source.

Does the server see my workbook?

No. The review scripts run in your own Claude session. The server only sees the values the associate sends to verify_value, and keeps no user data. Privacy.

What doesn't it do?

No share prices and no consensus estimates: a market cap needs a price you provide. European coverage is partial and annual only. Banks and insurers are flagged, since a standard DCF doesn't fit them.

Does it replace a reviewer?

No. It catches what can be checked: figures against filings, formulas against rules, language against a checklist. Everything is a draft until you sign it off.

Is it made by Anthropic?

No. deskstack is an independent open-source project that works with Claude. It is not affiliated with or endorsed by Anthropic.

Tie out your next model.
Before anyone else does.