Up here, assets equal liabilities plus equity, or we tell you why not.

Climb past the noise.

Every number has to hold its ground.

Know which SEC balance sheets don’t add up before your model does.

An API for data pipelines and AI-finance teams. Statements are checked against A = L + E where the filing reports the lines needed.

Get free key

995 of 38,568

SEC filings failed our balance sheet check on 2026-10-09. In 971 of them a line item did not reach us. Read the study

995 failed, of which 971 were missing_tag: a line item did not reach us. 37,573 passed. Each dot is about 96 filings (2026-10-09 study).

6,252 companies covered. On 2026-10-29 (UTC), across the latest balance sheet of each: 5,837 could be tested, 5,643 reconcile and 194 are flagged with a reason.

SourceSEC EDGAR · 2M facts
Latest filing loaded2026-10-28

SEC EDGAR · checked against A = L + E where the filing allows

Balance-checked SEC financials for production data pipelines.

Each statement is checked against assets = liabilities + equity where the filing reports the lines needed, and returned with the SEC filing it came from. When a statement can't be tested, the API returns the reason instead of adjusting the numbers. When one does not add up, the response says whether the gap is in the filing or in what we read.

Free tier: 1,000 calls a month. No card, no password. By getting a key you accept the Terms and Privacy Policy.

AAPL 10-Q · quarter ended 2026-06-27 · filed 2026-07-31
A = L + E "identity_status": "balanced" balanced, as filed
check_balance_sheet for AAPL: the real response, captured from production 2026-10-19, drawn to scale.
01 The check, drawn

Real filings, drawn to scale

Left is what the company owns. Right is who has a claim on it: lenders first, then the owners.

Both columns are the same money, counted twice, so they are the same height. A filing where they differ is flagged with the reason.

Balances MSFT software quarter ended 2026-09-30, filed 2026-10-28
MICROSOFT CORP owns$779.4B
Owed & owned $308.9B + $470.5B
Line by line
Assets, line by line
Cash$20.3B3%
Receivables$62.1B8%
Inventory$1.8B0%
Property & equipment$346.8B45%
Goodwill$119.6B15%
Other assetsincludes 1 line item this filer does not report separately$228.7B29%
Liabilities and equity, line by line
Accounts payable$42.6B5%
Long-term debt$31.1B4%
Other liabilities$235.2B30%
Shareholders' equity$470.5B60%

The two columns agree. MICROSOFT CORP owns $779.4B, and every dollar of it is owed or owned.

Flagged, and here is why AACB quarter ended 2026-06-30, filed 2026-08-05
Artius II Acquisition Inc. owns$232M
Owed & owned $250M + -$17M
Line by line
Assets, line by line
Other assetsincludes 6 line items this filer does not report separately$232M100%
Liabilities and equity, line by line
Other liabilitiesincludes 2 line items this filer does not report separately$17M7%
Shareholders' equity-$17M7%
Not read from this filingThis filer's own stated total for liabilities plus equity equals their total assets, so the filing balances against its own arithmetic. This band is the part this page did not read. Whether that line is tagged under a name this site does not map, tagged only with a dimension, or not tagged in the filing's XBRL cannot be told from the figures held here.$232M100%

Artius II Acquisition Inc.: the filer's own stated total balances. $232M of it did not reach us, so the drawing shows the gap instead of hiding it.

Not testable answered not_testable, with the reason

What the check needs

  1. 01Total assetsreported, and above zero
  2. 02Liabilities and equityeach reported, or the filer's own stated total

not_testable if either is missing: no verdict, the reason in the response, counted in neither total.

Nothing is filled in and no total is estimated.

On 2026-10-29 (UTC), 415 latest balance sheets could not be tested. They are counted in neither the pass nor the fail total.

Open the full page for MSFT, or browse every company. See the flagged one on its own page. A later filing can report a new value for the same period: revisions from the last 90 days.

Other filings, same check

Every company is its own shape. A bank's inverts the one most people picture.

02 Who it is for

Built for quants, developers and AI-finance teams. For anyone who needs to know when a number can't be trusted.

01

AI-finance and agent builders

