Install
$ agentstack add skill-hhfinai-claude-equity-research-skills-earnings-analysis ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Earnings Analysis: Institutional-Quality Quarterly Review Framework
Overview
This skill transforms raw earnings materials (filings, releases, transcripts) into structured investment-grade analysis. It moves beyond simple beat/miss reporting to diagnose why results deviated, what matters for the forward thesis, and what action follows — the way a senior buyside analyst processes a quarter.
Philosophy: The market doesn't pay for knowing what happened. It pays for knowing what changed, whether it's repeatable, and what's mispriced. Every earnings analysis must answer: "So what? What do I do now?"
Two-part architecture. The skill is a four-layer analytical framework (Parse → Compare → Diagnose → Decide) anchored by a Python scoring engine at scripts/score_earnings.py that produces a mechanical composite verdict, flag inventory, and expectations regime classification. The scorer runs at the end of Step 2 and anchors the judgment work in Steps 3 and 4 — it is an input to the diagnosis, not a replacement for it.
Input Types & Parsing Priority
The skill handles these inputs, in priority order:
| Input Type | What to Extract | How to Access | |------------|----------------|---------------| | User-uploaded files | Full filing/transcript content | Read from /mnt/user-data/uploads/ using pdf-reading or file-reading skills | | Earnings release / 8-K | Headline KPIs, segment data, guidance, non-GAAP reconciliation | Parse uploaded file or search web | | 10-Q / 10-K filing | Revenue detail, margin breakdown, balance sheet, cash flow, MD&A | Parse uploaded file or search web | | Earnings call transcript | Management tone, forward commentary, Q&A signals, guidance language | Parse uploaded file or search web | | Consensus estimates | Revenue, EPS, margin expectations, whisper numbers | Web search (Yahoo Finance, Visible Alpha, Seeking Alpha) | | Historical quarter data | Sequential and YoY comparison base | Web search or user-provided |
If files are provided, always start there. If no files, use web_search to find the latest earnings materials. Aim for 5–8 searches to gather comprehensive data including consensus expectations and stock reaction context.
Workflow
Step 0: Input Triage
Before analysis begins, determine what materials are available:
- Check
/mnt/user-data/uploads/for uploaded files - If files exist, read them using the appropriate method (
/mnt/skills/public/pdf-reading/SKILL.mdfor PDFs,/mnt/skills/public/file-reading/SKILL.mdfor other formats) - If no files, search for:
[Company] Q[X] [Year] earnings results,[Company] earnings call transcript Q[X] [Year],[Company] consensus estimates,[Company] stock reaction earnings - Identify the fiscal quarter and reporting date
- Note what's available vs missing — missing inputs aren't fatal but affect analysis depth
Validation gate — do not proceed until confirmed:
- [ ] Company identified with ticker, sector, market cap
- [ ] Reporting quarter identified (fiscal quarter, calendar date)
- [ ] At least ONE primary source obtained (earnings release, filing, or transcript)
- [ ] Prior quarter and prior year baseline data located (or flagged as unavailable)
Step 1: PARSE — Extract Structured Data
Extract data points systematically. Use references/parsing-checklist.md for sector-specific KPIs.
1A. Financial KPIs
| Category | Metrics to Extract | |----------|-------------------| | Revenue | Total revenue, organic growth %, segment breakdown, geographic mix, recurring vs one-time, ASP vs volume decomposition | | Margins | Gross margin, operating margin, EBITDA margin, net margin; GAAP vs non-GAAP reconciliation; SBC as % of revenue | | Earnings | GAAP EPS, adjusted EPS, non-GAAP reconciliation items, share count, buyback contribution to EPS | | Cash Flow | Operating cash flow, free cash flow, capex (growth vs maintenance), working capital, DSO/DIO/DPO trends | | Balance Sheet | Cash, total debt, net debt, debt maturity profile, inventory, goodwill/intangibles, deferred revenue |
1B. Forward Indicators
| Category | What to Extract | |----------|----------------| | Guidance | Revenue range, EPS range, margin guidance, capex plans, new metrics guided; compare to prior guidance (raised/maintained/lowered); note magnitude (modest/meaningful/massive) | | Backlog / Pipeline | Order book, RPO, bookings, book-to-bill ratio | | Leading KPIs | DAU/MAU, ARR/NRR, same-store sales, subscriber count, pipeline conversion — whatever is sector-relevant |
1C. Management Language Signals
Parse the earnings call transcript (or MD&A section) for:
| Signal Type | What to Flag | |-------------|-------------| | Confidence markers | "Confident", "strong visibility", "accelerating", "ahead of plan", "raising" | | Hedging markers | "Cautiously optimistic", "uncertain environment", "monitoring closely", "prudent" | | Deflection markers | Pivoting away from questions, "we don't guide to that", avoiding previously guided specifics | | New language | Terms appearing for the first time — often signals strategic pivots or emerging risks | | Tone shift | Compared to prior quarter: is management more/less bullish on specific segments? | | Q&A tells | Which topics drew most follow-ups? What did management dodge? What got a surprisingly detailed answer? |
1D. Stock Context (for Scorer)
Collect data needed to classify expectations elevation:
- Trailing 12-month stock return (%)
- Percentage recovery from 52-week low (%)
- Current drawdown from all-time high (%)
- Stock reaction to the print (positive / flat / negative)
These inputs feed the expectations elevation classifier in the scoring engine, which determines how the market's reaction should be interpreted relative to the underlying fundamentals.
Validation gate — do not proceed until confirmed:
- [ ] Revenue, EPS, margin extracted (GAAP and non-GAAP where applicable, or flagged as unavailable)
- [ ] At least one forward indicator captured (guidance, backlog, or leading KPI, or flagged as unavailable)
- [ ] Management language scan completed (or flagged as "no transcript available")
- [ ] Stock context collected for scorer inputs (or flagged as unavailable — scorer will use neutral defaults)
- [ ] Data gaps explicitly noted for the diagnosis step
Missing inputs are not blockers. The scorer accepts partial input and applies neutral defaults for anything not passed. The cost of missing data is interpretive, not mechanical: list every assumed input in Step 3 so the reader knows which dimensions of the verdict rest on disclosed data versus defaults.
Step 2: COMPARE — Multi-Horizon Benchmarking
Every extracted metric needs context. Raw numbers are meaningless without a reference frame.
2A. Sequential (QoQ) Comparison
- Revenue growth trajectory: accelerating, stable, or decelerating?
- Margin expansion or compression vs prior quarter?
- Cash conversion trend?
- Guidance change: raised, maintained, or lowered vs prior quarter's guidance?
2B. Year-over-Year (YoY) Comparison
- Organic revenue growth (exclude acquisitions, FX, one-offs)
- Margin change with driver attribution (mix shift, pricing, cost, scale)
- EPS growth decomposed into operational vs financial engineering (buybacks, tax rate, below-the-line items)
2C. Versus Consensus
The market prices off expectations, not absolutes. This is the most important comparison.
| Metric | Reported | Consensus | Delta | Interpretation | |--------|----------|-----------|-------|----------------| | Revenue | | | | Beat/miss magnitude; quality of beat (one-time vs sustainable) | | EPS | | | | Decompose: operational or below-the-line? | | Guidance midpoint | | | | Forward expectations raised/lowered? | | Key segment | | | | Where did the surprise come from? |
Beat quality matters more than beat size. A 2% revenue beat from pull-forward demand is worse than a 0.5% beat from new customer wins. Always diagnose the source. Also note whisper numbers where available — a beat that meets consensus but misses whisper will trade negatively.
2D. Versus Peers
- Did the company outperform or underperform sector trends?
- Are margin differences structural or timing-driven?
- Is the company gaining or losing share?
2E. Versus Valuation History
- Current forward P/E vs 5-year average
- EV/Revenue or EV/EBITDA relative to growth rate
- How has the market historically repriced this stock after similar quarters?
Step 2.5: RUN THE SCORING ENGINE
Once Compare is substantially complete, invoke the scorer to produce a mechanical composite verdict that anchors Steps 3 and 4. The scorer is at scripts/score_earnings.py. Read references/scoring-engine.md first for the full input schema, verdict tiers, flag library, and sample invocation.
The scorer output gives you:
- Composite score (integer, typically -15 to +18)
- Base verdict tier (STRONG / SOLID / MIXED / WEAK / PROBLEMATIC)
- Verdict suffix modifiers where applicable (ATPEAK, EXPECTATIONSOVERRUN, WITHCRITICAL_FLAGS)
- Expectations regime (constructive / overrun / whisper_overrun / depressed / balanced / deteriorating)
- Expectations elevation (low / medium / high / extreme)
- Complete flag inventory with narrative text
- Output recommendation (which deliverables to produce)
Treat the scorer verdict as a hypothesis to be validated or overridden by the judgment work in Step 3. If you disagree with the scorer, explain why — the scorer catches mechanical patterns but can miss narrative, competitive, or regulatory context that matters for the investment thesis.
Validation gate — do not proceed until confirmed:
- [ ] QoQ and YoY comparison completed for revenue, margins, EPS (or flagged as unavailable for the missing periods)
- [ ] Consensus comparison completed where consensus is available (flag explicitly if no consensus could be located)
- [ ] Beat/miss quality diagnosed (operational vs one-time/financial engineering)
- [ ] Forward guidance compared to consensus expectations (or flagged as not provided / no consensus)
- [ ] Scoring engine invoked and output captured (partial inputs are acceptable; document assumed defaults)
Step 3: DIAGNOSE — Explain What Changed and Why
This is the analytical core. Move from what happened to why it happened and whether it persists. Every scorer flag that fired must be addressed in the diagnosis.
3A. Growth Diagnosis
- What drove the revenue delta? (volume, pricing, mix, FX, acquisitions, one-offs)
- Is the growth rate accelerating, stable, or decelerating? What's the second derivative?
- Are leading indicators (bookings, pipeline, DAU, ARR) confirming or diverging from reported growth?
- Is growth quality improving? (recurring > one-time, organic > acquired, high-margin > low-margin)
3B. Margin Diagnosis
- Was margin change driven by gross margin or opex leverage?
- Gross margin drivers: input costs, pricing power, mix shift, scale
- Opex drivers: hiring pace, R&D investment, S&M efficiency, G&A leverage
- For high-GM businesses (pharma, software, luxury), operating margin trajectory matters more than gross margin — OPM compression without GM compression signals operating deleverage or opex ramp
- Is SBC growing faster than revenue?
- Is management guiding for margin expansion or reinvestment?
3C. Cash Quality Diagnosis
- OCF/NI conversion — is earnings quality high? (OCF is more reliable than FCF for quality signal because it excludes capex noise)
- FCF/NI conversion — and is low FCF a quality concern or a growth capex mode signal?
- Working capital — is DSO rising (revenue recognition concern)? Is inventory building (demand risk)?
- Capex intensity — growth vs maintenance split; what's the return profile?
3D. Balance Sheet Risk Diagnosis
- Net debt trajectory — improving or deteriorating?
- Debt maturity wall — any near-term refinancing risk?
- Goodwill/intangibles as % of total assets — impairment risk?
- Off-balance-sheet exposures (operating leases, unconsolidated entities, guarantees)
3E. Narrative Shift Diagnosis
This is often the most alpha-generative layer.
- Has management's strategic narrative changed from prior quarters?
- Are there new buzzwords, new segment disclosures, or new metrics being emphasised?
- Has the investment thesis evolved? (growth story becoming a margin story, or vice versa)
- What did management stop talking about? (often more telling than what they started saying)
- Did the CEO/CFO tone shift between prepared remarks and Q&A?
Validation gate — do not proceed until confirmed:
- [ ] Growth, margin, and cash flow drivers each diagnosed with specific attribution
- [ ] Repeatability assessed for each major driver (one-time vs structural)
- [ ] Narrative shift (or continuity) identified with evidence
- [ ] Every scorer flag that fired has been addressed in the diagnosis
- [ ] At least one non-obvious insight surfaced beyond the headline beat/miss
Step 4: DECIDE — Translate to Investment Action
The final layer converts diagnosis into actionable output.
4A. The Verdict: What Changed
Summarise in 2–3 sentences:
- What is the single most important thing that changed this quarter?
- Does this change strengthen, weaken, or leave unchanged the prior investment thesis?
- Is this a thesis-confirming, thesis-evolving, or thesis-breaking quarter?
The scorer verdict is the mechanical anchor. Your written verdict should agree with it or explicitly explain why you're overriding it.
4B. Scenario Framework
| Scenario | Description | Probability | Implied Valuation | |----------|-------------|-------------|-------------------| | Bull | What goes right from here — extrapolate positive trends | | | | Base | Current trajectory continues — management delivers on guidance | | | | Bear | What could go wrong — risks materialise, growth disappoints | | |
For each scenario, describe the revenue/margin trajectory, the key assumption, and rough valuation implications.
4C. Repricing Path
- What would cause the street to revise estimates up or down?
- Is there a catalyst calendar ahead? (next quarter, product launch, regulatory decision, M&A)
- Is the stock likely to re-rate on this quarter, or is it a "show me" story?
4D. Trade/Research Implications
| If Position | Action | Rationale | |-------------|--------|-----------| | Long | Add / Hold / Trim / Exit | Why? What changed for the position? | | Short | Cover / Hold / Add | Why? Is the bear case weakening or strengthening? | | No position | Initiate / Watchlist / Pass | Why? What would trigger a position? |
4E. Risk Triggers & Invalidation
Identify 3–5 specific, measurable conditions that would invalidate the current view:
- e.g., "If organic growth falls below 5% for two consecutive quarters"
- e.g., "If gross margin drops below 60% excluding one-time charges"
- e.g., "If management lowers FY guidance by more than 5% at midpoint"
These should be concrete and monitorable, not vague risk factors.
Scoring Engine Reference
The scoring engine at scripts/score_earnings.py produces the mechanical composite verdict that anchors Steps 3 and 4. Before invoking it, read references/scoring-engine.md for the complete input schema, the three scoring layers, the expectations elevation and regime classifiers, verdict tiers and routing, the critical-flag override, and the full flag library.
Defaults handling. All scorer inputs have sensible defaults, so partial invocation is fine when source materials are incomplete. Any input not passed is treated as neutral (no flag fires, no score impact). When proceeding with missing inputs, list them explicitly in the Diagnose step so the reader knows which dimensions of the score rest on assumed values rather than disclosed data.
Output De
…
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: HHFinAi
- Source: HHFinAi/claude-equity-research-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.