Skip to content
Development
Skill

/earnings-analysis

Use when analyzing an earnings report or the market's reaction to one. Covers what actually matters in the release, the reaction as information, guidance versus results, and post-earnings drift. Trigger on "should i hold through earnings", "stock beat estimates but dropped,

From plugin
claude-skills-collection
34137 skills

Claude Code

$ npx -y skills add nimadorostkar/Claude-Skills-collection --skill earnings-analysis --agent claude-code

SKILL.md

earnings-analysis.SKILL.md
name: earnings-analysis
description: Use when analyzing an earnings report or the market's reaction to one. Covers what actually matters in the release, the reaction as information, guidance versus results, and post-earnings drift. Trigger on "should i hold through earnings", "stock beat estimates but dropped, why", "break down this earnings report". Do not use for reading the chart setup into the report — see the technical-analysis skill.
metadata:
  category: finance
  version: 1.0.0
  tags: [earnings, fundamentals, guidance, reaction, drift]

Earnings Analysis

Purpose

Read an earnings report for what matters, and read the market's reaction as information in its own right. A stock falling on a beat is telling you something that the beat alone does not.

When to Use

  • Analyzing a company's quarterly results.
  • Interpreting an unexpected reaction to a report.
  • Assessing guidance and its credibility.
  • Deciding whether to hold a position through an announcement.

Capabilities

  • Reading the release: revenue quality, margins, guidance, one-time items.
  • Reaction analysis: what a move against the result implies.
  • Guidance assessment and management credibility.
  • Post-earnings-announcement drift.
  • Gap risk assessment before a report.

Inputs

  • The release, the guidance, and the call transcript.
  • Consensus expectations, and — more importantly — the whisper number.
  • The stock's positioning and implied move going in.

Outputs

  • What the report actually said, separated from what the headline said.
  • An interpretation of the reaction.
  • The implication for a position.

Workflow

1. **Read the guidance first** — The market discounts the future. A quarter that beat, with guidance cut, is a bad report. The headline EPS number is the least important figure in the release. 2. **Check the quality of the beat** — Revenue beat, or a lower tax rate? Margin expansion, or a one-time gain? A beat driven by a buyback reducing the share count is not operating performance. 3. **Read the reaction as information** — A stock that falls on a beat means expectations were higher than the published consensus, or the guidance disappointed, or the market disbelieves something. It is information, and it is usually more reliable than your reading of the release. 4. **Assess management's credibility** — Compare this guidance with the last four. Management that guides conservatively and beats is different from management that guides optimistically and misses. 5. **Consider the drift** — Stocks that gap up on a genuine surprise have historically tended to continue drifting in that direction for weeks. This is one of the most persistent documented anomalies, and it is also a crowded one.

Best Practices

  • The headline EPS number is the least informative figure in the release. It is the most adjustable, the most gamed, and the most anticipated.
  • A stock falling on a beat is the market disagreeing with you before you have finished reading. Take that seriously rather than concluding the market is wrong.
  • Guidance moves stocks; the completed quarter is history. A miss with raised guidance frequently rises.
  • Watch the year-over-year growth *rate*, not just the growth. Decelerating growth at a high multiple is the most reliable way to lose money on a good company.
  • Holding through earnings is taking an unhedged overnight gap risk that your position sizing almost certainly did not account for. If you hold, size for the gap.
  • Read the call, not the press release. The prepared remarks are marketing; the question-and-answer section is where the analysts ask what management omitted.

Examples

**Reading past the headline:**

Company reports:
  EPS         : $2.14 vs $2.05 consensus     BEAT by 4.4%
  Revenue     : $4.82B vs $4.79B consensus   BEAT by 0.6%
  Stock       : -12% after hours

The headline says "beats on both lines". The stock says otherwise. The stock
is right. What the release actually contains:

  Gross margin      : 61.2% vs 64.8% a year ago   -> 360bp of compression
  Revenue growth    : +14% YoY, decelerating from +22% and +19% in the prior
                      two quarters. The growth rate is halving.
  The EPS beat      : driven by a $0.11 benefit from a lower tax rate and a
                      buyback. Operating EPS was a MISS.
  Guidance          : next quarter revenue guided to $4.9B-$5.0B versus a
                      $5.2B consensus. A 4-6% cut.
  On the call       : management attributed margin compression to "a temporary
                      shift in customer mix" — the same phrasing used last
                      quarter, when it was also described as temporary.

The report is a miss wearing a beat's clothing: decelerating growth, compressing
margins, a below-consensus guide, and an EPS number rescued by tax and buybacks
rather than by operations.

The -12% is not an overreaction. It is a repricing of the growth rate.

**Gap risk, before deciding to hold through:**

def earnings_gap_risk(symbol: str) -> GapRisk:
    options = option_chain(symbol, expiry=next_after_earnings(symbol))

    # The straddle price is the market's own estimate of the move.
    implied_move = straddle_price(options, atm_strike(symbol)) / spot(symbol)

    # What has actually happened, historically.
    history = past_earnings_moves(symbol, quarters=12)

    return GapRisk(
        implied_move_pct=implied_move,
        historical_median_pct=float(np.median(np.abs(history))),
        historical_max_pct=float(np.max(np.abs(history))),
        exceeded_implied_pct=float(np.mean(np.abs(history) > implied_move)),
    )

# NVDA: implied move 8.4%. Historical median 7.1%, max 24.4%.
# The move exceeded the implied move in 5 of the last 12 quarters (42%).
#
# A position sized for a 2% adverse move, held through this, is sized for a
# risk that does not exist. The relevant risk is 8%, with a tail to 24%, and
# no stop will protect against a gap — the stop executes at
Read more
@nimadorostkar
Ships withclaude-skills-collection

A curated library of 137 production-grade skills for Claude and other AI coding agents. Every skill follows one structure, speaks with one voice, and earns its place by changing what the agent does.

Stars on GitHub

Momentum

stars in total
34
Star history of nimadorostkar/Claude-Skills-collection on GitHub, a chart by star-history.com

Other skills on claude-skills-collection.

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills12d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc13d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react3d252k
@facebook@facebookInstall Skill

Questions about earnings-analysis.

Which coding agents can use earnings-analysis?
earnings-analysis installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.