earnings-analysis — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited earnings-analysis (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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.
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.
Before analysis begins, determine what materials are available:
/mnt/user-data/uploads/ for uploaded files/mnt/skills/public/pdf-reading/SKILL.md for PDFs, /mnt/skills/public/file-reading/SKILL.md for other formats)[Company] Q[X] [Year] earnings results, [Company] earnings call transcript Q[X] [Year], [Company] consensus estimates, [Company] stock reaction earningsValidation gate — do not proceed until confirmed:
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:
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:
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.
Every extracted metric needs context. Raw numbers are meaningless without a reference frame.
#### 2A. Sequential (QoQ) Comparison
#### 2B. Year-over-Year (YoY) Comparison
#### 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
#### 2E. Versus Valuation History
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:
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:
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
#### 3B. Margin Diagnosis
#### 3C. Cash Quality Diagnosis
#### 3D. Balance Sheet Risk Diagnosis
#### 3E. Narrative Shift Diagnosis
This is often the most alpha-generative layer.
Validation gate — do not proceed until confirmed:
The final layer converts diagnosis into actionable output.
#### 4A. The Verdict: What Changed
Summarise in 2–3 sentences:
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
#### 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:
These should be concrete and monitorable, not vague risk factors.
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.
The scoring engine's output_recommendation drives which deliverables to produce. Always honour the routing unless the user explicitly requests something different.
Default output for STRONG_QUARTER cases. A single-page summary as a Word document. Read /mnt/skills/public/docx/SKILL.md before building.
Structure:
┌─────────────────────────────────────────────────┐
│ [Company] (TICKER) — Q[X] FY[YYYY] │
│ Sector | Market Cap | Report Date │
├─────────────────────────────────────────────────┤
│ VERDICT: [Scorer tier] — [1-sentence summary] │
├────────────────────┬────────────────────────────┤
│ KEY METRICS │ BEAT / MISS SCORECARD │
│ Revenue: $X.Xbn │ Rev: Beat/Miss by X% │
│ Gross Margin: XX% │ EPS: Beat/Miss by $X.XX │
│ Op Margin: XX% │ Guide: Raised/Held/Cut │
│ EPS: $X.XX │ Quality: Vol/Mix/Price │
│ FCF: $X.Xbn │ │
├────────────────────┴────────────────────────────┤
│ WHAT CHANGED (3 bullets max) │
├─────────────────────────────────────────────────┤
│ GROWTH DRIVERS │ MARGIN DRIVERS │
├─────────────────────────────────────────────────┤
│ MANAGEMENT TONE: [tone] — [evidence] │
├─────────────────────────────────────────────────┤
│ SCENARIO TABLE (Bull / Base / Bear) │
├─────────────────────────────────────────────────┤
│ ACTION: [position-specific] │
│ RISK TRIGGERS: [2-3 invalidation conditions] │
└─────────────────────────────────────────────────┘Default output for SOLID, MIXED, WEAK, and PROBLEMATIC cases, and for any strong case with an AT_PEAK or EXPECTATIONS_OVERRUN suffix. A 4–6 page Word document. Read /mnt/skills/public/docx/SKILL.md before building.
Formatting. Navy (#1B2A4A) headers, accent blue (#2E75B6) highlights, light grey (#F5F5F5) alternating rows. Body text 10pt Arial. Tables with thin borders. Concise — every sentence must earn its place.
Produced whenever the scorer's output_recommendation includes "+ RISK_MAP". A structured risk assessment as a markdown table or React component:
| Risk Category | Specific Risk | Probability | Impact | Trend | Monitoring Metric |
|---|---|---|---|---|---|
| Growth | Deceleration | Med/High/Low | High/Med/Low | ↑↓→ | Organic growth rate |
| Margin | Input cost pressure | ... | ... | ... | Gross margin % |
| Regulatory | DOJ investigation | ... | ... | ... | Court filings, settlement disclosures |
For critical-flag cases, include a dedicated row for each critical flag with a specific monitoring metric and an explicit invalidation condition.
Produced on user request in addition to the default deliverables. 3–5 paragraphs for a portfolio manager or trading desk:
Different sectors require different KPIs. Read references/parsing-checklist.md for the full sector-specific extraction guide. Key examples:
| Sector | Additional KPIs |
|---|---|
| SaaS / Cloud | ARR, NRR, RPO, customer count, DBNR, Rule of 40, CAC payback |
| Semiconductors | Revenue by end market, ASP trends, utilisation, inventory channel fill, design wins, HBM/AI mix |
| Biotech / Pharma | Pipeline updates, FDA milestones, Rx volumes, launch curves, patent cliffs, R&D productivity |
| Banks / Financials | NIM, loan growth, deposit costs, credit quality (NCO, NPL, reserves), CET1, fee income mix |
| Consumer / Retail | Same-store sales, traffic vs ticket, inventory turns, e-commerce mix, promotional activity |
| Industrials | Organic orders, book-to-bill, backlog, price vs volume, segment margin bridge |
| REITs | FFO/AFFO, occupancy, lease spreads, same-property NOI, development pipeline |
| Energy | Production volumes, realised prices, unit costs, reserves replacement, breakeven price |
Layer 1: PARSE → What happened? (Revenue, margins, EPS, cash, balance sheet, stock context)
Layer 2: COMPARE → How does it stack up? (QoQ, YoY, vs consensus, vs peers, vs valuation)
→ Run scorer at end of Compare for mechanical verdict
Layer 3: DIAGNOSE → Why did it happen? Is it repeatable? What shifted? Address every scorer flag.
Layer 4: DECIDE → So what? What's the action? What would change my mind?The one-page sheet is the minimum viable output for STRONG cases. The full memo is the default for everything else. Always end with a clear view and specific invalidation conditions.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.