AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
The yfinance-data skill provides a structured interface for retrieving financial and market data from Yahoo Finance. It enables users to access a wide range of information, including historical price data, financial statements, corporate actions, options chains, and analyst estimates. The skill is designed to integrate with Python environments, allowing for programmatic data extraction and analysis of stock market information.
What it does
- Retrieves current stock quotes and historical price data.
- Fetches financial statements including income statements, balance sheets, and cash flow.
- Accesses corporate actions such as dividends and stock splits.
- Provides options chain data, including calls and puts.
- Retrieves analyst estimates, price targets, and institutional holdings.
- Supports bulk data downloads for multi-ticker comparisons.
When to use it
- When you need to perform research on stock market data.
- When you require financial statement data for company analysis.
- When you need to compare historical price performance across multiple tickers.
- When you are building financial models that require external market data.
Advantages
- Provides a standardized way to access diverse financial data points.
- Supports both single-ticker lookups and bulk data downloads.
- Integrates directly into Python workflows for automated data processing.
- Includes methods for both annual and quarterly financial reporting data.
Usage examples
- “Get the latest income statement for AAPL.”
- The agent will use the yfinance library to fetch and display the annual income statement data for Apple Inc.
- “Compare the historical price data for MSFT and TSLA over the last year.”
- The agent will use yf.download to retrieve and present the historical price performance for both tickers for the requested period.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/himself65/yfinance-data/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip yfinance-data.zip -d .agents/skills
Documentation by Alex Yang
yfinance Data Skill
If your host has not already executed the shell probes below (for example, in Codex), run the commands inside the ! wrappers with its shell tool before choosing a setup path. Use the actual output; if shell access is unavailable, report that limitation.
Fetches financial and market data from Yahoo Finance using the yfinance Python library.
Important: yfinance is not affiliated with Yahoo, Inc. Data is for research and educational purposes.
Step 1: Ensure yfinance Is Available
Current environment status:
!`python3 -c "exec('try:\n import yfinance\n print(\'yfinance \' + yfinance.__version__ + \' installed\')\nexcept Exception:\n print(\'YFINANCE_NOT_INSTALLED\')')"`If YFINANCE_NOT_INSTALLED, install it before running any code:
import subprocess, sys
subprocess.check_call([sys.executable, "-m", "pip", "install", "-q", "yfinance"])If yfinance is already installed, skip the install step and proceed directly.
Step 2: Identify What the User Needs
Match the user's request to one or more data categories below, then use the corresponding code from references/api_reference.md.
| User Request | Data Category | Primary Method |
|---|---|---|
| Stock price, quote | Current price | ticker.info or ticker.fast_info |
| Price history, chart data | Historical OHLCV | ticker.history() or yf.download() |
| Balance sheet | Financial statements | ticker.balance_sheet |
| Income statement, revenue | Financial statements | ticker.income_stmt |
| Cash flow | Financial statements | ticker.cashflow |
| Dividends | Corporate actions | ticker.dividends |
| Stock splits | Corporate actions | ticker.splits |
| Options chain, calls, puts | Options data | ticker.option_chain() |
| Earnings, EPS | Analysis | ticker.earnings_history |
| Analyst price targets | Analysis | ticker.analyst_price_targets |
| Recommendations, ratings | Analysis | ticker.recommendations |
| Upgrades/downgrades | Analysis | ticker.upgrades_downgrades |
| Institutional holders | Ownership | ticker.institutional_holders |
| Insider transactions | Ownership | ticker.insider_transactions |
| Company overview, sector | General info | ticker.info |
| Compare multiple stocks | Bulk download | yf.download() |
| Screen/filter stocks | Screener | yf.screen() + yf.EquityQuery |
| Sector/industry data | Market data | yf.Sector / yf.Industry |
| News | News | ticker.news |
Step 3: Write and Execute the Code
General pattern
import yfinance as yf
ticker = yf.Ticker("AAPL")
# ... use the appropriate method from the referenceKey rules
Always wrap in try/except — Yahoo Finance may rate-limit or return empty data
Use
yf.download()for multi-ticker comparisons — it's faster with multi-threadingFor options, list expiration dates first with
ticker.optionsbefore callingticker.option_chain(date)For quarterly data, use
quarterly_prefix:ticker.quarterly_income_stmt,ticker.quarterly_balance_sheet,ticker.quarterly_cashflowFor large date ranges, be mindful of intraday limits — 1m data only goes back ~7 days, 1h data ~730 days
Print DataFrames clearly — use
.to_string()or.to_markdown()for readability, or select key columnsTimezone handling — yfinance returns tz-aware datetime indices (e.g.,
America/New_York). When comparing dates, always usepd.Timestamp(..., tz=...)or strip timezones with.tz_localize(None). See the reference file for details.
Valid periods and intervals
| Periods | 1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y, 10y, ytd, max |
|---|---|
| Intervals | 1m, 2m, 5m, 15m, 30m, 60m, 90m, 1h, 1d, 5d, 1wk, 1mo, 3mo |
Step 4: Present the Data
Answer with the numbers the user asked for first, then the supporting table (markdown, or a trimmed DataFrame with the key columns). Call out anything notable in the data — an earnings beat or miss, unusual volume, a dividend change — and add context such as sector averages, historical ranges, or analyst consensus where it changes how the numbers read. If the user wants a chart, pair the data with a visualization.
Reference Files
references/api_reference.md— Complete yfinance API reference with code examples for every data category
Read the reference file when you need exact method signatures or edge case handling.
Files
- ATTRIBUTION.mdAdded by AutoGineer887 B
- LICENSELicence file added by AutoGineer1.0 KiB
- README.md1.7 KiB
- SKILL.md5.2 KiB
- references/api_reference.md9.2 KiB
references/api_reference.md
yfinance API Reference
Complete reference for all yfinance data access methods.
Installation
pip install yfinanceRequires Python 3.8+. Dependencies (pandas, requests, etc.) are installed automatically.
Ticker Object
The primary interface for single-stock data.
import yfinance as yf
ticker = yf.Ticker("AAPL")Historical Price Data
ticker.history()
Returns a DataFrame with columns: Open, High, Low, Close, Volume, Dividends, Stock Splits.
# Default: 1 month of daily data
hist = ticker.history(period="1mo")
# Specific date range
hist = ticker.history(start="2023-01-01", end="2023-12-31")
# Weekly data for 1 year
hist = ticker.history(period="1y", interval="1wk")
# Intraday 5-minute bars for last 5 days
hist = ticker.history(period="5d", interval="5m")
# Include pre/post market data
hist = ticker.history(period="5d", prepost=True)
# Repair price anomalies
hist = ticker.history(period="1mo", repair=True)Valid periods: 1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y, 10y, ytd, max
Valid intervals: 1m, 2m, 5m, 15m, 30m, 60m, 90m, 1h, 1d, 5d, 1wk, 1mo, 3mo
Intraday limits:
1m: last ~7 days
2m/5m/15m/30m: last ~60 days
60m/90m/1h: last ~730 days
yf.download() — Bulk Download
Efficient multi-threaded download for multiple tickers.
data = yf.download(
tickers="AAPL MSFT GOOGL AMZN", # space or comma separated
start="2023-01-01",
end="2024-01-01",
interval="1d",
group_by="ticker", # or "column" (default)
auto_adjust=True, # adjust for splits and dividends
threads=True, # multi-threading
progress=True # show progress bar
)
# Access a specific ticker
apple_close = data["AAPL"]["Close"]
# Download with dividends and splits
data = yf.download(["AAPL", "MSFT"], period="1y", actions=True)
# Additional options
data = yf.download(
tickers=["TSLA", "NVDA"],
period="6mo",
interval="1h",
repair=True, # fix price anomalies
keepna=False, # remove NaN rows
rounding=True, # round to 2 decimals
timeout=10 # request timeout seconds
)Company Info
ticker.info
Returns a dictionary with company details, financials, and market data.
info = ticker.info
# Common fields
info['shortName'] # Company name
info['sector'] # e.g., "Technology"
info['industry'] # e.g., "Consumer Electronics"
info['marketCap'] # Market capitalization
info['currentPrice'] # Current stock price
info['previousClose'] # Previous close price
info['trailingPE'] # Trailing P/E ratio
info['forwardPE'] # Forward P/E ratio
info['dividendYield'] # Dividend yield
info['beta'] # Beta
info['fiftyTwoWeekHigh'] # 52-week high
info['fiftyTwoWeekLow'] # 52-week low
info['averageVolume'] # Average volume
info['longBusinessSummary'] # Company descriptionticker.fast_info
Lightweight subset for quick price lookups (faster than .info).
fi = ticker.fast_info
fi['lastPrice']
fi['marketCap']
fi['fiftyDayAverage']
fi['twoHundredDayAverage']Financial Statements
All return pandas DataFrames. Use quarterly_ prefix for quarterly data.
# Annual
ticker.income_stmt # Income statement
ticker.balance_sheet # Balance sheet
ticker.cashflow # Cash flow statement
# Quarterly
ticker.quarterly_income_stmt
ticker.quarterly_balance_sheet
ticker.quarterly_cashflowCorporate Actions
ticker.dividends # Series of dividend payments
ticker.splits # Series of stock splits
ticker.actions # DataFrame with both dividends and splits
ticker.capital_gains # Capital gains (for mutual funds/ETFs)Options
# List available expiration dates
expirations = ticker.options # tuple of date strings
# Get option chain for a specific expiration
opt = ticker.option_chain("2024-06-21")
# Calls and puts are separate DataFrames
calls = opt.calls
puts = opt.puts
# Key columns:
# strike, lastPrice, bid, ask, volume, openInterest, impliedVolatility,
# inTheMoney, contractSymbol, lastTradeDate, change, percentChangeAnalysis & Estimates
# Analyst price targets
ticker.analyst_price_targets
# Returns dict: current, low, high, mean, median
# Recommendations (buy/hold/sell counts by period)
ticker.recommendations
# Upgrades and downgrades history
ticker.upgrades_downgrades
# Columns: firm, toGrade, fromGrade, action
# Earnings estimates
ticker.earnings_estimate
# Columns: numberOfAnalysts, avg, low, high, yearAgoEps, growth
# Index: 0q (current quarter), +1q, 0y, +1y
# Revenue estimates
ticker.revenue_estimate
# EPS trend
ticker.eps_trend
# EPS revisions
ticker.eps_revisions
# Growth estimates
ticker.growth_estimates
# Earnings history (actual vs estimate)
ticker.earnings_history
# Columns: epsEstimate, epsActual, epsDifference, surprisePercent
# Sustainability / ESG scores
ticker.sustainabilityOwnership
# Major holders summary
ticker.major_holders
# Top institutional holders
ticker.institutional_holders
# Columns: Holder, Shares, Date Reported, % Out, Value
# Mutual fund holders
ticker.mutualfund_holders
# Insider transactions
ticker.insider_transactions
# Insider roster
ticker.insider_roster_holders
# Shares outstanding over time
ticker.get_shares_full(start="2023-01-01", end="2023-12-31")Calendar & Events
ticker.calendar
# Returns dict with upcoming earnings dates, dividends, etc.News
ticker.news
# Returns list of dicts with: title, link, publisher, providerPublishTime, typeMultiple Tickers
tickers = yf.Tickers("AAPL MSFT GOOGL")
# Access individual tickers
tickers.tickers["AAPL"].info
tickers.tickers["MSFT"].history(period="1mo")Screener & Equity Query
Build custom stock screens.
import yfinance as yf
from yfinance import EquityQuery
# Create a query
query = EquityQuery('and', [
EquityQuery('gt', ['intradaymarketcap', 1_000_000_000]), # market cap > $1B
EquityQuery('lt', ['peratio.lasttwelvemonths', 20]), # trailing P/E < 20
EquityQuery('eq', ['sector', 'Technology']), # tech sector
EquityQuery('eq', ['region', 'us']),
])
# Run the screen — returns a dict; matches are in result["quotes"]
result = yf.screen(query, size=25, sortField='intradaymarketcap', sortAsc=False)
symbols = [q['symbol'] for q in result.get('quotes', [])]
# Operators: eq, gt, lt, gte, lte, btwn, is_in
# EquityQuery validates field names and raises ValueError on unknown ones
# (e.g. 'marketcap' and 'peratio' are invalid; use 'intradaymarketcap' and
# 'peratio.lasttwelvemonths'). yf.screen also accepts predefined screen names
# such as 'day_gainers'.Sector & Industry
# Sector data
tech = yf.Sector("technology")
tech.overview
tech.industries # DataFrame of industries in this sector
# Industry data
semiconductors = yf.Industry("semiconductors")
semiconductors.overview
semiconductors.top_companies
# Valid sector keys:
# basic-materials, communication-services, consumer-cyclical,
# consumer-defensive, energy, financial-services, healthcare,
# industrials, real-estate, technology, utilitiesSearch
search = yf.Search("Tesla")
search.quotes # matching ticker quotes
search.news # related news articlesTimezone Handling
yfinance returns tz-aware datetime indices (typically America/New_York). When filtering or comparing dates, you must match timezone awareness to avoid TypeError: Cannot compare tz-naive and tz-aware datetime-like objects.
import yfinance as yf
import pandas as pd
hist = yf.Ticker("AAPL").history(period="1y")
# WRONG — tz-naive timestamp vs tz-aware index:
# filtered = hist[hist.index >= pd.Timestamp("2025-01-01")] # TypeError!
# Option A (recommended): make the comparison timestamp tz-aware
start = pd.Timestamp("2025-01-01", tz="America/New_York")
filtered = hist[hist.index >= start]
# Option B: strip timezone from index first
hist.index = hist.index.tz_localize(None)
filtered = hist[hist.index >= pd.Timestamp("2025-01-01")]Always use Option A when you need to preserve timezone info for accurate date boundaries. Use Option B when timezone doesn't matter (e.g., daily data aggregation).
Error Handling
import yfinance as yf
try:
ticker = yf.Ticker("AAPL")
hist = ticker.history(period="1mo")
if hist.empty:
print("No data returned — check ticker symbol or date range")
else:
print(hist)
except Exception as e:
print(f"Error fetching data: {e}")Common issues:
Empty DataFrame: Invalid ticker, delisted stock, or date range outside available data
Rate limiting: Too many requests in short time — add delays between calls
Missing fields in
.info: Not all fields are available for all tickers (ETFs, mutual funds, foreign stocks may differ)Intraday data limits: 1m data only available for last ~7 days
Timezone mismatch: See "Timezone Handling" section above — always match tz-awareness when comparing dates
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs Python
Security
What our scanner noticed· Low risk
- Instructions that use the network
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- Alex Yang
- Publisher
- Alex Yang (Community)
- Source
- himself65/finance-skills · plugins/market-analysis/skills/yfinance-data · commit a085078
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Alex Yang or Alex Yang.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download yfinance-data.zip