Introducing

SEC Filings & Disclosures: AI-Ready Data, Structured Risk Factors, and Filing Search

Mar 6, 2026

TLDR: Massive has five new endpoints (currently in beta, open to all account types) for working with SEC filings programmatically.

Corporate SEC filings contain critical information for financial analysis, but accessing this data programmatically presents three distinct challenges.

First, the discovery problem. SEC EDGAR hosts millions of filings across dozens of form types. Finding the specific filings you need, whether a company's most recent 10-K, its last five 8-K current reports, or all filings within a date range, requires navigating EDGAR's search interface or building custom scrapers against its full-text search and index files.

Second, the parsing problem. Once you find the filing, extracting usable text from it is difficult. Risk Factors sections are often thousands of words per company, embedded in XBRL with nested tags, inconsistent formatting, and presentation markup. 8-K current reports mix frontmatter, exhibit references, and the actual Items section content. Raw SEC filings are structured for regulatory compliance, not programmatic access. Building and maintaining custom parsers is time-consuming and brittle.

Third, the comparison problem. Even with clean text, systematic analysis is difficult because companies use different terminology for the same underlying risks. One company discloses "foreign exchange rate fluctuations," another mentions "currency volatility," and a third describes "FX exposure risk." Without standardized categories, cross-company comparison and aggregation become impractical.

We've released five endpoints that address all three challenges: filing metadata search, clean text extraction for 10-K and 8-K filings, structured risk categorization, and taxonomy reference data.

Access Requirements: All five endpoints are currently in beta and can be accessed by any account type. This may change in the future.

You can find a demo that covers all five endpoints, including cross-company risk comparison and year-over-year timeline diffing, in the Massive community repo.

EDGAR Filing Index

The EDGAR Filing Index endpoint provides a searchable index across all SEC form types. Filter by ticker, CIK, form type, and filing date to find specific disclosures. Each result includes filing metadata and a direct link back to the original SEC document.

Endpoint:

GET /stocks/filings/vX/index

What you get:

  • Filing metadata for any SEC form type (10-K, 10-Q, 8-K, Form 4, and more)
  • Filter by ticker, CIK, form type, and filing date range
  • Direct SEC EDGAR filing URLs for each result
  • Support for up to 50,000 results per request
import requests

url = "https://api.massive.com/stocks/filings/vX/index"
params = {
    "ticker": "AAPL",
    "form_type": "10-K",
    "limit": 5,
    "sort": "filing_date.desc"
}

response = requests.get(url, params=params, headers={"Authorization": f"Bearer {API_KEY}"})
filings = response.json()["results"]

for filing in filings:
    print(f"{filing['filing_date']}  {filing['form_type']}  {filing['issuer_name']}")
    print(f"  {filing['filing_url']}")

Print Output

2025-11-01  10-K  Apple Inc.
  https://www.sec.gov/Archives/edgar/data/320193/000032019325000091/aapl-20250927.htm
2024-11-01  10-K  Apple Inc.
  https://www.sec.gov/Archives/edgar/data/320193/000032019324000123/aapl-20240928.htm

This endpoint is useful as a starting point for any filing analysis workflow. Identify the filings you need, then use the 10-K or 8-K text endpoints to retrieve their parsed content.

Full JSON Response Example

{
  "results": [
    {
      "accession_number": "0000320193-25-000091",
      "cik": "320193",
      "ticker": "AAPL",
      "form_type": "10-K",
      "filing_date": "2025-11-01",
      "issuer_name": "Apple Inc.",
      "filing_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000091/aapl-20250927.htm"
    },
    {
      "accession_number": "0000320193-24-000123",
      "cik": "320193",
      "ticker": "AAPL",
      "form_type": "10-K",
      "filing_date": "2024-11-01",
      "issuer_name": "Apple Inc.",
      "filing_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019324000123/aapl-20240928.htm"
    }
  ],
  "status": "OK",
  "request_id": "a1b2c3d4e5f6",
  "next_url": null
}

Documentation: EDGAR Filing Index

AI-Ready 10-K Data: Clean Section Text Without Parsing

SEC filings are notoriously difficult to parse correctly. This endpoint handles the edge cases, format changes, and XBRL complexity so you can focus on building your AI pipeline rather than data acquisition.

The AI-Ready 10-K Data endpoint provides parsed sections from 10-K filings as clean plain text. Currently supported sections are Item 1A (Risk Factors) and Item 1 (Business).

Endpoint:

GET /stocks/filings/10-K/vX/sections

What you get:

  • Direct access to specific filing sections without XBRL parsing
  • Clean plain text with tables and formatting handled
  • Filing metadata (CIK, ticker, filing date, period end, SEC URL)
  • Query by ticker, CIK, filing date, or period end
import requests

