investing-edgar-watch
Foundational EDGAR muscle for the investing capability. Pulls capex from hyperscaler 10-Qs, summarizes direction (up/down/flat) per company and in aggregate, and writes a structured brief the thesis layer consumes as phase-marker anchor data.
Status: scaffold v0 (2026-05-17). The implementation (EDGAR HTTP client, XBRL parser, capex extraction) lands in a future build session. This file is the SOP shape future sessions execute against.
Why this skill exists
The AI-infra theses (memory, power, DC infra) all sit downstream of hyperscaler capex direction. If GOOGL/AMZN/MSFT/META capex inflects flat or down, the demand-side anchor for those theses is breaking — that's a phase-marker flip that should drive exit decisions, not a "we'll check next quarter" delay.
EDGAR is free, primary-source, and machine-readable via XBRL. There is no excuse for reading capex direction from a Bloomberg headline.
Inputs
quarter— optional, formattedYYYY-QN(e.g.2026-Q1). Defaults to the latest quarter for which all Tier 1 hyperscalers have filed a 10-Q.
If invoked before all Tier 1 filings exist for the named quarter, fail loudly with a list of who has not yet filed. Do not produce a partial brief.
Invocation
/investing:edgar-watch # latest filed quarter, all Tier 1
/investing:edgar-watch 2026-Q1 # specific quarter
/investing:edgar-watch 2026-Q1 +t2 # include Tier 2 (ORCL, AAPL)
Cron schedule
Run 8 weeks after quarter end, by which time all hyperscalers have filed their 10-Q:
- Feb 28 → covers Q4 prior year
- May 31 → covers Q1
- Aug 31 → covers Q2
- Nov 30 → covers Q3
Wire via /schedule skill when implementation lands.
Target companies
Tier 1 (hyperscalers, always included):
| Company | Ticker | CIK |
|---|---|---|
| Alphabet | GOOGL | 0001652044 |
| Amazon | AMZN | 0001018724 |
| Microsoft | MSFT | 0000789019 |
| Meta | META | 0001326801 |
Tier 2 (cloud-adjacent capex, opt-in via +t2):
| Company | Ticker | CIK |
|---|---|---|
| Oracle | ORCL | 0001341439 |
| Apple | AAPL | 0000320193 |
Data source
SEC EDGAR free API. No auth required — just a User-Agent header per SEC rules.
- Submissions index per CIK:
https://data.sec.gov/submissions/CIK<10-digit>.json(lists every filing; filterform == "10-Q") - Company facts (XBRL, all numeric tags ever filed):
https://data.sec.gov/api/xbrl/companyfacts/CIK<10-digit>.json - Filing-level financial reports:
https://www.sec.gov/cgi-bin/browse-edgar(HTML fallback when XBRL is missing a tag)
SEC rules (load-bearing):
- Max 10 requests/sec across the whole
data.sec.govhost. Space requests at least 100ms apart. User-AgentMUST identify the requester. UseRay Data Co edgar-watch ben@raydata.co.- No API key. Don't fabricate one.
Process
Step 1 — Discover new filings
For each target CIK, fetch the submissions index and filter for form == "10-Q" filings dated after the last run. State file at ~/.claude/state/edgar-watch-last-run.json tracks per-CIK most-recent-accession.
If the named quarter is missing for any Tier 1 company, fail with {company} has not yet filed 10-Q for {quarter}. Do not partial-fill.
Step 2 — Extract capex from the cash flow statement
Capex lives in the cash-flow statement as "Purchases of property and equipment" (or company-specific variants). Pull via XBRL companyfacts using these tags in priority order:
us-gaap:PaymentsToAcquirePropertyPlantAndEquipment— standard GAAP tag, covers GOOGL/AMZN/MSFT/META reliablyus-gaap:PaymentsToAcquireProductiveAssets— fallback- Company-specific extension tags — last resort, requires per-company override map
Extract the value for the quarter's reporting period (compare start/end dates against quarter boundaries). Always pull the as-reported number — restatements are noted separately, not silently overwritten.
Step 3 — Capture management commentary on capex guidance
The 10-Q MD&A section contains forward-looking capex language. The companyfacts XBRL feed doesn't expose this — fetch the filing HTML and grep for capex-related sentences.
Constraint: quote-pulls are ≤15 words each, verbatim, in quotes. Do NOT paraphrase guidance. If a company gives a number ("we expect ~$80B capex in fiscal 2026"), pull that sentence exactly.
If MSFT or another company discloses AI-specific capex breakouts (e.g. "AI infrastructure"), capture the line item separately in the brief.
Step 4 — Compute deltas
Per company:
capex_this_q— quarter being reportedcapex_prior_q— sequential prior quarter (QoQ)capex_yoy_q— same quarter one year ago (YoY)direction— one ofUP/DOWN/FLAT(FLAT = within ±5% QoQ AND ±10% YoY)
Aggregate across Tier 1: sum capex this quarter vs sum prior quarter vs sum YoY → aggregate direction.
Step 5 — Write the quarterly pulse brief
File at ~/rdco-vault/01-projects/investing/anchors/hyperscaler-capex/<YYYY-Q>-quarterly-pulse.md.
Frontmatter:
---
date: YYYY-MM-DD
type: investing-anchor-pulse
anchor: hyperscaler-capex
quarter: YYYY-QN
companies_tier1: [GOOGL, AMZN, MSFT, META]
companies_tier2: []
aggregate_direction: UP|DOWN|FLAT
source: sec-edgar-10-q
tags: [investing, anchor, hyperscaler-capex, <quarter>]
---
Body sections (required):
## Aggregate read— one paragraph: aggregate direction, total capex this quarter, vs prior quarter, vs YoY. Lead with the verdict.## Per-company table— markdown table: | Company | This Q ($B) | Prior Q ($B) | QoQ % | YoY Q ($B) | YoY % | Direction |## Guidance quote-pulls— per company, ≤15-word verbatim quotes from the 10-Q MD&A on forward capex.## AI-specific breakouts— capture any company that separately discloses AI infra capex. Skip the section if no company does.## Thesis cross-reference— which active investing theses (in~/rdco-vault/01-projects/investing/theses/) depend on this anchor, and whether this quarter's read confirms or breaks the demand-side argument. Match by tag overlap (memory,power,dc-infra,ai-infra).## Restatements / amendments— note any 10-Q/A amendments that changed prior-period capex.
Step 6 — Return
One-line summary:
hyperscaler-capex <YYYY-QN> | aggregate <UP|DOWN|FLAT> | <X%> QoQ | <Y%> YoY | brief: <path>
Edge cases
- Rate limit (10 req/sec) — space all requests at least 100ms apart. The Python helper handles this; do not parallel-fetch across CIKs.
- XBRL tag variation — some companies extend GAAP with their own tags. Maintain a per-CIK tag-override map in the helper.
- HTML-only filings — older filings or amendments may not have full XBRL. Fall back to HTML scrape only when XBRL returns empty.
- 10-Q vs 10-K — Q4 capex requires the 10-K (annual), then subtract Q1+Q2+Q3 from full-year to derive Q4. Document this in the brief when applicable.
- Restatements / 10-Q/A — if a prior quarter's capex was restated, capture both the original and restated value in the brief's restatements section. Do not silently overwrite the historical comparison.
- Fiscal year offsets — MSFT fiscal year ends June 30. Map MSFT fiscal quarters to calendar quarters explicitly in the helper; do not assume calendar alignment.
Companion script (stub interface — implement in future session)
Path: ~/.claude/scripts/edgar-fetch.py
Sketch interface (do NOT implement tonight):
# edgar-fetch.py — SEC EDGAR client + XBRL capex extractor
USER_AGENT = "Ray Data Co edgar-watch ben@raydata.co"
RATE_LIMIT_MS = 100 # spacing between requests
def list_filings(cik: str, form: str = "10-Q") -> list[dict]:
"""Fetch submissions index, return filings matching form."""
def get_company_facts(cik: str) -> dict:
"""Fetch full XBRL companyfacts payload."""
def extract_capex(facts: dict, period_start: str, period_end: str) -> dict:
"""Pull capex line item for the named period.
Tries GAAP tags in priority order, then company-specific overrides.
Returns {value, tag_used, as_reported_date}."""
def fetch_filing_html(accession: str) -> str:
"""Pull the 10-Q HTML for MD&A guidance extraction."""
# CLI:
# edgar-fetch.py filings <CIK>
# edgar-fetch.py capex <CIK> --period 2026-Q1
# edgar-fetch.py guidance <CIK> --accession <accession>
Dependencies
Install into ~/.claude/scripts/edgar-venv/ when the implementation lands:
requests— HTTP clientlxml— XBRL + HTML parsing (faster than ElementTree, handles namespaces cleanly)
No paid feeds. No API keys. No 1Password entries required (EDGAR is unauthenticated).
Caveats (load-bearing — read every time)
- Capex direction is a NECESSARY but not SUFFICIENT signal for the AI-infra theses. A flat quarter does not break the thesis on its own — but a flat quarter PLUS a guidance walk-back is a phase-marker flip worth surfacing immediately to founder, not waiting for the next quarterly run.
- SEC data is as-reported. Mid-quarter capex announcements (press releases, earnings calls held before the 10-Q files) are NOT in EDGAR — this skill is a quarterly snapshot, not a real-time signal. Real-time capex tracking is a separate skill (not built; flag if founder asks for it).
- Hyperscaler capex includes ALL property/equipment purchases (DCs, offices, fleet vehicles, retail buildout for AMZN). It is a proxy for AI-infra spend, not a pure read. The MD&A quote-pulls are what distinguish AI capex from general capex.
- Never deploy live capital off this skill's output alone. This anchor feeds the thesis layer; trade decisions stay gated on
/decisions/pages.
Related
- [[01-projects/investing/README.md]] — v2 quality process + risk frame
- [[01-projects/investing/theses/2026-05-17-memory-cycle-v1.md]] — primary consumer of this anchor (hyperscaler capex is the load-bearing demand signal)
- [[01-projects/investing/theses/2026-05-17-power-cycle-v1.md]] — secondary consumer
- [[01-projects/investing/theses/2026-05-12-innermost-loop-ai-infrastructure.md]] — frame doc
- [[.claude/skills/investing-build-thesis/SKILL.md]] — sibling: thesis synthesis (reads this anchor's briefs)
- [[.claude/skills/investing-backtest-thesis/SKILL.md]] — sibling: walk-forward backtest
Changelog
- 2026-05-17 — v0 scaffold authored. SOP shape locked; EDGAR client + XBRL parser + brief writer deferred to future build session.