Home / Guides / Text extraction
Text extraction

Extract 10-Q sections (MD&A and risk factors) with Python

Pull Part I Item 2 (MD&A) and Part II Item 1A (risk factor updates) out of any 10-Q as clean text with one API call per section.

A 10-Q has two parts. Part I holds the quarterly financial statements and management's discussion and analysis (MD&A). Part II holds legal proceedings, risk factor updates, buybacks and exhibits. The /v1/extractor endpoint returns any of those items as plain text or HTML, so you can skip parsing each filer's HTML.

Find the 10-Q

Any 10-Q index URL works. To get the latest one for a company, use the filing search:

r = requests.get(f"{BASE}/v1/filings", params={"query": 'ticker:NVDA AND formType:"10-Q"', "size": 1},
                 headers=HEADERS, timeout=60)
url = r.json()["filings"][0]["linkToFilingDetails"]

Extract MD&A and risk factors

10-Q items are addressed by part and item: part1item2 is MD&A, part2item1a is the risk factor update. This script pulls both from NVIDIA's 10-Q for the quarter ended July 26, 2026, then lists the subheadings of the MD&A.

import os
import requests

BASE = "https://secfeedapi.com"
HEADERS = {"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"}

# NVIDIA's 10-Q for the quarter ended July 26, 2026
url = "https://www.sec.gov/Archives/edgar/data/1045810/000104581026000075/0001045810-26-000075-index.htm"

sections = {}
for item in ["part1item2", "part2item1a"]:
    r = requests.get(f"{BASE}/v1/extractor", params={"url": url, "item": item, "type": "text"},
                     headers=HEADERS, timeout=120)
    r.raise_for_status()
    sections[item] = r.text
    print(f"{item}: {len(r.text.split()):,} words")

# short lines without a period, digits or $ are usually subheadings (not page numbers or table rows)
mdna = sections["part1item2"]
heads = [l.strip() for l in mdna.splitlines()
         if 0 < len(l.strip()) < 60 and not l.strip().endswith(".") and not any(c.isdigit() or c in "$%(" for c in l)]
print("\nMD&A subheadings:")
for h in heads[:12]:
    print(" -", h)

print("\nRisk factors opening:")
print(sections["part2item1a"][:420])

Output:

part1item2: 5,894 words
part2item1a: 5,275 words

MD&A subheadings:
 - Forward-Looking Statements
 - Overview
 - Our Company and Our Businesses
 - Recent Developments, Future Objectives and Challenges
 - Critical Accounting Policies and Estimates
 - Results of Operations
 - Three Months Ended Six Months Ended
 - Operating expenses
 - Revenue and Reportable Segments
 - Revenue by Reportable Segments
 - Three Months Ended Six Months Ended
 - Change

Risk factors opening:
Item 1A. Risk Factors

Other than the risk factors listed below, there have been no material changes from the risk factors previously described under Item 1A of our Annual Report on Form 10-K for the fiscal year ended January 25, 2026 and Item 1A of our Quarterly Report on Form 10-Q for the fiscal quarter ended April 26, 2026.

Purchasing or owning NVIDIA securities involves investment risks including, but not limite

Two things to notice:

  • 10-Q risk factors are usually a delta. Most companies only list risk factors that changed since the 10-K, so Part II Item 1A is often short and points back to the annual report. NVIDIA's says so in its first sentence. Read it together with Item 1A of the latest 10-K.
  • Text mode keeps table rows as lines. Financial tables inside MD&A come through as text rows (the Three Months Ended lines above). Use type=html if you want the tables as HTML, or see cleaning extracted sections to strip them before NLP.

10-Q item codes

ItemCodeContents
Part I, Item 1part1item1Financial statements and notes
Part I, Item 2part1item2MD&A
Part I, Item 3part1item3Market risk disclosures
Part I, Item 4part1item4Controls and procedures
Part II, Item 1part2item1Legal proceedings
Part II, Item 1Apart2item1aRisk factors (changes)
Part II, Item 2part2item2Unregistered sales and share repurchases
Part II, Item 5part2item5Other information, including 10b5-1 plan adoptions
Part II, Item 6part2item6Exhibits

Tips

  • Check the length. A 10-Q MD&A is usually a few thousand words. If a section comes back with only a few hundred words, open the filing: some filers place MD&A text in an unusual position or split it across documents.
  • Part II Item 5 is worth watching. Since 2023 it is where companies disclose officers and directors adopting or ending Rule 10b5-1 trading plans.
  • HTML mode (type=html) keeps bold headings, lists and tables, which is better for rendering in a reader.

Next steps

More text extraction guides

Run this guide with your own key

500 free API calls a month. Every example on this page works on the free plan.

Get free API key →