url = "https://api.massive.com/stocks/filings/10-K/vX/sections"
params = {
    "ticker": "AAPL",
    "section": "risk_factors",
    "limit": 1,
    "sort": "filing_date.desc"
}

response = requests.get(url, params=params, headers={"Authorization": f"Bearer {API_KEY}"})
data = response.json()["results"][0]

print(f"Filing date: {data['filing_date']}")
print(f"Text length: {len(data['text'])} characters")

Print Output

Filing date: 2025-11-01
Text length: 42817 characters

This raw text is useful for building custom NLP pipelines, feeding sections into LLMs for summarization or analysis, or any workflow where you need filing content without the parsing overhead.

Full JSON Response Example

{
  "results": [
    {
      "cik": "320193",
      "ticker": "AAPL",
      "filing_date": "2025-11-01",
      "period_end": "2025-09-27",
      "section": "risk_factors",
      "text": "The Company's business, reputation, results of operations, financial condition, and stock price can be affected by a number of factors, whether currently known or unknown, including those described below. When any one or more of these risks materialize from time to time, the Company's business, reputation, results of operations, financial condition, and stock price can be materially and adversely affected. The following discussion of risk factors contains forward-looking statements. These risk factors may be important to understanding other statements in this Form 10-K.\n\nMacroeconomic and Industry Risks\n\nThe Company's operations and performance depend significantly on global and regional economic conditions and adverse economic conditions can materially adversely affect the Company's business, results of operations, and financial condition.\n\nThe Company has international operations with sales outside the U.S. representing a majority of the Company's total net sales. In addition, the Company's global supply chain is large and complex and a majority of the Company's supplier facilities, including most final assembly facilities, are located outside the U.S. As a result, the Company's operations and performance depend significantly on global and regional economic conditions...",
      "filing_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000091/aapl-20250927.htm"
    }
  ],
  "status": "OK",
  "request_id": "b2c3d4e5f6a7",
  "next_url": null
}

Documentation: AI-Ready 10-K Data

8-K Current Reports: Parsed Text from Material Events

8-K filings report material events: earnings announcements, acquisitions, executive changes, and other developments that public companies must disclose. Like 10-K filings, the raw documents are difficult to parse programmatically. This endpoint returns only the Items section content as clean text, excluding frontmatter, exhibit references, and boilerplate.

Endpoint:

GET /stocks/filings/8-K/vX/text

What you get:

  • Parsed Items section text from any 8-K or 8-K/A (amended) filing
  • Frontmatter and exhibit markup stripped out
  • Filing metadata (CIK, ticker, filing date, accession number, SEC URL)
  • Filter by ticker, CIK, form type (8-K or 8-K/A), or filing date range
import requests

url = "https://api.massive.com/stocks/filings/8-K/vX/text"
params = {
    "ticker": "AAPL",
    "limit": 3,
    "sort": "filing_date.desc"
}

response = requests.get(url, params=params, headers={"Authorization": f"Bearer {API_KEY}"})
reports = response.json()["results"]

for report in reports:
    print(f"Filed: {report['filing_date']}")
    print(f"Text preview: {report['items_text'][:200]}...")
    print()

Print Output

Filed: 2026-01-30
Text preview: Item 2.02 Results of Operations and Financial Condition.

On January 30, 2026, Apple Inc. ("Apple") issued a press release regarding Apple's financial results for its fiscal first quarter ended Dece...

Filed: 2025-10-30
Text preview: Item 2.02 Results of Operations and Financial Condition.

This is useful for monitoring material events across a watchlist of tickers, building event-driven trading signals, or feeding current reports into LLM pipelines for summarization and analysis.

Full JSON Response Example

