Free 10-K APIfor SEC Filing Data
Find 10-K filings by ticker or CIK, then retrieve source HTML, exhibits, narrative sections, and XBRL facts.
Free 10-K API: what developers need to complete
The direct answer is that SEC EDGAR provides a free, authoritative path to 10-K metadata, filed documents, exhibits, and tagged facts, but it is not a ready-made annual-report analytics API. The integration must still resolve the issuer, select the correct filing version, retrieve the required document layer, parse narrative sections or XBRL contexts, and retain enough evidence to reproduce every result.
Choose the output from the research question. A filing monitor needs accession number and accepted time; a risk model needs Item 1A text and section boundaries; a financial model needs period-aware facts or normalized statements; an audit workflow may need the complete filing index and exhibits. Calling all of these “10-K data” hides important differences in completeness and validation.
Use ticker for convenience and the 10-digit CIK for a stable SEC lookup.
Filing lists, raw HTML, exhibits, extracted Items, XBRL facts, and normalized statements solve different tasks.
Retain accession number, accepted time, filing and report dates, form, amendment status, primary document, and SEC URL.
Confirm quotas, history, authentication, licensing, and production rights.
How to evaluate a free SEC filings API
State the issuer, time rule, filing variants, output layer, and evidence required. For example: “return the latest accepted 10-K as of a cutoff, include Item 1A and Item 7 with source anchors, and list any later 10-K/A.” This is testable; “get annual-report data” is not.
Include ticker changes, multiple share classes, non-calendar fiscal years, older submissions, 10-K/A amendments, and one filing that incorporates proxy material by reference. Verify accession numbers, accepted times, primary documents, and exhibit lists against EDGAR.
Measure section boundary accuracy on different filing templates, not just keyword presence. For XBRL, test units, duration versus instant facts, dimensions, taxonomy extensions, duplicate contexts, and amended filings. For normalized statements, compare totals and signs to the source presentation.
Record daily and monthly quotas, burst controls, historical start date, excluded endpoints, document retention, trial expiry, attribution, redistribution, and commercial-use terms. Estimate calls for backfill and steady-state monitoring separately; the same free plan may support one but not the other.
Check pagination, older-file references, HTTP errors, timeouts, retries, idempotent replay, timestamps, and status documentation. Store raw payloads, official URLs, content hashes, and parser versions so a section or fact can be traced to the exact filing version.
SEC 10-K API outputs: filings, JSON, and XBRL
The SEC EDGAR data APIs expose company submissions and extracted XBRL data as JSON. A submissions response can identify recent 10-K and 10-K/A records, while company facts expose tagged financial observations. Neither should be confused with a fully normalized income statement, balance sheet, or cash-flow API.
For document analysis, the primary 10-K HTML is only one part of the filing package. The filing index may also list exhibits, XBRL instance and taxonomy files, certifications, and documents incorporated by reference. Decide whether your application promises “the primary annual filing” or “the complete filed package,” because those are different completeness contracts.
| Output | Useful for | Check before use |
|---|---|---|
| Filing metadata | 10-K lookup by ticker or CIK, monitoring, archive links. | 10-K/A handling, pagination, historical files. |
| Raw HTML or filing document | Reading complete disclosures and extracting sections. | Document selection, encoding, exhibits, parser reliability. |
| Filing package and exhibits | Contracts, subsidiary lists, certifications, acquisition documents, and referenced evidence. | Exhibit type, document sequence, incorporated references, MIME type, and missing-file behavior. |
| Extracted 10-K Items | Business, Risk Factors, Properties, Legal Proceedings, MD&A, market risk, statements, and controls analysis. | Heading variants, table of contents, repeated labels, inline XBRL markup, section boundaries, and parser version. |
| XBRL facts | Company facts, tagged values, periods, units, and filing references. | Taxonomy variation, dimensions, units, and duplicate contexts. |
| Normalized financial statements | Comparable annual revenue, profit, assets, cash flow, and ratios. | Provider mapping, restatements, point-in-time logic, licensing. |
10-K versus annual report and 10-K/A
A Form 10-K is the SEC annual filing; a glossy shareholder annual report may be a separate document. Treat 10-K/A as an amendment, preserve both accessions, and avoid silently overwriting the original record.
Amendments also need semantic review. A 10-K/A may change a limited disclosure rather than re-file every section, and proxy materials can supply information incorporated by reference. Store a version chain, identify which Items changed, and avoid presenting the amendment alone as though it were a complete restated annual report.
Use a free 10-K API with Python
Step 1: resolve ticker to CIK
Map the ticker to the SEC CIK and pad it to ten digits for company submissions requests. Store both identifiers because tickers can change while the CIK is the SEC’s stable entity key. Use the SEC’s developer resources as the authority for available data and access practices.
Record the mapping source and observation date. If one issuer has several listed share classes, decide whether the user is selecting a security or the reporting entity; EDGAR filing lookup ultimately operates on the entity CIK.
Step 2: filter 10-K and 10-K/A records
Fetch the submissions JSON, zip the parallel recent-filings arrays into records, and select exact form values. Preserve form, filing date, accession number, primary document, and report date.
Do not assume the recent arrays contain the full history. Follow older-submission file references when the requested year is absent. Sort by accepted timestamp for “latest known filing” logic, and keep 10-K/A in a related but distinct version stream.
Step 3: download or parse the required layer
Construct the SEC archive URL for the primary document when you need the filing text. Use XBRL company facts for tagged values or a documented third-party 10-K data API when the application needs normalized financial statements.
Cache the immutable source document and filing index before parsing. Follow the SEC’s automated-access guidance, then remove navigation and table-of-contents noise carefully, preserve meaningful tables, and store parser version plus source offsets. For financial facts, keep concept, unit, period, dimensions, form, filed date, and accession number rather than selecting a value by label alone.
import requests
headers = {"User-Agent": "YourApp contact@example.com"}
cik = "0000320193"
data = requests.get(
f"https://data.sec.gov/submissions/CIK{cik}.json",
headers=headers,
timeout=30,
).json()
recent = data["filings"]["recent"]
records = [dict(zip(recent, row)) for row in zip(*recent.values())]
annual = [r for r in records if r["form"] in {"10-K", "10-K/A"}]Continue with a related QVeris Guide
Use the next Guide when your question moves beyond this page's data contract.
Use QVeris to discover 10-K data capabilities
QVeris helps developers and AI agents discover and inspect available financial-data capabilities. Open the Financial Reports Form 10-K JSON tool to inspect the exact matched capability, and review the Financial Modeling Prep provider profile before depending on its coverage, freshness, or operating limits. QVeris does not change a provider’s quota, license, freshness, or data rights.
When you are ready to integrate the selected capability, follow the QVeris Call API guide for the exact tool ID, request parameters, and response contract, and keep the original SEC URL in downstream research output.
Free 10-K API questions
Is there a free API for 10-K filings?
Yes. SEC EDGAR provides public filing metadata, archived documents, and XBRL data without an API key. It is source infrastructure rather than a fully normalized annual-report product, so section extraction, statement mapping, caching, and monitoring remain your responsibility.
How do I get the latest 10-K by ticker?
Resolve ticker to the reporting entity’s CIK, read company submissions, include older files if needed, filter exact 10-K forms, and sort by accepted time according to your cutoff. Return accession number, primary document, filing date, report period, and any related 10-K/A.
Can a 10-K API return Risk Factors or MD&A?
A provider may expose extracted Item 1A or Item 7, but official EDGAR primarily provides the filed documents. Test extraction on varied templates, repeated headings, tables of contents, and inline XBRL markup, and retain source anchors plus parser version.
Are 10-K XBRL facts the same as normalized statements?
No. XBRL facts retain issuer-reported taxonomy, units, periods, and dimensions. A normalized statement maps those facts into a provider-defined comparable schema. Validate mapping, signs, restatements, fiscal periods, and point-in-time behavior.
How should 10-K/A amendments be handled?
Keep the original and amendment as separate accessioned versions, link them, and identify which disclosures changed. Do not replace the original silently or assume the amendment restates every section of the annual filing.
What should a production 10-K pipeline store?
Store CIK, accession number, form, accepted time, filing and report dates, primary document, exhibit list, official URLs, retrieval time, raw content hash, parser version, and transformation evidence. This supports replay, correction, and audit.
