---
id: gh-fs-earnings-recap
name: "earnings-recap"
url: https://skills.yangsir.net/skill/gh-fs-earnings-recap
author: himself65
domain: finance
tags: ["earnings-recap", "finance", "analysis"]
install_count: 587
rating: 4.20 (20 reviews)
github: https://github.com/himself65/finance-skills/tree/main/skills/earnings-recap
---

# earnings-recap

> 盘后财报分析，涵盖实际与预期EPS对比、股价反应及利润率趋势。

**Stats**: 587 installs · 4.2/5 (20 reviews)

## Before / After 对比

### 金融分析

**Before**:

手动收集数据、整理报表，效率低且容易遗漏关键指标

**After**:

一键获取专业分析，数据实时更新，覆盖多维度指标

## Readme

# Earnings Recap Skill

Generates a post-earnings analysis using Yahoo Finance data via [yfinance](https://github.com/ranaroussi/yfinance). Covers the actual vs estimated numbers, surprise magnitude, stock price reaction, and financial context — a complete picture of what happened.

**Important**: Data is for research and educational purposes only. Not financial advice. yfinance is not affiliated with Yahoo, Inc.

---

## Step 1: Ensure yfinance Is Available

**Current environment status:**

```
!`python3 -c "import yfinance; print('yfinance ' + yfinance.__version__ + ' installed')" 2>/dev/null || echo "YFINANCE_NOT_INSTALLED"`
```

If `YFINANCE_NOT_INSTALLED`, install it:

```python
import subprocess, sys
subprocess.check_call([sys.executable, "-m", "pip", "install", "-q", "yfinance"])
```

If already installed, skip to the next step.

---

## Step 2: Identify the Ticker and Gather Data

Extract the ticker from the user's request. Fetch all relevant post-earnings data in one script.

```python
import yfinance as yf
import pandas as pd
from datetime import datetime, timedelta

ticker = yf.Ticker("AAPL")  # replace with actual ticker

# --- Earnings result ---
earnings_hist = ticker.earnings_history

# --- Financial statements ---
quarterly_income = ticker.quarterly_income_stmt
quarterly_cashflow = ticker.quarterly_cashflow
quarterly_balance = ticker.quarterly_balance_sheet

# --- Price reaction ---
# Get ~30 days of history to capture the reaction window
hist = ticker.history(period="1mo")

# --- Context ---
info = ticker.info
news = ticker.news
recommendations = ticker.recommendations
```

### What to extract

| Data Source | Key Fields | Purpose |
|---|---|---|
| `earnings_history` | epsEstimate, epsActual, epsDifference, surprisePercent | Beat/miss result |
| `quarterly_income_stmt` | TotalRevenue, GrossProfit, OperatingIncome, NetIncome, BasicEPS | Actual financials |
| `history()` | Close prices around earnings date | Stock price reaction |
| `info` | currentPrice, marketCap, forwardPE | Current context |
| `news` | Recent headlines | Earnings-related news |

---

## Step 3: Determine the Most Recent Earnings

The most recent earnings result is the first row (most recent date) in `earnings_history`. Use its date to:

1. **Identify the earnings date** for the price reaction analysis
2. **Match to the corresponding quarter** in the financial statements
3. **Calculate stock price reaction** — compare the close before earnings to the next trading day's close (or open, depending on whether earnings were before/after market)

### Price reaction calculation

```python
import numpy as np

# Find the earnings date from earnings_history index
earnings_date = earnings_hist.index[0]  # most recent

# Get daily prices around the earnings date
hist_extended = ticker.history(start=earnings_date - timedelta(days=5),
                                end=earnings_date + timedelta(days=5))

# The reaction is typically measured as:
# - Close on the last trading day before earnings -> Close on the first trading day after
# Be careful with before/after market reports
if len(hist_extended) >= 2:
    pre_price = hist_extended['Close'].iloc[0]
    post_price = hist_extended['Close'].iloc[-1]
    reaction_pct = ((post_price - pre_price) / pre_price) * 100
```

**Note**: The exact reaction window depends on when the company reported (before market open vs after close). The price data will reflect this — look for the biggest gap between consecutive closes near the earnings date.

---

## Step 4: Build the Earnings Recap

### Section 1: Headline Result

Lead with the key numbers:
- **EPS**: Actual vs. Estimate, beat/miss by how much, surprise %
- **Revenue**: Actual vs. prior year (from quarterly_income_stmt TotalRevenue)
- **Stock reaction**: % move on earnings day

Example: "AAPL beat Q3 EPS estimates by 3.7% ($1.40 actual vs $1.35 expected). Revenue grew 5.4% YoY to $94.3B. The stock rose +2.1% on the report."

### Section 2: Earnings vs. Estimates Detail

| Metric | Estimate | Actual | Surprise |
|---|---|---|---|
| EPS | $1.35 | $1.40 | +$0.05 (+3.7%) |

If the user asked about a specific quar

---
*Source: https://skills.yangsir.net/skill/gh-fs-earnings-recap*
*Markdown mirror: https://skills.yangsir.net/api/skill/gh-fs-earnings-recap/markdown*