{
  "results": [
    {
      "accession_number": "0000320193-26-000008",
      "cik": "320193",
      "ticker": "AAPL",
      "form_type": "8-K",
      "filing_date": "2026-01-30",
      "items_text": "Item 2.02 Results of Operations and Financial Condition.\n\nOn January 30, 2026, Apple Inc. (\"Apple\") issued a press release regarding Apple's financial results for its fiscal first quarter ended December 28, 2025. A copy of Apple's press release is attached hereto as Exhibit 99.1 and is incorporated herein by reference.\n\nThe information contained in this Current Report shall not be deemed \"filed\" for purposes of Section 18 of the Securities Exchange Act of 1934, as amended (the \"Exchange Act\"), or incorporated by reference in any filing under the Securities Act of 1933, as amended, or the Exchange Act, except as shall be expressly set forth by specific reference in such a filing.\n\nItem 9.01 Financial Statements and Exhibits.\n\n(d) Exhibits.\n\nExhibit 99.1 Press release issued by Apple Inc. on January 30, 2026.",
      "filing_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000008/aapl-20260130.htm"
    },
    {
      "accession_number": "0000320193-25-000091",
      "cik": "320193",
      "ticker": "AAPL",
      "form_type": "8-K",
      "filing_date": "2025-10-30",
      "items_text": "Item 2.02 Results of Operations and Financial Condition.\n\nOn October 30, 2025, Apple Inc. (\"Apple\") issued a press release regarding Apple's financial results for its fiscal fourth quarter ended September 27, 2025. A copy of Apple's press release is attached hereto as Exhibit 99.1 and is incorporated herein by reference.\n\nThe information contained in this Current Report shall not be deemed \"filed\" for purposes of Section 18 of the Securities Exchange Act of 1934, as amended (the \"Exchange Act\"), or incorporated by reference in any filing under the Securities Act of 1933, as amended, or the Exchange Act, except as shall be expressly set forth by specific reference in such a filing.\n\nItem 9.01 Financial Statements and Exhibits.\n\n(d) Exhibits.\n\nExhibit 99.1 Press release issued by Apple Inc. on October 30, 2025.",
      "filing_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000088/aapl-20251030.htm"
    }
  ],
  "status": "OK",
  "request_id": "c3d4e5f6a7b8",
  "next_url": null
}

Documentation: 8-K Text

Structured Risk Data with Consistent Taxonomy

The Risk Factors endpoint provides extracted risk factors mapped to a standardized three-tier taxonomy. Each risk includes its classification and supporting text from the original filing.

Endpoint:

GET /stocks/filings/vX/risk-factors

The taxonomy structure

The hierarchy consists of 7 primary categories, 28 secondary categories, and 140 tertiary categories. Example:

Financial & Market (Primary)
├── Market & Investment (Secondary)
│   ├── Interest rate and yield curve risk (Tertiary)
│   ├── Market volatility and economic conditions (Tertiary)
│   └── Credit risk and asset quality (Tertiary)
├── Credit & Liquidity (Secondary)
│   ├── Access to capital and financing (Tertiary)
│   ├── Debt levels and financial obligations (Tertiary)
│   └── Liquidity and working capital management (Tertiary)

Each tertiary category includes a detailed description defining its scope. For example:

Interest rate and yield curve risk: Risk from changes in interest rates or yield curves that can affect borrowing costs, investment returns, asset values, and overall financial performance. This includes risks from both rising and falling interest rate environments and their impact on various aspects of the business.

What you get:

  • Primary, secondary, and tertiary category classifications for each risk
  • Supporting quote from the original Item 1A text
  • Filing metadata and company identifiers (CIK, ticker, filing date)
import requests

url = "https://api.massive.com/stocks/filings/vX/risk-factors"
params = {"ticker": "JPM", "limit": 100}

response = requests.get(url, params=params, headers={"Authorization": f"Bearer {API_KEY}"})
risks = response.json()["results"]

# Group by primary category
from collections import defaultdict
by_category = defaultdict(list)
for risk in risks:
    by_category[risk["primary_category"]].append(risk["tertiary_category"])

print(f"Financial & Market risks: {len(by_category['financial_and_market'])}")
print(f"Operational & Execution risks: {len(by_category['operational_and_execution'])}")

Print Output

Financial & Market risks: 8
Operational & Execution risks: 5

The same taxonomy applies to every company, enabling systematic comparison. Query for all companies with "Interest rate and yield curve risk" and get consistent, comparable results across the entire dataset.

