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.