SEC EDGAR API: free company filings and financials
Every endpoint on this page was live-probed on 2026-07-29 by the Aidenix Atlas catalog.
What is the SEC EDGAR API?
The SEC EDGAR API is the free machine-readable interface to the US Securities and Exchange Commission's filing system, covering roughly 800,000 filing entities with no API key and no signup. Every public company, fund, and large private issuer files here — 10-K annual reports, 10-Q quarterlies, 8-K events, and Form D private placements. In our data — the Aidenix Atlas catalog, where every endpoint is live-probed — EDGAR is one of only two federal-level free company sources in the US, the other being state registries, which stop at incorporation records. Three endpoints cover the whole workflow:
- Full-text search searches the text inside filings and resolves a company name to its CIK identifier — including 4 undocumented aggregation facets and a hard 10,000-document ceiling.
- The submissions endpoint returns the issuer profile: tickers, SIC industry code, and filing history.
- The XBRL companyfacts endpoint returns every structured financial fact the company ever reported.
Key facts at a glance
A key-facts table is the 60-second version of this page: 5 endpoints, 0 keys, 10 requests per second — every row below comes from our own probe run of 2026-07-28, according to the Aidenix Atlas catalog logs:
| Question | Answer |
|---|---|
| Authentication | none — no key, no signup, no quota purchase |
| Mandatory header | User-Agent with contact info, or calls return 403 |
| Rate limit | 10 requests/second, per SEC fair-access policy |
| Entities covered | ~800,000 filers |
| Financial history | XBRL facts back to 2009 |
| Filing history depth | up to 1,000 recent filings per issuer in one response |
| Update lag | submissions under a second, XBRL under a minute |
| Licensing | US public domain — commercial use allowed |
Which EDGAR endpoint answers which question?
An EDGAR endpoint is a single-purpose JSON route, and picking the wrong one is the usual reason a first integration stalls. All 5 answered HTTP 200 in our probe run of 2026-07-28:
| Endpoint | Answers | Returns | Probe |
|---|---|---|---|
efts.sec.gov/LATEST/search-index |
«which company is this, and what did it file» | matching filings + CIK, full text since 2001 | ✅ 200 |
data.sec.gov/submissions/CIK{10-digit}.json |
«who is this filer» | name, SIC, tickers, exchanges, up to 1,000 filings | ✅ 200 |
data.sec.gov/api/xbrl/companyfacts/CIK{...}.json |
«every number this company reported» | all US-GAAP concepts, full time series | ✅ 200 |
data.sec.gov/api/xbrl/companyconcept/CIK{...}/us-gaap/{tag}.json |
«one metric over time» | single concept, all periods and units | ✅ 200 |
data.sec.gov/api/xbrl/frames/us-gaap/{tag}/USD/{period}.json |
«this metric across all companies at once» | one fact for every filer in one period | ✅ 200 |
The frames endpoint is the underused one: a single call returned 5,984 companies' total assets for one quarter in our probe — a cross-market comparison set that commercial screeners charge for.
Which route to take follows from the question, not the documentation order:
- If you have a name and need the entity → full-text search first; everything else needs the CIK.
- If you need one metric across the market → frames, not 5,984 separate companyfacts calls.
- If you need a private company → only Form D touches EDGAR; see the limits section below.
How do you find a company's CIK number?
A CIK (Central Index Key) is the 10-digit identifier EDGAR assigns every filer, and resolving it is step one of any EDGAR workflow. The full-text search endpoint at efts.sec.gov accepts a plain company name and returns matching entities with their CIK, filing form, and date. We tested both endpoints on 2026-07-28; the resolve-then-fetch pattern:
# User-Agent with contact info is mandatory — SEC returns 403 without it
# 1. Name → CIK
curl -A "your-name research you@example.com" \
"https://efts.sec.gov/LATEST/search-index?q=%22Stripe%22&forms=D"
# 2. CIK → issuer profile (CIK padded to 10 digits with leading zeros)
curl -A "your-name research you@example.com" \
"https://data.sec.gov/submissions/CIK0000320193.json"
The same two calls in Python, since the response is plain JSON either way:
import requests
UA = {"User-Agent": "your-name research you@example.com"}
hits = requests.get("https://efts.sec.gov/LATEST/search-index",
params={"q": '"Stripe"', "forms": "D"}, headers=UA).json()
profile = requests.get("https://data.sec.gov/submissions/CIK0000320193.json",
headers=UA).json()
That second call returned this on 2026-07-28 — a live sample, not a mock:
| Field | Value |
|---|---|
| name | Apple Inc. |
| sic / sicDescription | 3571 — Electronic Computers |
| tickers / exchanges | AAPL — Nasdaq |
| filings.recent | 1,000 filings in one response |
Two gotchas cost every newcomer their first hour, according to the SEC's fair-access policy: the CIK must be zero-padded to 10 digits (320193 → CIK0000320193), and every request must carry a descriptive User-Agent with contact information. Traffic above 10 requests per second gets throttled; no header at all means 403 on every call.
What financial data does XBRL companyfacts return?
The companyfacts endpoint returns all reported facts for an issuer as structured XBRL: revenue, net income, assets, share counts — every line item from every filing, tagged by accounting concept and period. In our data, this is the only free source of normalized US financials; commercial data vendors largely resell repackaged versions of these same facts. What one JSON response contains:
- Every US-GAAP concept the company reported, keyed by tag name.
- The full time series per concept — quarterly and annual values back to the first XBRL filing in 2009.
- Units and the exact source form for each value, so every number is traceable to its filing.
The practical limit is coverage, not depth: XBRL facts exist only for SEC filers, so private companies without public debt or Form D activity stay invisible.
Can you track private companies through EDGAR?
Partially — through Form D, and that is the honest limit of the free route. A Form D is the notice a private company files within 15 days of raising an exempt round; according to SEC rules it discloses the amount raised, the date, and the issuer's industry group, but not investor names — the full search workflow is in the SEC Form D guide. In our data, Form D works as a funding signal for sector-level opportunity scanning rather than company-level financials: you learn that a company raised, when, and roughly in what sector. For the remaining private-company picture, the free stack joins EDGAR with state registries — 10,137,727 official records across the open Socrata states — and the UK Companies House register for cross-border ownership chains.
Frequently asked questions
Is the SEC EDGAR API really free? Yes — no key, no tier, no quota purchase, and the data is US public domain, so commercial use and redistribution are allowed. The only obligation is the fair-access rule: identify yourself in the User-Agent and stay under 10 requests per second.
Why do I get 403 when the same URL works in my browser? Because the browser sends a User-Agent and your script probably does not. SEC rejects anonymous automated traffic outright — this single header is the most common cause of a failed first integration, and it is documented on a different page than the API reference.
Can I download everything in bulk instead of calling per company? Yes — SEC publishes full ZIP archives of submissions and company facts, republished nightly around 3:00 a.m. ET. For any workload above a few thousand companies, bulk plus a local index beats hammering the API.
How we verify these claims
Our verification method is a live probe, not a citation chain — every endpoint and number on this page comes from requests we sent ourselves on 2026-07-28. What the probe run covers, in our data:
- Endpoint liveness: all 5 EDGAR routes above answered HTTP 200, out of the nearly 4,000 sources the Aidenix Atlas catalog tracks.
- Live samples: the Apple profile fields and the 5,984-company frames result are unedited API output.
- Contract checks: response shapes verified against the SEC's published specifications.
- Freshness contract: when a source drifts, the probe fleet flags it and this page gets re-verified — the «last probed» date above is that promise.
Source facts from the Aidenix Atlas catalog, probed 2026-07-28. Found an error? The catalog re-probes on every report.
Find these guides useful? Add Aidenix as a preferred source on Google — our pages will surface in your AI Overviews.