This data could be useful for cross-company risk comparisons (identify all companies in a sector with specific risk exposures), temporal analysis (track how a company's risk profile changes year over year), and much more.

Full JSON Response Example

{
  "results": [
    {
      "cik": "19617",
      "ticker": "JPM",
      "filing_date": "2025-02-18",
      "primary_category": "financial_and_market",
      "secondary_category": "market_and_investment",
      "tertiary_category": "interest_rate_and_yield_curve_risk",
      "supporting_text": "JPMorgan Chase's results of operations are significantly affected by interest rate levels and fluctuations. Changes in interest rates can affect the volume of certain loan originations, the value of assets and liabilities, and the revenue from interest rate products. The Firm's net interest income is affected by changes in the level, slope, and shape of the yield curve."
    },
    {
      "cik": "19617",
      "ticker": "JPM",
      "filing_date": "2025-02-18",
      "primary_category": "financial_and_market",
      "secondary_category": "credit_and_liquidity",
      "tertiary_category": "credit_risk_and_asset_quality",
      "supporting_text": "The Firm is exposed to credit risk through its lending, derivatives, and investment activities. The Firm's credit exposure includes consumer and wholesale loans, lending-related commitments, derivatives, and investment securities. Deterioration in the credit quality of the Firm's borrowers and counterparties could result in significant losses."
    }
  ],
  "status": "OK",
  "request_id": "d4e5f6a7b8c9",
  "next_url": "https://api.massive.com/stocks/filings/vX/risk-factors?cursor=eyJsYXN0X2lkIjo1fQ"
}

Documentation: Risk Factors Endpoint

For complete methodology details, statistical validation, and industry clustering analysis, see the full research paper: Taxonomy-Aligned Risk Extraction from 10-K Filings with Autonomous Improvement Using LLMs.

Risk Categories: Browse the Complete Taxonomy

The Risk Categories endpoint provides API access to the complete taxonomy with descriptions for all categories. This is useful to know what risks are in the taxonomy and what you can filter for.

Endpoint:

GET /stocks/taxonomies/vX/risk-factors

What you get:

  • Complete hierarchy (7 primary, 28 secondary, 140 tertiary categories)
  • Detailed descriptions for each category
  • Filterable by taxonomy version
import requests

url = "https://api.massive.com/stocks/taxonomies/vX/risk-factors"
params = {"primary_category": "financial_and_market", "limit": 999}

response = requests.get(url, params=params, headers={"Authorization": f"Bearer {API_KEY}"})
categories = response.json()["results"]

for cat in categories:
    print(f"{cat['tertiary_category']}: {cat['description'][:100]}...")

Print Output

interest_rate_and_yield_curve_risk: Risk from changes in interest rates or yield curves that can affect borrowing costs, investment re...
market_volatility_and_economic_conditions: Risk from broad market fluctuations, economic downturns, or volatile market conditions that ...

Full JSON Response Example

{
  "results": [
    {
      "taxonomy": 1,
      "primary_category": "financial_and_market",
      "secondary_category": "market_and_investment",
      "tertiary_category": "interest_rate_and_yield_curve_risk",
      "description": "Risk from changes in interest rates or yield curves that can affect borrowing costs, investment returns, asset values, and overall financial performance. This includes risks from both rising and falling interest rate environments and their impact on various aspects of the business."
    },
    {
      "taxonomy": 1,
      "primary_category": "financial_and_market",
      "secondary_category": "market_and_investment",
      "tertiary_category": "market_volatility_and_economic_conditions",
      "description": "Risk from broad market fluctuations, economic downturns, or volatile market conditions that can adversely affect investment portfolios, trading revenues, asset valuations, and overall business performance."
    }
  ],
  "status": "OK",
  "request_id": "e5f6a7b8c9d0",
  "next_url": null
}

Documentation: Risk Categories Taxonomy

Validation: Industry Clustering

External validation confirms the taxonomy captures economically meaningful structure. Companies in the same industry (sharing 2-digit SIC codes) exhibit 63% higher risk profile similarity than cross-industry pairs (Cohen's d=1.06, p<0.001 across four statistical tests). This clustering emerges despite the taxonomy mapping having no access to industry information.

Banking sector analysis demonstrates sector-specific patterns:

  • 83% of banks have interest rate risk vs 22% of all companies
  • 67% of banks have capital and liquidity requirements vs 3% overall
  • 50% of banks have credit risk vs 17% overall
  • 8% of banks have raw material availability risk vs 42% overall

The taxonomy naturally captures what makes banks economically distinctive (interest rate sensitivity, regulatory capital requirements) while filtering out manufacturing and supply chain concerns that dominate other industries.

Risk similarity also predicts industry membership with increasing accuracy at finer granularities: AUC 0.733 for 2-digit SIC codes (broad sectors), 0.798 for 3-digit, and 0.822 for 4-digit (specific industries). The taxonomy captures fine-grained industry characteristics, not merely coarse sectoral patterns.

For more details, see the research paper!

Demo

The demo is a single

main.py
with seven subcommands. Five are thin wrappers around individual endpoints (
index
,
10k
,
8k
,
risks
,
taxonomy
). Two combine data from the risk factors endpoint to answer analytical questions:

  • compare
    compares risk factor profiles across two or more companies, showing category distributions, shared risk themes, and categories unique to each company.
  • timeline
    tracks how a single company's risk factor disclosures changed between filing periods, showing which secondary categories were added or removed.

You can find instructions on running the demo in the README file.

Documentation and Access

API Documentation:

Research Paper:

Taxonomy-Aligned Risk Extraction from 10-K Filings with Autonomous Improvement Using LLMs

Disclaimer

The examples, demos, and outputs produced with this project are generated by artificial intelligence and large language models. You acknowledge that this project and any outputs are provided "AS IS", may not always be accurate and may contain material inaccuracies even if they appear accurate because of their level of detail or specificity, outputs may not be error free, accurate, current, complete, or operate as you intended, you should not rely on any outputs or actions without independently confirming their accuracy, and any outputs should not be treated as financial or legal advice. You remain responsible for verifying the accuracy, suitability, and legality of any output before relying on it.

From the blog

See what's happening at Massive