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:

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:

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 (320193CIK0000320193), 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:

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:


Source facts from the Aidenix Atlas catalog, probed 2026-07-28. Found an error? The catalog re-probes on every report.

Need this at scale? The Aidenix Atlas catalog maps verified data sources with runnable recipes — see the live MCP demo or start free.
Find these guides useful? Add Aidenix as a preferred source on Google — our pages will surface in your AI Overviews.