An agent can check a balance sheet before it answers: check_balance_sheet returns the verdict and the reason.

  • ticker"AACB"
  • balancesfalse
  • identity_status"missing_tag"
  • imbalance_pct99.93
  • filer_totals_agreetrue

Real response, captured 2026-10-19: check_balance_sheet (MCP), AACB. Excerpt; nothing edited.

02

Quant research and backtesting

Every line item carries its period end and the date of the filing that first reported it; as_of (Pro) returns what was public on a date.

  • ticker"AAPL"
  • total_assets.value383266000000.0
  • total_assets.period_end"2026-06-27"
  • total_assets.filing_date"2026-07-31"

Real response, captured 2026-10-19: GET /api/demo/AAPL. Excerpt; nothing edited.

03

Fintech and reporting tools

Show a figure next to the filing it came from and whether the sheet balances, without writing the parsing or the reconciliation.

  • ticker"AAPL"
  • total_assets383266000000
  • total_liabilities275746000000
  • total_equity107520000000
  • balancestrue
  • identity_basis"as_filed"

Real response, captured 2026-10-19: check_balance_sheet (MCP), AAPL. Excerpt; nothing edited.

03 The cost of a wrong number

Why SEC data breaks pipelines. A balance sheet that does not add up still loads without an error.

0123

One figure, many facts

JPMorgan reports total assets twenty-three times in one filing. One of them is the company.

02Revised

Figures change after filing

A later 10-K or 10-Q can report a new value for the same period. The last 90 days.

04 Method

How the check works

Each filing is checked against Assets = Liabilities + Equity when it reports the lines needed; where it does not, it is marked not testable instead of passing. When a filing does not balance, the page says so with the reason instead of adjusting the numbers.

  1. 01Read the filing
  2. 02How a filing is checked
  3. 03What a flag means
  4. 04What you get back
01

Read the filing

Figures come from the SEC Financial Statement Data Sets and the XBRL frames API, as filed, each with its filing date. A filing repeats a figure by segment and entity; only the company-level fact is kept (JPMorgan reports total assets twenty-three times in one filing).

JPM quarter ended 2026-06-30, filed 2026-08-06

Owns

  1. Deposits with banks$285.1B
  2. Investment securities$536.0B
  3. Loans$1.52T
  4. Goodwill$52.7B
  5. Other assets$2.62T

Owed & owned

  1. Customer deposits$2.71T
  2. Short-term borrowings$692.1B
  3. Other liabilities$1.23T
  4. Shareholders' equity$374.6B
02

How a filing is checked

5,837 companies’ latest balance sheets could be tested. A sheet is checked against assets = liabilities + equity where the filing reports the lines needed. No figure is adjusted to make a sheet fit.

JPM quarter ended 2026-06-30, filed 2026-08-06

A = L + E The two totals are the same height: the filing balances.

03

What a flag means

A reason, not an accusation: rounding, a line item that did not reach us, no stated total, or a filing that does not balance. Read on 2026-10-29 (UTC): 3 rounding, 182 a line item did not reach us, 9 no stated total to test against, 0 a filing that does not balance. Counts by reason.

AACB quarter ended 2026-06-30, filed 2026-08-05

flagged: a line item did not reach us The filer's own stated total balances; the gap is what this dataset could not read.

04

What you get back

JSON with every line item, its period and its filing, over the API, the Python client or MCP. What the restated flag means is on the verification page.

check_balance_sheet · AAPL · real response, captured from production 2026-10-19. Excerpt.
{
  "ticker": "AAPL",
  "total_assets": 383266000000,
  "total_liabilities": 275746000000,
  "total_equity": 107520000000,
  "balances": true,
  "identity_basis": "as_filed"
}

Free tier: 1,000 calls a month. No card, no password.

05 Try it

Live demo

The real endpoint, the real data, no key needed. Generous: plenty to evaluate with. A free key gives you more.

Want the drawing instead of the JSON? Browse every company.

Request

# No key needed for the demo endpoint
curl https://balanceproof.dev/api/demo/AAPL

# Your own key opens the full API
curl -H "X-API-Key: YOUR_KEY" https://balanceproof.dev/api/company/AAPL

