Symptoms
A pipeline expecting Adj Close from yf.download() may fail a column lookup even when Close is present. A separate lookup may fail because a one-ticker download has MultiIndex columns. The missing-column report and single-ticker column report describe these symptoms. They do not prove a new runtime defect on 2026-10-18.
Cause
The 1.7.0 download source sets auto_adjust=True and multi_level_index=True by default. The price-adjustment documentation says auto_adjust=False returns Yahoo OHLC already adjusted for splits and an Adj Close that also reflects dividends. With auto_adjust=True, all OHLC fields reflect splits and dividends: Close is the adjusted close and no separate Adj Close appears. The adjustment helper shows the rename. Separately, multi_level_index=False removes the ticker level only for exactly one ticker. Multiple tickers retain a ticker level, so select both the price field and symbol. The 2026-10-18 documentation commit clarified the price semantics; it does not establish when the defaults first changed.
Safe resolution
Choose the required price meaning before selecting columns. Set auto_adjust=False for a separate dividend-adjusted Adj Close, or auto_adjust=True and read Close for adjusted OHLC. Use multi_level_index=False for one flat ticker and preserve the symbol level for multiple tickers. Record the package version, symbols, interval, both options and field meaning in the ingestion contract. These calls require network access when a reader runs them; they were not run for this review.
import yfinance as yf
from importlib.metadata import version
print("yfinance", version("yfinance"))
raw = yf.download(
"AAPL", period="1y", auto_adjust=False,
multi_level_index=False, progress=False,
)
if raw.empty or "Adj Close" not in raw.columns:
raise ValueError("Expected a nonempty single-ticker Adj Close series")
adj_close = raw["Adj Close"]
adjusted = yf.download(
"AAPL", period="1y", auto_adjust=True,
multi_level_index=False, progress=False,
)
if adjusted.empty or "Close" not in adjusted.columns or "Adj Close" in adjusted.columns:
raise ValueError("Unexpected adjusted-price schema")
adjusted_close = adjusted["Close"]
many = yf.download(
["AAPL", "MSFT"], period="1y", auto_adjust=False,
multi_level_index=True, group_by="column", progress=False,
)
if many.empty or ("Adj Close", "AAPL") not in many.columns:
raise ValueError("Unexpected multi-ticker schema")
apple_adj_close = many["Adj Close"]["AAPL"]
Verification
Source review on 2026-10-20 covers yfinance 1.7.0 source, project documentation and issue reports; no Yahoo price request or live data comparison was performed. For a local shape test, use saved nonempty fixtures for both adjustment modes and one versus multiple tickers; assert expected fields and index levels, including a failure control with the wrong field. For real-feed acceptance, compare known split and dividend dates and save the observed values, package version, options and timestamps. A period without either event cannot establish adjustment semantics. Fixture shape checks do not prove Yahoo price correctness.
Limitations
The first version in which either default changed was not established. The latest release checked here was 1.7.0 (2026-08-26); later package or upstream behavior may differ. The guidance here concerns yf.download(); check Ticker.history() against its own call contract. The project README identifies yfinance as unofficial and intended for research and education, and warns that Yahoo data is intended for personal use. The library license and rights to downloaded data are separate. No live quote, commercial-use permission or production result was verified.
Sources and verification scope
Source review on 2026-10-20 covers yfinance 1.7.0 source, project documentation and issue reports; no Yahoo price request or live data comparison was performed.
- download-source (code) · checked:
- adjust-helper (code) · checked:
- price-doc (documentation) · checked:
- missing-issue (documentation) · checked:
- index-issue (documentation) · checked:
- doc-commit (documentation) · checked:
- project-readme (documentation) · checked: