skills/defeatbeta-earnings-analysis/SKILL.md
Create professional equity research earnings update reports (8-12 pages, 3,000-5,000 words) analyzing quarterly results for companies already under coverage. Fast-turnaround format focusing on beat/miss analysis, key metrics, updated estimates, and revised thesis. Includes 1-3 summary tables and 8-12 charts. Use when user requests "earnings update", "quarterly update", "earnings analysis", "Q1/Q2/Q3/Q4 results", or post-earnings report.
npx skillsauth add defeat-beta/defeatbeta-api defeatbeta-earnings-analysisInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Create professional EARNINGS UPDATE REPORTS analyzing quarterly results for companies already under coverage, following institutional standards (JPMorgan, Goldman Sachs, Morgan Stanley format).
Key Characteristics:
Use when the user requests:
Do NOT use if:
Every data point in the report falls into exactly one of three tiers. Each tier has a fixed source policy — there is no "default to MCP, sometimes web" ambiguity.
Reported, authoritative financial data. No web fallback. If MCP returns nothing, state the data gap in the report and proceed; do not patch from 10-Q, press release, IR site, or news snippets.
| Content | MCP tool |
|---|---|
| Reported income statement | get_stock_quarterly_income_statement |
| Reported balance sheet | get_stock_quarterly_balance_sheet |
| Reported cash flow statement | get_stock_quarterly_cash_flow |
| Earnings call transcript (management commentary, Q&A) | get_stock_earning_call_transcripts_list then get_stock_earning_call_transcript |
| Stock price | get_stock_price |
| Market capitalization | get_stock_market_capitalization |
| WACC | get_stock_wacc |
| DCF / fair value | get_stock_dcf_analysis (or trigger the defeatbeta-dcf skill) |
| Valuation multiples | get_stock_ttm_pe, get_stock_enterprise_value, get_stock_enterprise_to_ebitda, get_stock_enterprise_to_revenue, get_stock_ps_ratio, get_stock_pb_ratio, get_stock_peg_ratio |
| Margins | get_stock_quarterly_gross_margin, get_stock_quarterly_operating_margin, get_stock_quarterly_net_margin, get_stock_quarterly_ebitda_margin, get_stock_quarterly_fcf_margin |
| YoY growth | get_stock_quarterly_revenue_yoy_growth, get_stock_quarterly_ebitda_yoy_growth, get_stock_quarterly_diluted_eps_yoy_growth, get_stock_quarterly_fcf_yoy_growth, get_stock_quarterly_operating_income_yoy_growth, get_stock_quarterly_net_income_yoy_growth, get_stock_quarterly_ttm_diluted_eps_yoy_growth |
| Capital efficiency | get_stock_quarterly_roic, get_stock_quarterly_roa, get_stock_quarterly_roe, get_stock_quarterly_asset_turnover, get_stock_quarterly_equity_multiplier, get_stock_quarterly_debt_to_equity |
| EPS | get_stock_eps_and_ttm_eps |
| Dataset date probe | get_latest_data_update_date |
MCP is the primary source; web fallback is allowed when MCP returns nothing or coverage is incomplete. Fallback rows must be explicitly labeled in figures, tables, and the Sources section — never blended with MCP data.
| Content | Primary (MCP) | Fallback |
|---|---|---|
| Segment revenue | get_quarterly_revenue_by_segment | Company 10-Q / earnings release supplementary tables |
| Geography revenue | get_quarterly_revenue_by_geography | Company 10-Q / earnings release supplementary tables |
| Prior guidance | get_stock_earning_call_transcript (prior quarter) | Prior-quarter earnings release / 8-K |
| Industry / peer comparables | get_industry_ttm_pe, get_industry_ps_ratio, get_industry_pb_ratio, get_industry_quarterly_gross_margin, get_industry_quarterly_ebitda_margin, get_industry_quarterly_net_margin, get_industry_quarterly_roa, get_industry_quarterly_roe, get_industry_quarterly_asset_turnover, get_industry_quarterly_equity_multiplier | Bloomberg / FactSet peer screens |
Data MCP does not provide. Cite source name and "as of" date. No pretense of MCP coverage.
| Content | Source examples | |---|---| | Consensus estimates (revenue, EPS forecast) | Bloomberg, FactSet, Refinitiv, Yahoo Finance, TipRanks, Insider Monkey — pre-earnings where possible | | Analyst price targets (avg / high / low / count) | Yahoo Finance, TipRanks, Insider Monkey | | Stock reaction history (earnings-day price moves) | Web search, Yahoo Finance | | Options-implied move / IV skew | Options data providers, web search | | Operating metrics (DAU/MAU/ARPU, customer count, store count, units shipped, occupancy, RPO, NRR, etc.) | Company IR site, 10-Q supplementary tables, investor presentation | | Recent news / policy catalysts | Reuters, Bloomberg, sector news outlets |
After Phase 1, every T1 and T2 MCP tool call has produced one cache file under ./<TICKER>_<PERIOD>/cache/. This is the map: pick the right file to Read when drafting each section.
| Need this data | MCP tool called | Cache file (T1 unless noted) |
|---|---|---|
| Reported income statement | get_stock_quarterly_income_statement | income_statement.json |
| Reported balance sheet | get_stock_quarterly_balance_sheet | balance_sheet.json |
| Reported cash flow | get_stock_quarterly_cash_flow | cash_flow.json |
| Earnings call transcript (target period) | get_stock_earning_call_transcript | transcript_current.txt |
| Earnings call transcript (prior period — for prior guidance) | get_stock_earning_call_transcript (prior FY/Q) | transcript_prior.txt |
| Stock price | get_stock_price | price.json |
| Market cap | get_stock_market_capitalization | market_cap.json |
| EPS + TTM EPS | get_stock_eps_and_ttm_eps | eps.json |
| WACC | get_stock_wacc | wacc.json |
| Structured DCF + fair price | get_stock_dcf_analysis | dcf_analysis.json |
| P/E, EV/*, P/S, P/B, PEG | multiple multiple tools | valuation_multiples.json (one file, multiple tool returns) |
| Gross/op/net/EBITDA/FCF margins (history) | 5 margin tools | margins.json (one file, 5 returns) |
| Revenue/op-income/EBITDA/net-income/FCF/EPS YoY (history) | 6 growth tools | growth.json (one file, 6 returns) |
| ROIC, ROE, ROA, asset turnover, equity multiplier, D/E | 6 tools | capital_efficiency.json (one file, 6 returns) |
| Segment revenue (T2) | get_quarterly_revenue_by_segment | segment.json |
| Geography revenue (T2) | get_quarterly_revenue_by_geography | geography.json |
| Industry comparables (T2) | several get_industry_* tools | industry.json (one file, several returns) |
Two helpful conventions for the multi-tool bundles (valuation_multiples, margins, growth, capital_efficiency, industry):
{
"ttm_pe": {...},
"ev_to_ebitda": {...},
"ps_ratio": {...},
"pb_ratio": {...},
"peg_ratio": {...}
}
Tier 3 data lands in ./<TICKER>_<PERIOD>/cache/web_<topic>.txt (web excerpts written verbatim from the search result). Phase 1's MCP fetch does not include Tier 3.
Every data point cites its source. The format depends on tier (see Section 5).
Tier 1 (MCP only):
Source: DefeatBeta MCP get_stock_quarterly_income_statement, AAPL,
fiscal period 2026-03-31, retrieved May 13, 2026.
For transcript-derived commentary, also cite speaker and paragraph number where available:
Source: DefeatBeta MCP get_stock_earning_call_transcript, AAPL FY2026 Q2,
report date April 30, 2026, CFO prepared remarks, paragraph 14.
Tier 2 (MCP preferred, web fallback labeled):
Fallback source: Apple Q2 FY2026 earnings release supplementary table,
https://investor.apple.com/..., retrieved May 13, 2026.
(DefeatBeta MCP get_quarterly_revenue_by_segment did not cover this period.)
Tier 3 (web only):
Source: Yahoo Finance analyst estimates, as of April 29, 2026 (pre-earnings close).
Source: TipRanks analyst price targets, retrieved May 13, 2026 (43 analysts, 3-month window).
Group by tier so readers can immediately see what is authoritative vs. fallback vs. web:
SOURCES & REFERENCES
Tier 1 — DefeatBeta MCP (authoritative):
• get_stock_quarterly_income_statement, AAPL, fiscal period 2026-03-31, retrieved May 13, 2026
• get_stock_quarterly_balance_sheet, AAPL, fiscal period 2026-03-31, retrieved May 13, 2026
• get_stock_quarterly_cash_flow, AAPL, fiscal period 2026-03-31, retrieved May 13, 2026
• get_stock_earning_call_transcript, AAPL FY2026 Q2, report date April 30, 2026, retrieved May 13, 2026
• get_stock_dcf_analysis, AAPL, retrieved May 13, 2026
Tier 2 — DefeatBeta MCP + fallback (where applicable):
• get_quarterly_revenue_by_segment, AAPL, fiscal period 2026-03-31, retrieved May 13, 2026
• Fallback: AAPL Q2 FY2026 earnings press release, https://..., retrieved May 13, 2026
(used for geographic split — MCP did not cover this period)
Tier 3 — Web (MCP does not cover):
• Yahoo Finance consensus estimates, as of April 29, 2026
• TipRanks analyst price targets, retrieved May 13, 2026 (43 analysts)
• Apple Q2 FY2026 user metrics — Apple IR site, https://..., retrieved May 13, 2026
The earnings update process has 5 phases. Detailed procedures live in references/workflow.md; the summary below is for orientation only.
The goal of this phase is not just to retrieve data — it is to create an on-disk source of truth that the report draws from later. Conversation context can be compressed at any time; compressed summaries paraphrase numbers. A report that cites numbers from compressed context is a report that hallucinates digits. The cache is the antidote.
For every Tier 1 and Tier 2 MCP tool call:
./<TICKER>_<PERIOD>/cache/<tool_name>.json (or .txt for transcripts). No paraphrasing. No restructuring. No summarizing. No omitting fields. Byte-for-byte copy. If the return is JSON, Write the JSON as-is; if it's a dict object in your context, serialize it to JSON before Write.Why verbatim matters: the very temptation to "I already saw this data, let me just save the key fields" is what breaks traceability. Once you skip a field at Write time, no later Read can recover it. Resist the temptation. Write everything.
Cache directory layout (see Section 5 below for the full file map):
./<TICKER>_<PERIOD>/cache/
├── income_statement.json
├── balance_sheet.json
├── cash_flow.json
├── transcript_current.txt
├── transcript_prior.txt
├── price.json
├── market_cap.json
├── eps.json
├── wacc.json
├── dcf_analysis.json
├── valuation_multiples.json (P/E, EV/EBITDA, EV/Rev, P/S, P/B, PEG bundled)
├── margins.json (5 margins bundled)
├── growth.json (6 YoY growth metrics bundled)
├── capital_efficiency.json (ROIC, ROE, ROA, asset turnover, etc. bundled)
├── segment.json
├── geography.json
└── industry.json
Choose <PERIOD> after Step 0 below so the directory path is concrete (e.g. ./AMD_FY2025_Q1/cache/).
The cache lives under the current working directory, not under /tmp. Same convention as the defeatbeta-dcf skill, which writes {SYMBOL}_DCF.xlsx to cwd. Rationale: in cowork the cwd is the session's visible working area — users can preview / download the cache files directly, and Claude doesn't have to guess whether a system-level path is writable. If for some reason the cwd is not writable, fall back to a writable location (e.g. mktemp -d) and adjust the paths in the rest of this guide accordingly.
get_latest_data_update_date → write down the dataset date.get_stock_earning_call_transcripts_list(symbol) → pick the target fiscal period (latest by default, or the user-specified fiscal_year + fiscal_quarter).Both calls return tiny payloads — they don't need cache files.
Tier 3 (consensus, analyst PT, operating metrics, news) comes from web search at report-writing time. Apply the same Call-Then-Write discipline to web results: when you fetch a consensus number or a stock-reaction stat, Write the relevant excerpt to ./<TICKER>_<PERIOD>/cache/web_<topic>.txt so it's traceable.
State the gap in the report; do not patch from web. T1 has no fallback by design (see Section 5).
Before citing any number in the report, Read the corresponding cache file. Do not rely on numbers you remember from earlier tool calls — context compression can have altered them. The cache file is the only authoritative source once Phase 1 is complete.
If a cache file is large (e.g. transcript_current.txt is 50K+ chars), use Read with offset + limit to fetch only the relevant section rather than the whole file.
Create 8-12 charts focusing on quarterly trends and what's new:
See references/workflow.md for chart specifications.
Create the 8-12 page DOCX report.
See references/report-structure.md for complete page-by-page templates and formatting requirements.
High-level structure:
Verify content, formatting, accuracy, and tier-correct citations before delivery. See references/best-practices.md for the full checklist (single source of truth — do not duplicate verification logic elsewhere).
Primary Deliverable: DOCX report (8-12 pages)
File Name: [Company]_Q[Quarter]_[Year]_Earnings_Update.docx
Example: Nike_Q2_FY24_Earnings_Update.docx
Contents:
Optional Deliverable: XLS model update (optional for earnings updates)
| Aspect | Earnings Update | Initiation Report | |--------|----------------|-------------------| | Length | 8-12 pages | 30-50 pages | | Words | 3,000-5,000 | 10,000-15,000 | | Tables | 1-3 summary | 12-20 comprehensive | | Figures | 8-12 | 25-35 | | Turnaround | 1-2 days | 3-6 weeks | | Scope | Quarterly results | Complete company | | Focus | What's NEW | Everything | | Company Background | Brief mention | 6-10 pages | | XLS Model | Optional | Required |
Detailed Phase 1-5 instructions with step-by-step procedures for data collection, analysis, chart generation, and report creation.
Complete page-by-page templates, table formats, and formatting requirements for the DOCX report.
Examples of good/bad headlines, tips for success, common mistakes to avoid, and comprehensive quality checklist.
Required:
Optional:
defeatbeta-dcf skill — produces an editable DCF Excel; reference it from Step 10 when the user wants a working DCF spreadsheet alongside the earnings report.development
Generate a fully editable Discounted Cash Flow (DCF) valuation spreadsheet for a public company. Builds a single-sheet Excel workbook with WACC, growth estimates, 10-year FCF projections, and fair price — all wired as live formulas so users can flex discount rate or growth assumptions and see fair price update. Triggers on DCF analysis, discounted cash flow, intrinsic value, fair price estimate, build a DCF model, value [company].
development
Build pre-earnings analysis with estimate models, scenario frameworks, and key metrics to watch. Use before a company reports quarterly earnings to prepare positioning notes, set up bull/base/bear scenarios, and identify what will move the stock. Triggers on earnings preview, what to watch for company earnings, pre-earnings, earnings setup, or preview Q[X] for a company.
development
Professional financial analysis using 60+ market data APIs. Use for: company fundamentals (revenue, margins, EPS, balance sheet), valuation (P/E, P/B, P/S, PEG, DCF, intrinsic value), profitability (ROE, ROA, ROIC), growth trends (YoY revenue/earnings/FCF), earnings transcripts (key data, changes, guidance), industry benchmarking, segment/geography revenue breakdown, business model analysis, competitive landscape, risk analysis, investment thesis, bull/bear scenarios. Trigger on: stock tickers, company names, financial metrics, or any investment research request. DO NOT trigger for: general economics, non-public companies, crypto/commodities with no equity ticker.
development
Maintainer-only workflow for handling GitHub Secret Scanning alerts on OpenClaw. Use when Codex needs to triage, redact, clean up, and resolve secret leakage found in issue comments, issue bodies, PR comments, or other GitHub content.