yahooquery Skill
Comprehensive access to Yahoo Finance data via the yahooquery Python library. This library provides programmatic access to nearly all Yahoo Finance endpoints, including real-time pricing, fundamentals, analyst estimates, options, news, and premium research.
Core Classes
1. Ticker (Company-Specific Data)
The primary interface for retrieving data about one or more securities.
from yahooquery import Ticker
# Single or multiple symbols
aapl = Ticker('AAPL')
tickers = Ticker('AAPL MSFT NVDA', asynchronous=True)
2. Screener (Predefined Stock Lists)
Access to pre-built screeners for discovering stocks by criteria.
from yahooquery import Screener
s = Screener()
screeners = s.available_screeners # List all available screeners
data = s.get_screeners(['day_gainers', 'most_actives'], count=10)
3. Research (Premium Subscription Required)
Access proprietary research reports and trade ideas.
from yahooquery import Research
r = Research(username='you@email.com', password='password')
reports = r.reports(report_type='Analyst Report', report_date='Last Week')
trades = r.trades(trend='Bullish', term='Short term')
Ticker Class: Data Modules
The Ticker class exposes dozens of data endpoints via properties and methods.
📊 Financial Statements
.income_statement(frequency='a', trailing=True) - Income statement (annual/quarterly)
.balance_sheet(frequency='a', trailing=True) - Balance sheet
.cash_flow(frequency='a', trailing=True) - Cash flow statement
.all_financial_data(frequency='a') - Combined financials + valuation measures
.valuation_measures - EV/EBITDA, P/E, P/B, P/S across periods
📈 Pricing & Market Data
.price - Current pricing, market cap, 52-week range
.history(period='1y', interval='1d', start=None, end=None) - Historical OHLC
- period:
1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y, 10y, ytd, max
- interval:
1m, 2m, 5m, 15m, 30m, 60m, 90m, 1h, 1d, 5d, 1wk, 1mo, 3mo
.option_chain - Full options chain (all expirations)
🔍 Analysis & Estimates
.calendar_events - Next earnings date, EPS/revenue estimates
.earning_history - Actual vs. estimated EPS (last 4 quarters)
.earnings - Historical quarterly/annual earnings and revenue
.earnings_trend - Analyst estimates for upcoming periods
.recommendation_trend - Buy/Sell/Hold rating changes over time
.gradings - Recent analyst upgrades/downgrades
🏢 Company Fundamentals
.asset_profile - Address, industry, sector, business summary, officers
.company_officers - Executives with compensation details
.summary_profile - Condensed company information
.key_stats - Forward P/E, profit margin, beta, shares outstanding
.financial_data - Financial KPIs (ROE, ROA, debt-to-equity, margins)
👥 Ownership & Governance
.insider_holders - List of insider holders and positions
.insider_transactions - Recent buy/sell transactions by insiders
.institution_ownership - Top institutional holders
.fund_ownership - Top mutual fund holders
.major_holders - Ownership summary (institutional %, insider %, float)
🌍 ESG & Ratings
.esg_scores - Environmental, Social, Governance scores and controversies
.recommendation_rating - Analyst consensus (Strong Buy → Strong Sell)
📰 News & Insights
.news() - Recent news articles
.technical_insights - Bullish/bearish technical patterns
💰 Funds & ETFs Only
.fund_holding_info - Top holdings, bond/equity breakdown
.fund_performance - Historical performance and returns
.fund_bond_holdings / .fund_bond_ratings - Bond maturity and credit ratings
.fund_equity_holdings - P/E, P/B, P/S for equity holdings
📊 Other Modules
.summary_detail - Trading stats (day high/low, volume, avg volume)
.default_key_statistics - Enterprise value, trailing P/E, forward P/E
.index_trend - Performance relative to a benchmark index
.quote_type - Security type, exchange, market
Global Functions
import yahooquery as yq
# Search
results = yq.search('NVIDIA')
# Market Data
market = yq.get_market_summary(country='US') # Major indices snapshot
trending = yq.get_trending(country='US') # Trending tickers
# Utilities
currencies = yq.get_currencies() # List of supported currencies
exchanges = yq.get_exchanges() # List of exchanges
rate = yq.currency_converter('USD', 'EUR') # Exchange rate
Configuration & Keyword Arguments
The Ticker, Screener, and Research classes accept these optional parameters:
Performance & Reliability
asynchronous=True - Make requests asynchronously (for multiple symbols)
max_workers=8 - Number of concurrent workers (when async)
retry=5 - Number of retry attempts
backoff_factor=0.3 - Exponential backoff between retries
status_forcelist=[429, 500, 502, 503, 504] - HTTP codes to retry
timeout=5 - Request timeout in seconds
Data Format & Validation
formatted=False - If True, returns data with {raw, fmt, longFmt} structure
validate=True - Validate symbols on instantiation (invalid → .invalid_symbols)
country='United States' - Regional data/news (france, germany, canada, etc.)
Network & Auth
proxies={'http': 'http://proxy:port'} - HTTP/HTTPS proxy
user_agent='...' - Custom user agent string
verify=True - SSL certificate verification
username='you@email.com' / password='...' - Yahoo Finance Premium login
Advanced (Shared Sessions)
session=... / crumb=... - Share auth between Research and Ticker instances
Best Practices
1. Async for Multiple Symbols
tickers = Ticker('AAPL MSFT NVDA TSLA', asynchronous=True)
prices = tickers.price # Returns dict keyed by symbol
2. Handling DataFrames
Most financial methods return pandas.DataFrame. Convert for JSON output:
df = aapl.income_statement()
print(df.to_json(orient='records', date_format='iso'))
3. Historical Data - 1-Minute Intervals
Yahoo limits 1-minute data to 7 days per request. For 30 days:
tickers = Ticker('AAPL', asynchronous=True)
df = tickers.history(period='1mo', interval='1m') # Makes 4 requests automatically
4. Premium Users: Combining Research + Ticker
r = Research(username='...', password='...')
reports = r.reports(sector='Technology', investment_rating='Bullish')
# Reuse session for Ticker
tickers = Ticker('AAPL', session=r.session, crumb=r.crumb)
data = tickers.asset_profile
Common Use Cases
Portfolio Analysis
portfolio = Ticker('AAPL MSFT NVDA', asynchronous=True)
summary = portfolio.summary_detail
earnings = portfolio.earnings
history = portfolio.history(period='1y')
Screening & Discovery
s = Screener()
gainers = s.get_screeners(['day_gainers'], count=20)
# Returns DataFrame with price, volume, % change, etc.
Options Analysis
nvda = Ticker('NVDA')
options = nvda.option_chain
# Filter for calls/puts, strikes, expirations
Earnings Calendar
tickers = Ticker('AAPL MSFT NVDA')
calendar = tickers.calendar_events
# Shows next earnings date + analyst estimates
Reference Documentation
Full API docs at: /Users/henryzha/.openclaw/workspace-research/skills/yahooquery/references/
index.md - Overview of classes and functions
ticker/ - Detailed breakdown of all Ticker methods
screener.md - Screener class guide
research.md - Research class (Premium)
keyword_arguments.md - Complete list of configuration options
misc.md - Global utility functions
advanced.md - Sharing sessions between Research and Ticker
Environment
- Installation:
python3 -m pip install yahooquery
- Dependencies: pandas, requests-futures, tqdm, beautifulsoup4, lxml
- Python Version: 3.7+
Notes
- Yahoo Finance may rate-limit or block requests. Use
retry, backoff_factor, and status_forcelist for robustness.
- Premium features (Research class) require a paid Yahoo Finance Premium subscription.
- Data accuracy and availability depend on Yahoo Finance's upstream data providers.
1---2name: yahooquery3description: Access Yahoo Finance data including real-time pricing, fundamentals, analyst estimates, options, news, and historical data via the yahooquery Python library.4---5
6# yahooquery Skill
7
8Comprehensive access to Yahoo Finance data via the `yahooquery` Python library. This library provides programmatic access to nearly all Yahoo Finance endpoints, including real-time pricing, fundamentals, analyst estimates, options, news, and premium research.
9
10## Core Classes
11
12### 1. **Ticker** (Company-Specific Data)
13The primary interface for retrieving data about one or more securities.
14
15```python
16from yahooquery import Ticker
17
18# Single or multiple symbols
19aapl = Ticker('AAPL')
20tickers = Ticker('AAPL MSFT NVDA', asynchronous=True)
21```
22
23### 2. **Screener** (Predefined Stock Lists)
24Access to pre-built screeners for discovering stocks by criteria.
25
26```python
27from yahooquery import Screener
28
29s = Screener()
30screeners = s.available_screeners # List all available screeners
31data = s.get_screeners(['day_gainers', 'most_actives'], count=10)
32```
33
34### 3. **Research** (Premium Subscription Required)
35Access proprietary research reports and trade ideas.
36
37```python
38from yahooquery import Research
39
40r = Research(username='you@email.com', password='password')
41reports = r.reports(report_type='Analyst Report', report_date='Last Week')
42trades = r.trades(trend='Bullish', term='Short term')
43```
44
45---
46
47## Ticker Class: Data Modules
48
49The `Ticker` class exposes dozens of data endpoints via properties and methods.
50
51### 📊 **Financial Statements**
52- `.income_statement(frequency='a', trailing=True)` - Income statement (annual/quarterly)
53- `.balance_sheet(frequency='a', trailing=True)` - Balance sheet
54- `.cash_flow(frequency='a', trailing=True)` - Cash flow statement
55- `.all_financial_data(frequency='a')` - Combined financials + valuation measures
56- `.valuation_measures` - EV/EBITDA, P/E, P/B, P/S across periods
57
58### 📈 **Pricing & Market Data**
59- `.price` - Current pricing, market cap, 52-week range
60- `.history(period='1y', interval='1d', start=None, end=None)` - Historical OHLC
61 - **period**: `1d`, `5d`, `1mo`, `3mo`, `6mo`, `1y`, `2y`, `5y`, `10y`, `ytd`, `max`
62 - **interval**: `1m`, `2m`, `5m`, `15m`, `30m`, `60m`, `90m`, `1h`, `1d`, `5d`, `1wk`, `1mo`, `3mo`
63- `.option_chain` - Full options chain (all expirations)
64
65### 🔍 **Analysis & Estimates**
66- `.calendar_events` - Next earnings date, EPS/revenue estimates
67- `.earning_history` - Actual vs. estimated EPS (last 4 quarters)
68- `.earnings` - Historical quarterly/annual earnings and revenue
69- `.earnings_trend` - Analyst estimates for upcoming periods
70- `.recommendation_trend` - Buy/Sell/Hold rating changes over time
71- `.gradings` - Recent analyst upgrades/downgrades
72
73### 🏢 **Company Fundamentals**
74- `.asset_profile` - Address, industry, sector, business summary, officers
75- `.company_officers` - Executives with compensation details
76- `.summary_profile` - Condensed company information
77- `.key_stats` - Forward P/E, profit margin, beta, shares outstanding
78- `.financial_data` - Financial KPIs (ROE, ROA, debt-to-equity, margins)
79
80### 👥 **Ownership & Governance**
81- `.insider_holders` - List of insider holders and positions
82- `.insider_transactions` - Recent buy/sell transactions by insiders
83- `.institution_ownership` - Top institutional holders
84- `.fund_ownership` - Top mutual fund holders
85- `.major_holders` - Ownership summary (institutional %, insider %, float)
86
87### 🌍 **ESG & Ratings**
88- `.esg_scores` - Environmental, Social, Governance scores and controversies
89- `.recommendation_rating` - Analyst consensus (Strong Buy → Strong Sell)
90
91### 📰 **News & Insights**
92- `.news()` - Recent news articles
93- `.technical_insights` - Bullish/bearish technical patterns
94
95### 💰 **Funds & ETFs Only**
96- `.fund_holding_info` - Top holdings, bond/equity breakdown
97- `.fund_performance` - Historical performance and returns
98- `.fund_bond_holdings` / `.fund_bond_ratings` - Bond maturity and credit ratings
99- `.fund_equity_holdings` - P/E, P/B, P/S for equity holdings
100
101### 📊 **Other Modules**
102- `.summary_detail` - Trading stats (day high/low, volume, avg volume)
103- `.default_key_statistics` - Enterprise value, trailing P/E, forward P/E
104- `.index_trend` - Performance relative to a benchmark index
105- `.quote_type` - Security type, exchange, market
106
107---
108
109## Global Functions
110
111```python
112import yahooquery as yq
113
114# Search
115results = yq.search('NVIDIA')
116
117# Market Data
118market = yq.get_market_summary(country='US') # Major indices snapshot
119trending = yq.get_trending(country='US') # Trending tickers
120
121# Utilities
122currencies = yq.get_currencies() # List of supported currencies
123exchanges = yq.get_exchanges() # List of exchanges
124rate = yq.currency_converter('USD', 'EUR') # Exchange rate
125```
126
127---
128
129## Configuration & Keyword Arguments
130
131The `Ticker`, `Screener`, and `Research` classes accept these optional parameters:
132
133### Performance & Reliability
134- `asynchronous=True` - Make requests asynchronously (for multiple symbols)
135- `max_workers=8` - Number of concurrent workers (when async)
136- `retry=5` - Number of retry attempts
137- `backoff_factor=0.3` - Exponential backoff between retries
138- `status_forcelist=[429, 500, 502, 503, 504]` - HTTP codes to retry
139- `timeout=5` - Request timeout in seconds
140
141### Data Format & Validation
142- `formatted=False` - If `True`, returns data with `{raw, fmt, longFmt}` structure
143- `validate=True` - Validate symbols on instantiation (invalid → `.invalid_symbols`)
144- `country='United States'` - Regional data/news (france, germany, canada, etc.)
145
146### Network & Auth
147- `proxies={'http': 'http://proxy:port'}` - HTTP/HTTPS proxy
148- `user_agent='...'` - Custom user agent string
149- `verify=True` - SSL certificate verification
150- `username='you@email.com'` / `password='...'` - Yahoo Finance Premium login
151
152### Advanced (Shared Sessions)
153- `session=...` / `crumb=...` - Share auth between `Research` and `Ticker` instances
154
155---
156
157## Best Practices
158
159### 1. **Async for Multiple Symbols**
160```python
161tickers = Ticker('AAPL MSFT NVDA TSLA', asynchronous=True)
162prices = tickers.price # Returns dict keyed by symbol
163```
164
165### 2. **Handling DataFrames**
166Most financial methods return `pandas.DataFrame`. Convert for JSON output:
167```python
168df = aapl.income_statement()
169print(df.to_json(orient='records', date_format='iso'))
170```
171
172### 3. **Historical Data - 1-Minute Intervals**
173Yahoo limits 1-minute data to 7 days per request. For 30 days:
174```python
175tickers = Ticker('AAPL', asynchronous=True)
176df = tickers.history(period='1mo', interval='1m') # Makes 4 requests automatically
177```
178
179### 4. **Premium Users: Combining Research + Ticker**
180```python
181r = Research(username='...', password='...')
182reports = r.reports(sector='Technology', investment_rating='Bullish')
183
184# Reuse session for Ticker
185tickers = Ticker('AAPL', session=r.session, crumb=r.crumb)
186data = tickers.asset_profile
187```
188
189---
190
191## Common Use Cases
192
193### Portfolio Analysis
194```python
195portfolio = Ticker('AAPL MSFT NVDA', asynchronous=True)
196summary = portfolio.summary_detail
197earnings = portfolio.earnings
198history = portfolio.history(period='1y')
199```
200
201### Screening & Discovery
202```python
203s = Screener()
204gainers = s.get_screeners(['day_gainers'], count=20)
205# Returns DataFrame with price, volume, % change, etc.
206```
207
208### Options Analysis
209```python
210nvda = Ticker('NVDA')
211options = nvda.option_chain
212# Filter for calls/puts, strikes, expirations
213```
214
215### Earnings Calendar
216```python
217tickers = Ticker('AAPL MSFT NVDA')
218calendar = tickers.calendar_events
219# Shows next earnings date + analyst estimates
220```
221
222---
223
224## Reference Documentation
225
226Full API docs at: `/Users/henryzha/.openclaw/workspace-research/skills/yahooquery/references/`
227
228- `index.md` - Overview of classes and functions
229- `ticker/` - Detailed breakdown of all Ticker methods
230- `screener.md` - Screener class guide
231- `research.md` - Research class (Premium)
232- `keyword_arguments.md` - Complete list of configuration options
233- `misc.md` - Global utility functions
234- `advanced.md` - Sharing sessions between Research and Ticker
235
236---
237
238## Environment
239
240- **Installation**: `python3 -m pip install yahooquery`
241- **Dependencies**: pandas, requests-futures, tqdm, beautifulsoup4, lxml
242- **Python Version**: 3.7+
243
244---
245
246## Notes
247
248- Yahoo Finance may rate-limit or block requests. Use `retry`, `backoff_factor`, and `status_forcelist` for robustness.
249- Premium features (Research class) require a paid Yahoo Finance Premium subscription.
250- Data accuracy and availability depend on Yahoo Finance's upstream data providers.