The Best Balance Sheet API: What to Test Before You Buy

Nobody is ranked here. Every provider in this category reads the same free filings from the same free source, so the only question worth asking is what each one does when a filing is ambiguous — and that is testable in an afternoon.

At a glance

Prices and features on the right-hand column change, and this page does not — check their site before you decide anything on it. The rows about method are the ones that stay true.

BalanceProof compared with the alternatives
  BalanceProof the alternatives
Balance sheet reconciles as served Yes — or the exception is named Test it: pull A, L and E for fifty filers
Tells you the basis it reconciled on Yes — plain, NCI, mezzanine, or both Ask
Handles redeemable equity Yes, as its own block Test it on a SPAC or a biotech
Filing date on every figure Yes — the filing that reported the value Ask — not all give one
Names the filings it cannot read Yes, by ticker, with the reason Rare
Point-in-time (as_of) for backtests Yes — only what was filed by that date Ask
Income statement and cash flow, checked Yes, each period, when the filing reports the lines the check needs (otherwise not_testable) Rare
Python client pip install balanceproof Varies
Coverage 6,257 SEC filers, 1.3M facts Ask — and ask whether it is SEC-only
Free tier without a sales call Yes Varies

Balance sheet API fields: what a response looks like

Before running the tests below on anyone, it helps to know what one response should contain. This is BalanceProof's, for Apple, trimmed to the totals (each line item carries the same keys):

curl -H "X-API-Key: YOUR_KEY" https://balanceproof.dev/api/company/AAPL
{
  "ticker": "AAPL",
  "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": {"value": 275746000000.0, "missing": false},
    "liabilities_and_equity": {"value": 383266000000.0, "missing": false}
  },
  "equity": {
    "shareholders_equity": {"value": 107520000000.0, "missing": false}
  },
  "missing_concepts": ["goodwill", "loans", "trading_securities",
                       "investment_securities", "interbank_deposits",
                       "deposits", "short_term_borrowings",
                       "total_equity_incl_nci", "minority_interest",
                       "temporary_equity", "redeemable_preferred_stock",
                       "redeemable_noncontrolling_interest",
                       "minority_interest_operating_partnership"],
  "data_quality_issues": [],
  "source": "SEC Financial Statement Data Sets (as reported)",
  "check": {
    "identity_status": "balanced",
    "reconciles": true,
    "imbalance_pct": 0.0,
    "missing_for_check": [],
    "note": "Assets equal liabilities plus equity, as filed."
  }
}

Four things in it are worth asking any provider for:

  • A filing date on every figure, not just a period, so a backtest knows when the number became public.
  • missing instead of zero. Coca-Cola never tags total liabilities; its total_liabilities comes back "value": null, "missing": true, next to liabilities_and_equity and the equity lines needed to derive it. The total liabilities API note walks through that case.
  • A check result (identity_status, imbalance_pct, missing_for_check) rather than a silent pass.
  • A restated flag, so a revised figure is not passed off as the original.

In Python, pip install balanceproof, then balanceproof.Client(api_key="YOUR_KEY").check("AAPL") returns the check object above and .balance_sheet("AAPL") the whole response. Every field is in the API reference, and a free key (1,000 calls a month, no card) is on the dashboard.

Is the free SEC API enough?

Often, yes. SEC's companyfacts endpoint is free, needs no key, and has the full tagged history. It is enough for one company and one well-tagged concept, when you are happy to write the de-duplication yourself. It does not tell you whether a balance sheet adds up, it returns nothing when a filer never tagged a subtotal, and it repeats each period once per filing that reported it (why that matters). For every SEC filer at once, bulk balance sheet data for all companies covers both routes.

Why transparency matters more than a number

Every provider in this category reads the same filings. The difference is what happens when a filing is hard to read. The usual answer is that you get a number anyway, with nothing attached to say how confident it is — and a figure that is quietly a segment instead of a company looks exactly like one that is right.