Response real, for AAPL · scrolls

{
  "ticker": "AAPL",
  "company_name": "Apple Inc.",
  "period_end": "2026-06-27",
  "filing_date": "2026-07-31",
  "assets": {
    "total_assets": {
      "concept": "total_assets",
      "value": 383266000000.0,
      "period_end": "2026-06-27",
      "filing_date": "2026-07-31",
      "missing": false,
      "restated": false
    }
  },
  "liabilities": {
    "total_liabilities": {
      "concept": "total_liabilities",
      "value": 275746000000.0,
      "period_end": "2026-06-27",
      "filing_date": "2026-07-31",
      "missing": false,
      "restated": false
    },
    "liabilities_and_equity": {
      "concept": "liabilities_and_equity",
      "value": 383266000000.0,
      "period_end": "2026-06-27",
      "filing_date": "2026-07-31",
      "missing": false,
      "restated": false
    }
  },
  "equity": {
    "shareholders_equity": {
      "concept": "shareholders_equity",
      "value": 107520000000.0,
      "period_end": "2026-06-27",
      "filing_date": "2026-07-31",
      "missing": false,
      "restated": false
    }
  },
  "data_quality_issues": [],
  "source": "SEC Financial Statement Data Sets (as reported)"
}

Trimmed to 4 of the 26 line items, the ones the check uses. The whole answer is /api/demo/AAPL.

Request

# No key needed for the demo endpoint
curl.exe https://balanceproof.dev/api/demo/AAPL

# Your own key opens the full API
curl.exe -H "X-API-Key: YOUR_KEY" https://balanceproof.dev/api/company/AAPL

# Or PowerShell's own command, no curl.exe needed
Invoke-RestMethod -Uri https://balanceproof.dev/api/company/AAPL -Headers @{"X-API-Key"="YOUR_KEY"}

Response real, for AAPL · scrolls

{
  "ticker": "AAPL",
  "company_name": "Apple Inc.",
  "period_end": "2026-06-27",
  "filing_date": "2026-07-31",
  "assets": {
    "total_assets": {
      "concept": "total_assets",
      "value": 383266000000.0,
      "period_end": "2026-06-27",
      "filing_date": "2026-07-31",
      "missing": false,
      "restated": false
    }
  },
  "liabilities": {
    "total_liabilities": {
      "concept": "total_liabilities",
      "value": 275746000000.0,
      "period_end": "2026-06-27",
      "filing_date": "2026-07-31",
      "missing": false,
      "restated": false
    },
    "liabilities_and_equity": {
      "concept": "liabilities_and_equity",
      "value": 383266000000.0,
      "period_end": "2026-06-27",
      "filing_date": "2026-07-31",
      "missing": false,
      "restated": false
    }
  },
  "equity": {
    "shareholders_equity": {
      "concept": "shareholders_equity",
      "value": 107520000000.0,
      "period_end": "2026-06-27",
      "filing_date": "2026-07-31",
      "missing": false,
      "restated": false
    }
  },
  "data_quality_issues": [],
  "source": "SEC Financial Statement Data Sets (as reported)"
}

In Windows PowerShell, plain curl is an alias for Invoke-WebRequest and will not take these flags; curl.exe is the real curl that ships with Windows 10 and 11.

Request

import requests

r = requests.get("https://balanceproof.dev/api/demo/AAPL", timeout=30)
r.raise_for_status()
sheet = r.json()
print(sheet["company_name"], sheet["assets"]["total_assets"]["value"])

# With your key, the full API:
# requests.get("https://balanceproof.dev/api/company/AAPL",
#              headers={"X-API-Key": "YOUR_KEY"}, timeout=30)

Output real, for AAPL

Apple Inc. 383266000000.0

Needs pip install requests and nothing else. There is also a client: pip install balanceproof.

Request

claude mcp add --transport http balanceproof https://balanceproof.dev/mcp

# Then ask: Does Apple Inc.'s latest balance sheet balance?

Response what the model is handed

