NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #818 most downloaded on PyPI
Download market data from Yahoo! Finance API
Last release 1 months ago
26 Aug 2026
Ships fairly regularly
a new release about every 5 weeks
Nearly every release is documented
notes for 59 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
150 releases · first in 2019
history_metadata now lazy-loads tradingPeriods
Features / improvements: - Make history_metadata lazy-load 'tradingPeriods' #2922 Fixes - Improve robustness of YfData when behind a SOCKS5 proxy #2953 Price repair: - Fix bug in volume-validation of stock-split-repair #2958
Few new fields to Balance Sheet and Screener
Main changes:
Full changelog #2935
Thanks @foley40 @dokson @vignesh-nagarajan-vn @shanehull @DogInfantry @Kaif10 @nyxst4ck @DMZ22 @Aaritp @etbala @aleks-drozy
One column per quarter.
Features / improvements - Add missing balance sheet keys: FixedMaturityInvestments, EquityInves… #2879 @foley40 - Fix: Screener: add dividendyield and dividendpershare.lasttwelvemonths #2888 @shanehull - Don't claim 'possibly delisted' when Yahoo explains the missing data #2903 @vignesh-nagarajan-vn - Fix error messages showing internal 15m interval for 30m requests #2900 @vignesh-nagarajan-vn Fixes: - Fix generic-unit timedelta DeprecationWarning for sub-day intervals (#2882) #2891 @DogInfantry - fix: read-only 'Adj Close' array crash in dividend-adjust repair #2897 @Kaif10 - Fix AttributeError in Lookup error handling (self.ticker -> self.query) #2896 @nyxst4ck - Fix: handle null result from Yahoo API in _fetch_info #2906 @foley40 - Fix multi-day interval TypeError and actually silence the numpy>=2.5 Timedelta warning #2915 @DMZ22 Price repair: - Price repair fixes & improvements #2908 - Fix: repair=True should not permanently convert GBp/ZAc/ILA prices to main currency #2907 @foley40 - Price repair improvements #2943 Docs / maintenance - Fix pandas 3 timezone assertion in test_download_multi_small_interval #2901 @vignesh-nagarajan-vn - docs: fix grammar and formatting in advanced documentation #2909 @Aaritp - Re-enable test_no_expensive_calls_introduced without requests_cache #2911 @dokson - Pin ruff ruleset for deterministic CI #2919 @dokson - Migrate packaging to pyproject.toml #2920 @dokson - Fix: NaN equality comparison #2933 @foley40 - Migrate to pyproject.toml #2849 @etbala - docs: state download()'s actual returned index timezone contract #2936 @aleks-drozy
Fix yfinance breaking with curl_cffi>=0.16
Fix yfinance breaking with curl_cffi>=0.16
Thanks @dokson
Version 1.5.0 retracted - I forgot to merge in dev branch
Version 1.5.0 retracted - I forgot to merge in dev branch
Full changelog #2862
Thanks @dokson @avesed @gyx09212214-prog @HaozheZhang6 @parthdongre @joaopedroassad @he-yufeng
Minor - Fall back to chunked requests when single-URL fundamentals fetch times out #2811 - Replace valuation-measures HTML scrape with timeseries API #2851 Patches - Determine login and subscription tier via the subscriptions API #2845 - Preserve user login cookies across cookie-strategy switches #2850 - Normalize configured proxy strings #2853 - Fix 404 Developer Guide link in CONTRIBUTING.md #2852 - Fix typo in CONTRIBUTING.md: "updates" -> "update" #2858 - Complementary info: guard against empty or malformed timeseries #2863 - Fix missing comma splitting two equity screener EPS fields #2867 - Fix _fetch_info handling of None responses #2869 - Complementary info: guard against empty or missing timeseries result #2877 Patches - price repair - Fix price-repair unit-switch sometimes applying twice #2842 - Handle premarket silly games creating false-positive bad-dividend #2843 - Price repair: fix error triggered by NaN volume #2859 - Dividend repair: handle 'Adj Close' going to infinity #2860
Preserve Date/Datetime index name in yf.download() output #2832
Fix - Preserve Date/Datetime index name in yf.download() output #2832
Login Yahoo account with yf.Auth link
yf.Auth linkSector and Industry linkcurl_cffi fallback to requests package linkFull changelog #2828
Thanks @etbala @dokson @a-drenaline @gottostartsomewhere @Jaypatel1511
Features - Add Auth class for Logging In #2761 - Allow region scoping for Sector and Industry (closes #2601) #2803 - Make curl_cffi optional with fallback to requests (closes #2692) #2802 Fixes - Add 'repair' to get_history_metadata() #2777 - Adding try block for added protection to "meta" data #2778 - Fix: _dts_in_same_interval("1mo") ignored year #2780 - Fix TypeError when data['chart'] is None in history.py (#2670) #2794 - Fix dividends error on unlisted tickers #2797 - Fix #2784: validate Market region and stop returning misleading status #2801 - Make yf.download() reentrant by removing shared module globals #2805 - Allow lang and region scoping for Ticker (closes #2582) #2804 - Fix localized intraday download() always returning UTC #2825 Maintenance - chore: fix typos (prividing -> providing, Reponse -> Response) #2779 - Fix Failing Tests #2792 - Simplify phantom-dividend repair branch + drive-by typo/lint fixes #2810 - Drop frozendict hard dependency in favour of an internal fallback #2821
Add Valuations Measures Table from Statistics Page #2742
Features: - Add Valuations Measures Table from Statistics Page #2742 - Add ETFQuery #2749 Fix type regresssion in Ticker.dividends
Forgot to merge in #2695 and #2718 from dev branch for release 1.2.1
Forgot to merge in #2695 and #2718 from dev branch for release 1.2.1
Full changelog #2747
Thanks @a-drenaline @david-belbeze @dhruvan2006 @etbala @rshah98626 @tgao09 @wavebyrd
Forgot to merge in #2695 and #2718 for release 1.2.1
Features: - Add Currency to Analysis Data #2739 Fixes: - Fix TypeError in history() when API returns None/malformed #2703 - Fix thread-safety in download() with mutex lock #2718 - Fix/fill devidends #2695 Maintenance: - Refactor QueryBase to use typed Operator #2731 Docs: - Fix/history period docstring #2709 - chore: minor doc fixes #2716 - docs: fix dev branch install command #2733
Force curl_cffi>=0.15 because CVE #2743
download() thread-safety #2718Thanks @david-belbeze @wavebyrd
Force curl_cffi>=0.15, because CVE #2743 Preserve currency in dividends #2695 Improve download() thread-safety #2718
yf.history() dataframe is now consolidated , might trigger read-only errors in your code.
yf.history() dataframe is now consolidated, might trigger read-only errors in your code.
Screener: lots more fund countries, some more equity exchanges
Price repair: fix ValueError: output array is read-only with Pandas 3
Changelog #2698
Thanks @kbluck
Features: - update exchange maps for equities and mutual funds. #2685 Fixes: - handle Pandas to_numpy() returning read-only #2697
Price repair: new: fix capital-gains double-counting
Price repair: new: fix capital-gains double-counting
Price repair: fewer stock-split false positives
Various small fixes.
Full changelog #2682
Thanks @salsugair @kbluck @orionnelson @ctasada
Features: - New price repair: capital gains double-counting #2667 Fixes: - Fix Saudi Arabia MIC Code #2665 @salsugair - Add config to __all__ #2673 @kbluck - Fix Python 3.9 compatibility regression in calendars.py #2674 @orionnelson - Improve stock-split repair false-positives #2668 - Docs for capital-gains repair; Fix warnings in price-repair 27cb8aa Already in main: - Upgrade to Pandas 3.0 (Fixes #2679) #2683
No breaking changes, but some deprecation warnings for the new config method https://ranaroussi.github.io/yfinance/advanced/config.html
yfinance been stable a long time now, time to graduate to version 1.0 🎉
No breaking changes, but some deprecation warnings for the new config method https://ranaroussi.github.io/yfinance/advanced/config.html
Various fixes.
Thanks @ianmihura @axisrow @danchev @biplavbarua @ericpien @evanreynolds9
Full changelog #2637
yfinance been stable a long time now, time to grow up
No breaking changes, but some deprecation warnings.
Features: - New config class yf.config / Improve exception handling #2524 - Feature: Earning Calendar (& other calendars) #2615 @ianmihura - Add optional retry mechanism for transient network errors #2627 @axisrow Fixes: - 'Industry' column names #2613 @danchev - Correct 30m interval alignment and filtering for NSE/early-open markets #2642 @biplavbarua - Screener's sector industry mapping #2648 @ericpien - Set period default to None in multi #2650 @evanreynolds9 - price-div-repair dropping NaN rows #2651 - Block curl_cffi version 0.14 #2653
Screener: add Swiss exchange and industry field
Screener: add Swiss exchange and industry field
Support MIC #2579
Fixes:
Thanks @mxdev88 @jdmcclain47 @hjlgood @Phil997
Prices: fix handling arguments start/end/period
start/end/periodFinancials: ensure dtype float #2563 Prices: fix handling arguments start/end/period #2561 #2562 Price repair: when changing FX, update metadata #2558
earnings_dates: new column Event Type #2555
earnings_dates: new column Event Type #2555
Prices fixes:
period when start/end also set #2550Prices: - handle dividends with FX, convert if repair=True #2549 - fix 'period' arg when start or end set #2550 earnings_dates: handle 'Event Type' properly #2555
Fix download(ISIN) # 2531
Fix download(ISIN) # 2531
Improve "proxy deprecated" messaging.
period=max.Thanks @cole-st-john
Fix prices 'period=max' sometimes failing # 2509 ISIN cache #2516 Proxy: - fix false 'proxy deprecated' messages - fix ISIN + proxy #2514 - replace print_once with warnings #2523 Error handling: - detect rate-limit during crumb fetch #2491 - replace requests.HTTPError with curl_cffi
Fix ALL type hints in websocket #2493
Fix ALL type hints in websocket #2493
cookie reuse, DNS blocking cookie fetch #2483
Big fixes:
Little fixes:
offset #2440requests #2487Thanks @dhruvan2006
Fix cookie reuse, and handle DNS blocking fc.yahoo.com #2483 Fixes for websocket: - relax protobuf version #2485 - increase websockets version #2485 - fix type hints #2488 Fix predefined screen offset #2440
Stop overriding curl_cffi user-agent - helps with rate-limit #2450
Stop overriding curl_cffi user-agent - helps with rate-limit #2450
EDIT: new feature: live data via websocket - forgot to announce
Fix the fix for rate-limit #2452 Feature: live price data websocket #2201
switch to curl_cffi session to fix false rate-limit errors #2430 [reason = TLS fingerprinting ]
Fixes:
curl_cffi session to fix false rate-limit errors #2430 [ reason = TLS fingerprinting ]Thanks @bretsky @R5dan
Fix false rate-limit problem #2430 Fix predefined screen size/count #2425
Fix proxy msg & pass-through #2418
Fix proxy msg & pass-through #2418
Fixes: info fetch, ISIN, prices missing last row, prices NonExistentTimeError
Features:
yf.Lookupyf.set_config()Fixes: info fetch, ISIN, prices missing last row, prices NonExistentTimeError
Full changelog #2410
Thanks @dhruvan2006 @JanMkl
Features: - Ticker lookups #2364 - Config #2391 Fixes: - converting end epoch to localized dt #2378 - info IndexError #2382 - AttributeError: module 'requests.cookies' has no attribute 'update' #2388 - fix_Yahoo_returning_live_separate() #2389
New feature: fetch TTM financials
New feature: fetch TTM financials
Fixes:
Thanks @JanMkl @dhruvan2006
Full changelog: #2372
Features - TTM financials #2321 Fixes - info IndexError #2354 - earnings dates TZ #2366 - price repair tweaks & fixes #2368 - history caching #2345 - backup fetch TZ from info #2369 Maintenance - log user agent #2326
Hotfix fetch error #2277 thanks @dhruvan2006
Hotfix fetch error #2277 thanks @dhruvan2006
add pre- and post-market data to Ticker.info
Main changes:
Ticker.*_holdersTicker.infoThanks @dhruvan2006 @R5dan @ocp1006
Full changelog #2264
Fixes: - Fix: Failed to parse holders JSON data #2234 - Fix: Bad data in Holders #2244 - Stop CSRF-cookie-fetch fail killing yfinance #2249 - Fix Market Docs #2250 - Fix: Broken "See also" links in documentation #2253 - Fix: Interval check and error message formatting in multi.py #2256 Improve: - Add pre- / post-stock prices (and other useful information) #2212 - Warn user when use download() without specifying auto_adjust #2230 - Refactor: Earnings Dates – Switch to API Fetching #2247 - Improve prices div repair #2260 Maintenance: - Add GitHub Actions workflow and fix failing tests #2233
Add yf.Market summary & status #2175
Features:
yf.Market summary & status #2175Ticker.history #2192YfRateLimitError if rate limited #2108yf.Search #2191Fixes:
Thanks @dhruvan2006 and @R5dan
Features: - Improve Screener & docs #2207 - Add Market summary & status #2175 - Support custom period in Ticker.history() #2192 - raise YfRateLimitError if rate limited #2108 - add more options to Search #2191 Fixes: - remove hardcoded keys in Analysis #2194 - handle Yahoo changed Search response #2202 Maintenance: - add optional dependencies to requirements.txt #2199
improve yf.Screener and Ticker.get_news() #2168 #2173
Features:
yf.Search #2160yf.Screener and Ticker.get_news() #2168 #2173Fixes and tweaks:
Ticker.get_earnings_dates #2169download argument auto_adjust to default True, to match Ticker.history #2147Thanks @hjlgood @ericpien @dhruvan2006
Features: - Screener tweaks #2168 - Search #2160 - get_news() expose count #2173 Fixes: - earnings_dates #2169
New documentation website: https://ranaroussi.github.io/yfinance/index.html
Fixes:
download() index #2109isin() error #2099growth_estimates #2127New documentation website: https://ranaroussi.github.io/yfinance/index.html
Thanks @ericpien @DamienDuv
Fixes: - price repair #2111 #2139 - download() appearance 2109 - isin() error #2099 - growth_estimates #2127 Also new docs #2132
Fix prices-clean rarely discarding good data #2122
Fix prices-clean rarely discarding good data #2122
Added multi_level_index parameter to multi.py with a default value to True. If set to False and only one ticker is requested - the returned DataFrame
Addresses #2100.
Added multi_level_index parameter to multi.py with a default value to True. If set to False and only one ticker is requested - the returned DataFrame will be single-level-index
Refactor multi.py to return single-level index when a single ticker is requested
Refactor multi.py to return single-level index when a single ticker is requested
Fix regression in 0.2.45 #2094 - thanks @FX196
Fix regression in 0.2.45 #2094 - thanks @FX196
Feature: yf.Screener and yf.EquityQuery #2066
Feature: yf.Screener and yf.EquityQuery #2066
Fixes:
history() IndexError and download() KeyError #2068 #2087Full changelog: #2091
Contributors: @ericpien @antoniouaa @algonell @marco-carvalho
Features: - Screener #2066 @ericpien Fixes - Tickers keyerror #2068 @antoniouaa - IndexError in some history() debug messages #2087 - improve dividend repair #2090 Maintenance - fix unit tests contextual imports #2067 - fix typos #2072 @algonell - add Pyright type checking #2059 @marco-carvalho
yf.Sector(Y) and yf.Industry(Z) #2058
Features:
yf.Ticker(X).funds_data #2041yf.Sector(Y) and yf.Industry(Z) #2058Thanks @ericpien!
Fix: improve dividend repair #2062
Features: - fetch funds #2041 - fetch sector & industry #2058 Fixes: - improve dividend repair #2062
Fix price-repair bug introduced in 0.2.42 #2036
Fix price-repair bug introduced in 0.2.42 #2036
price repair extended to dividends & adjust
Features:
Fix fetch errors for: options, holders, download, news
Full changelog: #2034
Contributors: @Fidasek009 @aaron-jencks @stevenbischoff @ericpien @mreiche
Features: - fetch SEC filings #2009 - fetch analysis #2023 @Fidasek009 - price repair extended to dividends & adjust #2031 Fixes: - fix error on empty options chain #1995 @stevenbischoff - use dict.get() to safely access key in Holders #2013 @ericpien - fix datetime conversion with mixed timezones when ignore_tz is False #2016 @mreiche - handle faulty response object when getting news. #2021 @ericpien Maintenance: - prices: improve exceptions and logging #2000
add some missing keys to financials
Improvements:
Ticker.sustainabilityTicker.earnings RIPFull changelog: #1971
Contributors: @MohamedAlaa201 @vittoboa @SnowCheetos @rhwvu @lp177
Improvements: - add keys to financials #1965 #1985 - fetch Sustainability #1959 - improve price-repair-zeroes #1990 Fixes (prices): - fetching when period='max' #1967 - metadata: Fix '1wk is invalid' & repeated calls #1970 - Pandas warnings #1955 #1981 - price repair syntax errors #1989 Maintenance: - deprecate Ticker.earnings #1977
Fix typo in 0.2.39 c7af213
Fix typo in 0.2.39 c7af213
Maintenance + price repair improvements. Details in #1927
Maintenance + price repair improvements. Details in #1927
Thanks @vittoboa @elibroftw @marcofognog
Fixes: - Fix switching session from/to requests_cache #1930 Price repair: - Fix potential for price repair to discard price=0 rows #1874 - Don't price-repair FX volume=0, is normal #1920 - Improve 'sudden change' repair for splits & currency #1931 Information: - Fix help(yf.download) not showing the information about the function #1913 @vittoboa - Add more specific error throwing based on PR 1918 #1928 @elibroftw @marcofognog Maintenance: - Replace dead 'appdirs' package with 'platformdirs' #1896 - Deprecate 'pandas_datareader', remove a deprecated argument #1897 - Fix: datetime.datetime.utcnow() is deprecated ... #1922
Fix holders and insiders #1908 - thanks @vittoboa
Fix holders and insiders #1908 - thanks @vittoboa
Fix Pandas warnings #1838 #1844
Small fixes:
Thanks @mreiche @Rogach @power-edge @cottrell
Name download() column levels #1795
Small fixes:
download() column levels #1795history(keepna=False) when repair=True #1824peewee with old sqlite #1827Thanks: @mreiche @amanlai @molpcs @ange-daumal
Small fixes: - Update README.md for better copy-ability #1823 - Name download() column levels #1795 - Fix history(keepna=False) when repair=True #1824 - Replace empty list with empty pd.Series #1724 - Handle peewee with old sqlite #1827 - Fix JSON error handling #1830 #1833
Fixes for 0.2.34: fix behaviour with invalid symbols & unit tests #1816
Fixes for 0.2.34: fix behaviour with invalid symbols & unit tests #1816
Lots of changes here, thanks everyone.
Lots of changes here, thanks everyone.
Features:
download() progress bar to STDERR #1776 @coskos-opsFixes
download() DatetimeIndex on invalid symbols #1779 @VishnuAkundiTicker.calendar fetch #1790 @bot-unitTicker.info #1774 @coskos-opsraise_errors argument ignored in Ticker.history() #1806 @puntonimTicker.earnings_dates: fix warning Value 'NaN' has dtype incompatible with float64 #1810 @TejasweeeMaintenance
Features: - Add Recommendations Trend Summary #1754 - Add Recommendation upgrades & downgrades #1773 - Add Insider Roster & Transactions #1772 - Moved download() progress bar to STDERR #1776 - PIP optional dependencies #1771 - Set sensible min versions for optional 'nospam' reqs #1807 Fixes - Fix download() DatetimeIndex on invalid symbols #1779 - Fix invalid date entering cache DB #1796 - Fix Ticker.calendar fetch #1790 - Fixed adding complementary to info #1774 - Ticker.earnings_dates: fix warning "Value 'NaN' has dtype incompatible with float64" #1810 - Minor fixes for price repair and related tests #1768 - Fix price repair div adjust #1798 - Fix 'raise_errors' argument ignored in Ticker.history() #1806 Maintenance - Fix regression: _get_ticker_tz() args were being swapped. Improve its unit test #1793 - Refactor Ticker proxy #1711 - Add Ruff linter checks #1756 - Resolve Pandas FutureWarnings #1766
fix Ticker(ISIN) #1760 - thanks @bot-unit
Cookie fixes:
Ticker(ISIN) #1760 - thanks @bot-unitAdd cookie & crumb to requests, fix various HTTP errors. #1657 Thanks for big help from: @bot-unit @psychoz971 @JShen123
Add cookie & crumb to requests, fix various HTTP errors. #1657 Thanks for big help from: @bot-unit @psychoz971 @JShen123
Fix TZ cache exception blocking import #1705 #1709 Fix merging pre-market events with intraday prices #1703
Fix TZ cache exception blocking import #1705 #1709 Fix merging pre-market events with intraday prices #1703
Finish TZ cache lazy-load #1709
Full Changelog: https://github.com/ranaroussi/yfinance/compare/0.2.31b1...0.2.31b2
Fix merging pre-market events with intraday prices #1703
Full Changelog: https://github.com/ranaroussi/yfinance/compare/0.2.30...0.2.31b1
- Fix OperationalError #1698
Fix OperationalError #1698
Fix pandas warning when retrieving quotes - thanks @difelice #1672
Fixes:
Full Changelog: https://github.com/ranaroussi/yfinance/compare/0.2.28...0.2.29
Fix pandas warning when retrieving quotes. #1672
Replace sqlite3 with peewee for 100% thread-safety #1675
Fix merging events with intraday prices #1684
Fix error when calling enable_debug_mode twice #1687
Price repair fixes #1688
Fix TypeError: 'FastInfo' object is not callable #1636
TypeError: 'FastInfo' object is not callable #1636option_chain() also return underlying data - thanks @DanielGoldfarb #1606fix merging 1d-prices with out-of-range divs/splits #1635
Bug fixes:
security update - thanks @ricardoprins #1625
Proxy improvements
Proxy improvements - bug fixes #1371 - security fix #1625
Fix single ISIN as ticker - thanks @ricardoprins #1611 Fix 'Only 100 years allowed' error - thanks @lucas03 #1576
Fix single ISIN as ticker - thanks @ricardoprins #1611 Fix 'Only 100 years allowed' error - thanks @lucas03 #1576
Fix single ISIN as ticker #1611 Fix 'Only 100 years allowed' error #1576
Nothing published for this version
Fix info[] missing values #1603
Fix info[] missing values #1603
Fix 'Unauthorized' error - thanks @signifer-geo #1595
Fix 'Unauthorized' error - thanks @signifer-geo #1595
Fix unhandled sqlite3.DatabaseError #1574
Fix unhandled sqlite3.DatabaseError #1574
Your coding agent can read these notes before it upgrades. Set up the MCP server →