> ## Documentation Index
> Fetch the complete documentation index at: https://fruitstand.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Is yfinance Still Usable? Alternatives for Historical Prices

> Is yfinance still usable? We tested it in November 2026: yes for small personal pulls. Where it breaks, and the alternatives for historical stock prices.

*By [Fruit Stand Team](https://fruitstand.dev/about.md) · November 4, 2026 · Comparisons*

Yes, yfinance still works for small, personal pulls. On November 4, 2026 it
returned 10 years of daily prices for 498 of 500 US stocks in 17 seconds.
But it's unofficial, for personal use only, and rate-limited without
published limits, and Yahoo dropped Kenvue's history two days after
it was acquired. For anything repeatable or commercial, use a licensed
source.

Below is what we tested, where yfinance breaks, what Yahoo's own download
costs now, and the alternatives by how much data you need.

> [!NOTE]
>
> Fruit Stand publishes the Historical Stock Prices listing, one of the
> alternatives below. The yfinance tests were run with yfinance 1.8.0 from a
> US home connection, and the prices were checked against our data.

## What we tested

| Test | Result |
| - | - |
| One ticker, full history (`AAPL`, `period="max"`) | 11,567 daily rows back to December 12, 1980, in 0.7 seconds |
| 500 tickers, 10 years, one `yf.download` call | 498 returned data, in 17 seconds |
| The 2 that came back empty | `KVUE` (Kenvue, acquired November 2) and `IONQ-WS` (a warrant) |
| Apple's November 3 close | \$331.90, the same as ours; volume rounded to 63,160,000 vs. 63,160,026 |
| Today's row, during market hours | Open, high and low filled in, close and adjusted close blank |

For a notebook, a class project or a personal watchlist, that's plenty.

## Where yfinance breaks

* **Rate limits with no published number.** Yahoo answers too many
  requests with `YFRateLimitError: Too Many Requests`. Users in the
  project's own GitHub discussion report blocks lasting more than 24 hours,
  worse from VPNs and cloud servers, and the maintainer's answer is to cache
  and request less: "Stop spamming Yahoo." A full-market backfill, or a
  scheduled job on a cloud VM, is where this hits.
* **Personal use only.** yfinance's README says it isn't affiliated with
  Yahoo, is meant for research and education, and that Yahoo's API is for
  personal use only. Anything client-facing or commercial needs a source
  licensed for it.
* **Delisted tickers vanish.** Kenvue last traded on October 30, 2026 and
  Kimberly-Clark completed the acquisition on November 2. Two days later,
  yfinance returned nothing for `KVUE`, not even its history. A backtest
  that includes it now silently drops it. Our table still has all 877 of
  its trading days.
* **Ticker formats.** Yahoo uses its own symbols for share classes,
  preferreds and warrants, so some tickers from another source come back
  empty, as `IONQ-WS` did.
* **"Close" is adjusted by default.** yfinance sets `auto_adjust=True`, so
  its `Close` column is the split- and dividend-adjusted close unless you
  turn that off. Mixing it with as-traded prices from elsewhere gives wrong
  returns. [Why Don't My Historical Stock Prices Match Yahoo
  Finance?](https://fruitstand.dev/blog/stock-prices-dont-match-yahoo-finance.md) covers the
  differences in detail.
* **No guarantees.** It depends on Yahoo's web endpoints, which change
  without notice. When they do, it breaks until the project ships a fix.

## Yahoo's own download is now paid

The download button on Yahoo Finance's Historical Data page is no longer
free. Yahoo's [help page](https://help.yahoo.com/kb/SLN2311.html) says
downloading historical data needs a Yahoo Finance Gold subscription, which
is $39.95 a month billed yearly ($479.40 a year). You can still view the table in the browser, and
yfinance doesn't use the button, so it isn't affected. The Gold download is
still one ticker at a time.

## The alternatives

Prices and limits were checked on each provider's site on November 4, 2026.

| Option | Free | Paid | How you get it | Best for | Main catch |
| - | - | - | - | - | - |
| yfinance | Free | n/a | Python library | Personal projects, a few hundred tickers | Unofficial, rate-limited, personal use only |
| Nasdaq.com, Stooq | Free | n/a | Browser download | A one-off download | One ticker at a time |
| [Alpha Vantage](https://www.alphavantage.co/premium/) | 25 requests a day | Premium plans | API | Trying an API | 25 a day is a handful of tickers |
| [Tiingo](https://www.tiingo.com/about/pricing) | 500 symbols a month, 1,000 requests a day | $30/month individual, $50/month internal business | API | Personal and internal research | Internal use only, even on paid plans |
| [EODHD](https://eodhd.com/pricing) | 20 calls a day, 1 year of history | \$19.99/month (personal) for 30+ years | API | Scripts across many tickers | You build and run the loading yourself |
| Snowflake's free stock prices | Free | n/a | Snowflake share | Prototypes in Snowflake | Three months behind, close is after-hours |
| [Fruit Stand Historical Stock Prices](https://app.snowflake.com/marketplace/listing/GZTYZTG3LNFA) | 30-day trial | \$100/month | Snowflake share | Every US ticker in SQL, refreshed daily | Snowflake only, daily data only |

How to choose:

* **A few tickers for yourself:** yfinance is still fine. Cache what you
  download, and don't rerun the full history every time.
* **A script across many tickers:** a paid API with a clear license, such as
  Tiingo or EODHD, so a rate limit or a terms question doesn't stop the job.
* **Prices in a warehouse, for a team:** a Snowflake Marketplace listing
  puts every ticker in a table with no download or loading code. [Stock
  Price Datasets on the Snowflake Marketplace,
  Compared](https://fruitstand.dev/blog/stock-price-datasets-snowflake-marketplace.md) covers the
  options, and [Snowflake's Free Stock Prices vs.
  Paid](https://fruitstand.dev/blog/free-snowflake-stock-price-data-compared.md) shows how the free
  tier's prices differ.

## Replacing a yfinance call with SQL

A typical yfinance pull:

```python theme={null}
import yfinance as yf

df = yf.download(["AAPL", "MSFT"], start="2026-10-29", auto_adjust=False)
```

The same data from the Historical Stock Prices listing:

```sql theme={null}
select code, date, open, high, low, close, adjusted_close, volume
from security_price_history_vw
where exchange_code = 'US'
  and code in ('AAPL', 'MSFT')
  and date >= '2026-10-29'
order by code, date;
```

`close` is the as-traded close and `adjusted_close` matches Yahoo's `Adj
Close`. To pull every ticker, drop the `code` filter: there's no request
limit, only your warehouse's compute. For the other ways to load prices into
Snowflake, see [How to Get Historical Stock Prices into Snowflake (3
Ways)](https://fruitstand.dev/blog/historical-stock-prices-into-snowflake.md).

## F.A.Q.

> [accordion] Does yfinance work anymore?
>
> Yes, as of November 4, 2026, with yfinance 1.8.0. It can stop working for hours or days when Yahoo rate-limits your IP or changes its endpoints, so don't build anything that must run on schedule on it.

> [accordion] Is yfinance free?
>
> The library is free and open source. The data comes from Yahoo, whose terms limit it to personal use.

> [accordion] How far back does yfinance data go?
>
> As far back as Yahoo has it, usually to the stock's listing date. For Apple, that's December 12, 1980. Yahoo says its historical prices usually don't go back earlier than 1970.

> [accordion] Can you still download historical data from Yahoo Finance?
>
> Only with a Yahoo Finance Gold subscription, at \$479.40 a year, one ticker at a time. Viewing the Historical Data table in the browser is still free.

> [accordion] Is yfinance the same as Yahoo Finance?
>
> No. yfinance is an open-source Python library that isn't affiliated with Yahoo. It reads the same data Yahoo Finance's website shows.

To query daily prices for every US stock, ETF and mutual fund in SQL, with
no rate limits, start a free 30-day trial of the [Historical Stock Prices
listing on the Snowflake Marketplace](https://app.snowflake.com/marketplace/listing/GZTYZTG3LNFA).
The schema is in the [dataset docs](https://fruitstand.dev/datasets/historical-stock-prices.md).
Questions? Reach out at [contact@fruitstand.dev](mailto:contact@fruitstand.dev).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.