Learning Hub
Lesson #66 of 70
Finance & FinOps AI8 min readAdvanced
Multi-Table SEC 10-K/10-Q Parsing & XBRL Tag Extraction
Extract multi-year financial tables from SEC EDGAR filings, parse XBRL US-GAAP taxonomies, reconcile restated line items, and audit footnote disclosures.
Works with:sec-edgar-downloaderBeautifulSoup4Python xbrlLlamaParse
Key Takeaways
- SEC EDGAR filings are published in HTML and Inline XBRL (iXBRL) format, embedding machine-readable accounting tags directly into filing documents
- XBRL taxonomy concepts (e.g., `us-gaap:Revenues`, `us-gaap:OperatingIncomeLoss`) standardize financial line items across public companies
- LLM agents must identify restatements and changes in accounting estimates across consecutive 10-K annual reports
- Footnote disclosure tables (leases, segment reporting, stock-based compensation) require table-aware parsing algorithms
The Diagnostic Context
Extracting historical financial data from 200-page SEC 10-K annual filings manually takes hours. Utilizing automated XBRL extraction pipelines allows analysts to ingest structured financial data across thousands of public companies programmatically.
The Core Technique
Parsing SEC EDGAR Filings & XBRL Concepts
PYTHON
import requests
import json
def fetch_sec_company_facts(cik_str: str) -> dict:
"""
Fetches SEC Company Facts API directly from EDGAR (Zero scrape latency).
CIK must be 10 digits padded with leading zeros.
"""
headers = {'User-Agent': 'JnachiFinance Research/1.0 (contact@jnachi.com)'}
cik_padded = cik_str.zfill(10)
url = f"https://data.sec.gov/api/xbrl/companyfacts/CIK{cik_padded}.json"
response = requests.get(url, headers=headers)
if response.status_code != 200:
raise ConnectionError(f"SEC EDGAR returned status {response.status_code}")
data = response.json()
gaap_facts = data.get("facts", {}).get("us-gaap", {})
# Extract Revenue History across 10-K filings:
revenues = gaap_facts.get("Revenues", {}).get("units", {}).get("USD", [])
annual_revenues = [r for r in revenues if r.get("form") == "10-K"]
return {
"company_name": data.get("entityName"),
"cik": cik_str,
"recent_annual_revenues": annual_revenues[-5:] # Last 5 years
}
Handling Restatements & Footnote Leases
- ASC 842 Lease Standards: Operating leases must be capitalized as Right-of-Use (ROU) assets with corresponding lease liabilities.
- Segment Reporting (ASC 280): Ingest operating profit by business division and geographical region to model segment-level revenue drivers.
5-Minute Activation Challenge
Try This Right Now
Use the SEC Company Facts API structure above with Apple CIK (0000320193) to inspect how R&D Expense (`us-gaap:ResearchAndDevelopmentExpense`) is recorded over time!
Tip: Knowledge only becomes capability once you run the prompt yourself.
Comprehension Check
Test Your Instincts (1 Questions)
1