Skip to main content
ℹ️ Informational only. This series shows how to automate SEC EDGAR data retrieval. Nothing here is investment or legal advice. Always consult a qualified professional before making investment decisions.
📋 PART 3 OF 5

10-Q Tracker — Extract Quarterly Financials the Moment They Drop

Quarterly Financial Monitoring · XBRL Extraction · Automated Comparisons

What is a 10-Q?

Companies file 10-Qs within 40–45 days of each quarter end (Q1, Q2, Q3 — Q4 is covered by the 10-K). Contains:

  • Income statement, balance sheet, cash flow statement
  • MD&A (Management Discussion & Analysis) — management's narrative of results and outlook
  • Risk factor updates — changes to company risk profile
  • Legal proceedings — litigation and regulatory matters

Architecture

The 10-Q monitor detects new filings, extracts standardized XBRL financial data, compares to the prior quarter, flags significant changes, and notifies you:

EDGAR submissions API → detect new 10-Q filing → extract XBRL financial data → compare to prior quarter → generate summary → notify

HEARTBEAT Configuration

name: tenq_tracker
schedule: "0 8 * * 1-5"
steps:
  - fetch_filings:
      type: "10-Q"
      ciks: "{{ watchlist_ciks }}"
      since: "{{ last_run_date }}"
  - extract_xbrl:
      metrics:
        - Revenues
        - NetIncomeLoss
        - OperatingIncomeLoss
        - CashAndCashEquivalentsAtCarryingValue
        - EarningsPerShareDiluted
  - compare:
      to: prior_quarter
      flag_if_change_pct_exceeds: 10
  - llm:
      prompt: |
        Summarize this 10-Q filing in a structured brief:
        - Revenue vs prior quarter
        - Key changes in operating income
        - Notable MD&A language
        - Any new or changed risk factors
        Data: {{ xbrl_data }}
  - notify:
      channel: email
      subject: "📋 10-Q Filed: {{ ticker }} Q{{ quarter }} {{ year }}"

XBRL Extraction with Python

Extract standardized financial metrics from SEC XBRL data using the SEC's Company Facts API:

import httpx

def get_company_facts(cik: str, metric: str):
    padded = cik.zfill(10)
    url = f"https://data.sec.gov/api/xbrl/companyfacts/CIK{padded}.json"
    headers = {"User-Agent": "YourName your@email.com"}
    r = httpx.get(url, headers=headers)
    facts = r.json()
    # Navigate to the metric
    us_gaap = facts.get("facts", {}).get("us-gaap", {})
    if metric not in us_gaap:
        return []
    units = us_gaap[metric].get("units", {})
    # Get USD values, filter for 10-Q form
    usd = units.get("USD", [])
    quarterly = [v for v in usd if v.get("form") == "10-Q"]
    return sorted(quarterly, key=lambda x: x["end"], reverse=True)

Earnings Season Calendar

10-Qs cluster around quarter-end filing deadlines. Adjust your monitoring intensity:

Quarter Period Ends Filing Window Recommended Schedule
Q1 March 31 Mid-April to mid-May Daily during April–May
Q2 June 30 Mid-July to mid-August Daily during July–Aug
Q3 Sept 30 Mid-October to mid-November Daily during Oct–Nov
Off-season Weekly

FAQ

Q: What's XBRL?

A: eXtensible Business Reporting Language — a standardized tagging system the SEC requires for financial data. Makes extraction programmatic instead of manual PDF parsing.

Q: Can I get EPS estimates to compare against?

A: EPS estimates require a paid provider (Visible Alpha, FactSet). EDGAR only has actuals. But you can track consensus estimates separately.

Q: How do I handle companies that are late filers?

A: Late 10-Q filers get NT 10-Q notices in EDGAR. You can monitor those too. Track filing delays as a signal of operational stress.