yahooquery
by @512z
Access Yahoo Finance data including real-time pricing, fundamentals, analyst estimates, options, news, and historical data via the yahooquery Python library.
clawhub install yahooqueryπ About This Skill
name: yahooquery description: Access Yahoo Finance data including real-time pricing, fundamentals, analyst estimates, options, news, and historical data via the yahooquery Python library.
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 TickerSingle 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 Screeners = 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 Researchr = 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 OHLC1d, 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, marketGlobal Functions
import yahooquery as yqSearch
results = yq.search('NVIDIA')Market Data
market = yq.get_market_summary(country='US') # Major indices snapshot
trending = yq.get_trending(country='US') # Trending tickersUtilities
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 attemptsbackoff_factor=0.3 - Exponential backoff between retriesstatus_forcelist=[429, 500, 502, 503, 504] - HTTP codes to retrytimeout=5 - Request timeout in secondsData Format & Validation
formatted=False - If True, returns data with {raw, fmt, longFmt} structurevalidate=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 proxyuser_agent='...' - Custom user agent stringverify=True - SSL certificate verificationusername='you@email.com' / password='...' - Yahoo Finance Premium loginAdvanced (Shared Sessions)
session=... / crumb=... - Share auth between Research and Ticker instancesBest 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 returnpandas.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 functionsticker/ - Detailed breakdown of all Ticker methodsscreener.md - Screener class guideresearch.md - Research class (Premium)keyword_arguments.md - Complete list of configuration optionsmisc.md - Global utility functionsadvanced.md - Sharing sessions between Research and TickerEnvironment
python3 -m pip install yahooqueryNotes
retry, backoff_factor, and status_forcelist for robustness.π Tips & 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 returnpandas.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