Apple Inc. (AAPL) balances for the period ending 2026-06-27: assets equal liabilities plus equity within tolerance.
Total assets $383.27B ($383,266,000,000). Total liabilities $275.75B ($275,746,000,000). Shareholders' equity $107.52B ($107,520,000,000).
Not every component was reported: Goodwill

{
  "ticker": "AAPL",
  "period_end": "2026-06-27",
  "balances": true,
  "identity_basis": "as_filed",
  "imbalance_pct": 0.0,
  "total_assets": 383266000000.0,
  "total_liabilities": 275746000000.0,
  "total_equity": 107520000000.0
}

Claude Code, Cursor and other MCP clients take the same URL. Setup for each client.

API docs
06 What it costs

Pricing

Reading the site is free. The key is what scales: more calls, more history, alerts. All prices are in Canadian dollars (CAD).

Billing period
Free

$0

Unlimited: look up as many companies as you like

  • Balance sheet, income statement and cash flow, each period checked when the filing reports the lines (otherwise not_testable)
  • 1 year of history
  • MCP server for Claude, ChatGPT and Cursor
Get a free API key
Business

$99/month

For products built on the data

about CA$0.0020 a call, on monthly billing

  • Everything in Pro
  • Webhooks into your systems (5 endpoints)
  • SEC filing link on every figure
Start Business
Starter

$19/month

Follow a few companies

about CA$0.0038 a call, on monthly billing

  • Multi-year history
  • What changed, including restatements
  • Alerts on 3 companies
Start Starter
Full dataset

$79.99 once

All company data as one CSV, built when you download it (loaded through 29 October 2026)

  • One-time purchase, repeat downloads included
  • 1.3M rows as one CSV file
  • Open it in Excel or pandas
Buy the dataset
Enterprise

Let's talk

Custom volume and terms

  • Every paid-plan feature, plus the dataset
  • A call quota set to what you use
  • Invoicing and a signed agreement
Email us

API calls a month: Free 1,000, Starter 5,000, Pro 10k, Business 50k. Every plan side by side

Pro costs more per call than Starter because it is not only volume: it adds point-in-time figures for backtests, the 90-day feed of failed checks, and alerts on 50 companies.

At the limit: further calls are refused with HTTP 429 until the 1st (UTC), or until you move to a larger plan. There is no overage billing.

Every plan, feature by feature. Paid plans go through Stripe; card details never reach this site.

07 Trust

Before you depend on it

  • What this doesn't do. No predictions, no scores, no recommendations. Nothing estimated: where a company doesn't report something, the response says so rather than showing zero.
  • Where the figures come from. The SEC Financial Statement Data Sets and the SEC's XBRL frames API. Every value is as filed, with the date of the filing it came from.
  • Enterprise. Invoicing and a signed agreement, by email.
  • At the limit. Calls past the monthly quota are refused with HTTP 429 until the 1st (UTC). There is no overage billing. Cancelling and refunds are in the questions below; how keys are stored is on the security page.

Terms · Privacy · How the check works · Methodology

08 Questions

Plan questions

Do I need a card for the Free plan?

No. A free key needs only an email address: no card and no password. It gives you 1,000 calls a month, and nothing is charged unless you choose a paid plan yourself.

Can I cancel any time?

Yes. Paid plans are Stripe subscriptions and you cancel them yourself, from Manage subscription in your dashboard, with no email needed. Pro, monthly or annual, also has a 14-day refund window. The dataset is a file, so it is not refundable once downloaded.

What counts as a call?

One request to a keyed endpoint (company, history, statements, changes or exceptions), one tool call through the MCP server, or one company inside a bulk check. Looking things up on the site, the live demo on this page and checking your own usage do not count.

What happens when I go over the limit?

Further calls are refused with HTTP 429 and a message that says how many you have used. The count resets on the 1st (UTC), or you can move to a larger plan from the dashboard at any time. There is no overage billing, so a busy month never becomes a surprise bill.

Data is for informational purposes only. Not financial advice.

Balance sheets that prove they balance.

Balance-checked SEC financials for production data pipelines.

Take a company where you know the answer, call it, and compare the response with EDGAR. If the numbers you ship have to be right, start here. Free tier: 1,000 calls a month, no card.

By getting a key you accept the Terms and Privacy Policy.