There's a reflex among developers building finance tools to immediately shop for a fundamentals API and start paying a monthly fee. Sometimes that's right. But for US-listed companies, the most authoritative source of fundamental data is free and comes straight from the regulator: the SEC's EDGAR system, which exposes a public JSON API over the same data every filing is built from. This is a practical guide to what it offers and where it'll trip you up. None of this is investment advice.
What EDGAR actually gives you
EDGAR is the SEC's electronic filing system, and in recent years the SEC has put clean JSON endpoints in front of it. The two you'll use most return a company's submission history (every filing, with type and date) and its XBRL "company facts" — the structured financial data points pulled from filings, like revenue, net income, assets, and shares outstanding, with their reporting periods.
Because this data is sourced from the filings themselves, it's authoritative in a way that aggregated third-party feeds aren't. When a vendor's number disagrees with EDGAR, EDGAR is the reference. For valuation models, screeners, and any tool where being wrong about reported financials is unacceptable, that matters.
EDGAR identifies companies by Central Index Key (CIK), not stock ticker. The SEC publishes a ticker-to-CIK mapping file you can download and cache; build that lookup first, because nearly every other call needs the zero-padded CIK.
The quirks you'll hit
EDGAR is free and authoritative, but it was built for regulatory disclosure, not for quants, and it shows.
XBRL tags are inconsistent across companies. The same economic concept can be reported under different tags, and companies use custom extension tags. "Revenue" might appear as Revenues, RevenueFromContractWithCustomerExcludingAssessedTax, or a company-specific variant. You can't assume one tag works everywhere — you'll write fallback logic that checks several tags per concept.
It's company-by-company. There's no single endpoint that returns "every company's revenue for Q3." You query one CIK at a time and assemble universes yourself, which means caching and batch jobs if you want broad coverage.
You must send a User-Agent header. The SEC requires requests to identify you (typically a contact email) and enforces a fair-access rate limit. Hammer it without a proper header and you'll get blocked. This catches everyone once.
The SEC publishes fair-access guidance — keep requests to a reasonable rate and identify your client honestly. EDGAR data is public domain, but the service is shared infrastructure. Cache filings locally rather than re-fetching, and you'll be a good citizen and a faster application at the same time.
A sane way to use it
The pattern that works: download and cache the ticker-to-CIK map once, then for each company you care about, pull its company-facts JSON and extract the concepts you need with a tag-fallback dictionary. Store the results in your own database keyed by CIK, concept, and period. Refresh on a schedule that matches filing cadence — quarterly and annual reports don't change daily.
Treat EDGAR as your source of truth for reported fundamentals and layer faster, more convenient APIs on top only where you need coverage EDGAR doesn't provide easily — like real-time prices, which EDGAR doesn't do at all. EDGAR is for what companies reported, not for what they're trading at right now.
For a developer building a stock screener, a valuation dashboard, or a research notebook on US issuers, starting with EDGAR means your foundational data is free, authoritative, and never gated behind a vendor's pricing change. The cost is the engineering to tame XBRL. For a lot of projects, that's a trade worth making.
Before your next finance project signs up for a fundamentals subscription, spend an afternoon with EDGAR. For US companies, the regulator already gives away the most trustworthy version of the data — you just have to do a little work to read it.
Originally published at pickuma.com. Subscribe to the RSS or follow @pickuma.bsky.social for new reviews.
Top comments (0)