The Best SEC Filings API for Quants: How to Actually Choose One
We are not going to rank other people's products. We are going to give you the four tests we wish somebody had given us, so you can rank them yourself, including against this one.
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 | the alternatives | |
|---|---|---|
| Resolves duplicate XBRL tags | Yes — A = L + E | Ask. Most do not document it |
| Filing date on every figure | Yes — the filing that reported the value | Ask — not all give one |
| Point-in-time queries | Yes — as_of= returns only what was filed by that date |
Ask |
| Income statement and cash flow, checked | Yes — gross profit and the cash-flow identity, each period, when the filing reports the lines (otherwise not_testable) | Rare |
| Feed of restatements and failed checks | Yes — every company, as JSON or CSV | Not offered |
| Python client | pip install balanceproof, pandas panel |
Varies |
| Publishes an accuracy figure | No — the method is published instead | Rare |
| Free tier without a call | Yes | Varies |
| Coverage | 6,252 SEC filers, 1.3M facts | Ask — and ask whether it is SEC-only |
| Latency | ~300 ms typical (measured 292–364 ms, Sep 2026) | Ask, and measure it yourself |
| Price | Free · $19 · $49 · $99 a month (CAD) · $79.99 one-off | Often quote-based |
| Bulk download | CA$79.99, one CSV | Varies |
Why this is harder than it looks
Fundamental data feels like a solved problem. The filings are public, the format is machine-readable, and there are a dozen APIs. So the natural assumption is that they all return the same numbers and you are choosing on price and ergonomics.
They do not return the same numbers. We checked.
The reason is the duplicate-tag problem. XBRL lets a filer attach dimensions
to a fact: this figure, but for this segment, this subsidiary, this geography.
JPMorgan tags Assets twenty-three separate times in a single
filing. Every instance is valid. The consolidated one, the number on the face
of the balance sheet, is marked only by having no dimensions on it, which means
the correct answer is identified by an absence, the easiest thing in the world
for a parser to miss.
Taking the first match agrees with the consolidated figure most of the time. When it does not, it is wrong silently, by whatever the largest segment happens to be.
The three questions that actually separate providers
How do you pick which tag is the right one? If the answer is vague, that is your answer. This is the entire difficulty of the category and a provider who has solved it will tell you how. BalanceProof uses the accounting identity: keep the combination of assets, liabilities and equity that balances, because the consolidated figures balance against each other and a segment's do not.
As-reported or restated? These are different products and the difference decides whether you can backtest. As-reported is what the company said at the time. Restated is what they said later. If a provider serves restated figures with no filing date, every backtest you run on it has lookahead bias baked in and no way to detect it.
What happens when the data is missing or wrong? A filer that does not break out receivables has not reported zero receivables. If your provider returns 0, your ratios are wrong and nothing tells you. And when a filing genuinely does not balance (it happens), you want to be told, not handed a silently adjusted number.
What BalanceProof is, plainly
One checked dataset: 6,252 SEC filers, 1.3M as-reported facts, each filing checked
against A = L + E when it reports the lines needed and marked not testable
instead of passing where it does not. Exceptions are flagged rather than
hidden. The income statement and cash flow are checked the same way, point-in-time with as_of, and every restatement and
failed check across all companies is one feed. Free tier with no card, plans
from $19 a month (CAD), or $79.99 once for the whole thing as a CSV. From
Python: pip install balanceproof.
We built it because we wanted this data for something else and could not find a source we trusted enough to build on. We are a small, independent company. That is a real thing to weigh: there is no SLA and no support desk, and if that matters to you, buy from somebody who can sign a contract. What there is instead is a method written down in public and a free tier so you can check it yourself against a filing you already know.