The check
A balance sheet has to satisfy Assets = Liabilities + Equity. We test it on each filing's own figures: total assets must equal total liabilities plus total equity to within half of one percent of total assets. Equity is total equity including noncontrolling interests where the filer reports it.
If the plain sum misses, we also try adding the lines that sit beside or
between liabilities and equity: noncontrolling interest, temporary equity,
redeemable preferred stock, redeemable noncontrolling interest and minority
interest in an operating partnership. A filing that balances on one of
those bases passes, and the response names the basis
(identity_basis). A filer that publishes total assets and its
own stated total of liabilities and equity, but no separate liabilities or
equity line, is tested on that stated total.
A filing that does not report the lines the test needs is returned as
not_testable. That is neither a pass nor a failure, and the
response names what is missing.
Where the figures come from
The SEC Financial Statement Data Sets, which are the SEC's quarterly bulk release of XBRL facts, and the SEC's XBRL frames API, which brings in filings as they are filed, weeks before the quarter's data set is published. A frames figure takes its filing date from EDGAR's quarterly form index, matched on the accession number, and a figure whose filing cannot be found there is dropped rather than dated by guesswork. Where both routes supply the same figure, the bulk row is kept. Only consolidated values are read: rows for a segment, a geography, an equity component or a coregistrant are ignored. Every figure is as reported, and each line item carries the period it is for and the date of the filing that first reported that value.
What the restated flag means
A line item's restated flag is true only for a figure taken from a
vendor's restated series (FMP or Yahoo) rather than as reported to the SEC. A
revision in a later SEC filing is not marked this way: it appears as that
filing's value and date, and in /api/company/{ticker}/changes.
What the flags mean
A flag is a reason. It is a statement about the arithmetic on figures we hold, not a statement about the filer. There are four.
| Flag | What it means |
|---|---|
rounding |
The components we hold miss total assets by half of one percent to one percent. |
missing_tag |
A line item did not reach us. The gap is one percent of total assets or more, and the filer's own stated total of liabilities and equity agrees with its total assets. The filing agrees with itself and our components fell short. It does not say why the line did not reach us. |
unexplained |
The gap is one percent of total assets or more and we hold no stated total to test against, so the check cannot say whose figures fall short. |
broken |
A filing that does not balance: the filer's own stated total disagrees with its own total assets by more than half of one percent. |
In the exceptions feed (Pro and above) each failed check also carries an
attribution: filer, extraction (a gap
on our side) or unknown. The full definition and examples are on
how we check the numbers.
Counted on 2026-10-29 (UTC) across the latest balance sheet of each of 6,252 companies: 5,837 could be tested, 5,643 reconcile and 194 are flagged, as 3 rounding, 182 a line item that did not reach us, 9 with no stated total to test against, and 0 a filing that does not balance. 415 report too little to test. These are companies, not filings, and they move as filings load; the study below counts filings on a frozen date.
The 971-of-995 finding
On 2026-10-09 at 17:12 UTC we took a frozen copy of our database and ran the check on every filing in it that could be tested. The numbers below are from that copy and do not move. Each one is quoted from the published report (2026-10-09), and the 995 failures, their labels and their tickers can be recounted from its CSV. The live site will differ, because its data and the code that reads filings both change.
- 995 of 38,568 filings failed the check, from 286 tickers. Another 728 could not be tested and are in neither count. The tested filings have period ends from 2024-06-30 to 2026-09-05, and the 995 failures from 2024-08-31 to 2026-08-31. The unit is one filing per company and period, so this counts filings, not companies.
- 971 of the 995 carry the
missing_taglabel: the filer's own stated total agrees with its total assets and a credit-side line did not reach our sum. 14 areroundingand 10 areunexplained. None isbroken. - 20 of 20 failures we read against the filer's own XBRL on EDGAR balance on the filer's figures. The sample is 20 failures from 18 issuers, drawn at random with a fixed seed. It does not speak for every one of the 995, and 971 is our label, not 971 line-by-line checks.
- 433 of the 995 are blank-check companies by the SIC description in our sector map, and most of the rise in the failure rate from 2024 to 2026 comes from that group.
A failure of our check is not a finding that a filing is wrong. It means the figures we hold for it did not satisfy the identity. The method, the charts and three filings in detail are in the report, and the 995 filings are in a CSV with a link to each filing on EDGAR where we found one.
This count and the live one above measure different things. The live count is the latest balance sheet of each company today. The study is every filing in a two-year window on one date. Neither includes the filings that cannot be tested.
Run it
Responses below were captured from the live service on 2026-10-19. Some fields are left out and none is edited. Live responses change when a new filing arrives.
1. A balance sheet, no key
curl https://balanceproof.dev/api/demo/AAPL
The demo route is rate-limited per address. With a free key the same
data is at /api/company/AAPL, sent with an
X-API-Key header. Excerpt of the response:
{
"ticker": "AAPL",
"company_name": "Apple Inc.",
"period_end": "2026-06-27",
"filing_date": "2026-07-31",
"assets": {
"total_assets": {
"value": 383266000000.0,
"period_end": "2026-06-27",
"filing_date": "2026-07-31",
"missing": false,
"restated": false
}
},
"liabilities": {
"total_liabilities": {
"value": 275746000000.0,
"filing_date": "2026-07-31",
"restated": false
},
"liabilities_and_equity": {
"value": 383266000000.0,
"filing_date": "2026-07-31",
"restated": false
}
},
"equity": {
"shareholders_equity": {
"value": 107520000000.0,
"filing_date": "2026-07-31",
"restated": false
}
},
"source": "SEC Financial Statement Data Sets (as reported)"
}
2. The check, on a filing that balances
Over MCP, the check_balance_sheet tool; in Python,
client.verify(["AAPL"]) for several at once on Pro. Excerpt:
{
"ticker": "AAPL",
"period_end": "2026-06-27",
"filing_date": "2026-07-31",
"total_assets": 383266000000,
"total_liabilities": 275746000000,
"total_equity": 107520000000,
"balances": true,
"identity_status": "balanced",
"identity_basis": "as_filed",
"imbalance_pct": 0
}
3. The check, on a filing that is flagged
The filer's own stated total balances, and the components we read do not. The response says so instead of adjusting anything:
{
"ticker": "AACB",
"company_name": "Artius II Acquisition Inc.",
"period_end": "2026-06-30",
"filing_date": "2026-08-05",
"total_assets": 232407651,
"total_liabilities": 17309711,
"total_equity": -17147832,
"balances": false,
"identity_status": "missing_tag",
"imbalance_pct": 99.93,
"filer_totals_agree": true,
"filer_totals_note": "The filer's own stated total for liabilities plus equity equals its total assets, so the filing balances as reported; the shortfall is in what this dataset read, not in the filing."
}
4. A point-in-time figure with as_of
The balance sheet exactly as it was public on a date, using only filings made by then. For a backtest this is the original figure before a restatement and not the revision after it. Pro and above.
curl.exe -H "X-API-Key: YOUR_KEY" "https://balanceproof.dev/api/company/AAPL?as_of=2025-03-01"
5. A restatement
Figures are as reported to the SEC. When a later filing revises a figure,
the default view shows the revised value under the later filing's date;
as_of returns the value known on the date you ask. The changes
endpoint lists each revised figure with the original value, the revised one
and the filings that said each. Starter and above. The last 90 days of
restatements are public at /restatements.
curl.exe -H "X-API-Key: YOUR_KEY" https://balanceproof.dev/api/company/AAPL/changes
Calls with as_of need the Pro plan or above, and the changes endpoint needs Starter or above. A free key does not call them, and they return an error that names the plan that does.
Try it
The free tier is 1,000 calls a month, with no card. Get a free API key and check a company you already know the answer for against EDGAR. The full reference is at the API docs, the definitions are on how we check the numbers, and prices are on the pricing page.