BalanceProof checks each balance sheet against Assets = Liabilities + Equity when it reports the lines needed, and marks it not testable instead of passing it when it does not. A filing that reconciles is published with its figures. A filing that does not is published with the reason: a noncontrolling interest reported as a separate line, mezzanine equity outside permanent equity, rounding inside one percent, a component we could not read, or a filing whose own totals disagree with each other. The exceptions are counted in public and named individually on how we verify.

That is the whole claim. Not that nothing is ever wrong — that when something is, you are told which number and why, instead of finding out from your own reconciliation three weeks later.

The difference is which tag gets picked

Every provider in this category reads the same source. SEC EDGAR publishes XBRL for every filer, free, and nobody has better raw material than anybody else. What separates one API from the next is not access. It is the selection step, and that step is almost never documented.

Here is the problem it has to solve. Open JPMorgan's 10-Q and search for Assets and you get twenty-three facts. Not twenty-three values — twenty-three tagged instances, one for the consolidated bank and one for each segment and subsidiary that has to be broken out separately. Every one is valid XBRL. Exactly one is the number on the face of the balance sheet, and the only thing marking it is an absence: it is the fact with no dimensions attached.

An extractor that takes the first match, or the largest, or the most recently filed, will be right most of the time and wrong in a way that leaves no trace. No exception, no null, no warning. Just a number that is a segment instead of a company. SEC's companyfacts API already drops the dimensioned facts, so there the failures move elsewhere: in our 100-company test (September 2026) a naive script found no total liabilities tag for 17 companies, a stale equity tag for 8, and headline totals that did not satisfy A = L + E in about a third of the companies it could check.

BalanceProof resolves it with arithmetic rather than a heuristic: pull every candidate for assets, liabilities and equity, and keep the combination that satisfies Assets = Liabilities + Equity. The consolidated figures balance against each other. A segment's assets do not balance against the whole company's liabilities. The identity is a test, not a guideline, and it is the reason a figure here is checked rather than guessed at.

When nothing balances, the answer is that nothing balances. The filing is served as-reported with a warning on it rather than adjusted until the columns agree, because a filing that does not add up is a fact about the company, and you should get it as one.

What we are not going to pretend

We are not going to put the alternatives's prices in a table on our own website. They change, this page would not, and you would be reading a number we had no way to verify at the moment you read it. Go and look at their pricing page. It is the only copy that is current.

We are also not going to tell you their data is bad. We have not audited it and we are not in a position to. What we can tell you is what this service does and how to check it, which is the part we are actually responsible for.

The check that settles it costs you nothing either way: take a company where you already know the answer, call both, and compare each against the filing on EDGAR. Not against each other — against the filing. That is the only comparison that means anything, and it is why the free tier here needs no card.

When to choose each

Choose BalanceProof

If the number has to be right.

  • Test 1: does it add up? Pull assets, liabilities and equity for fifty companies and check A = L + E on each. Whatever fails tells you the shape of that provider's error. If nothing fails, check whether they adjusted something to make it so.
  • Test 2: the redeemable-equity test. Pick a filer with mezzanine equity — Lucid works. A provider reading permanent equity alone is short the whole block, and nothing raises an error.
  • Test 3: the restatement test. Find a company that revised a figure and ask for the original period. A revised number with no filing date attached cannot be backtested against — you would be trading on information that did not exist yet.
  • Test 4: ask what they cannot read. A provider who cannot answer has not measured it. One who answers zero has not looked.
Choose the alternatives

If any of these is you.

  • You need the income statement and cash flow too. This is balance sheets. That is a limit, not modesty.
  • You need non-US filers.
  • You need an SLA and a vendor questionnaire.

The method, written out

These pages compare on METHOD because method is the part that stays true. Both of these are the method itself rather than an argument about it, so you can judge the claim rather than take it.

Compare

The same question from the other directions. Every one of these compares on method, for the reason at the top of this page.