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

# Where to Get End-of-Day Prices for Every US Stock in Bulk

> Where to get end-of-day prices for every US stock in bulk: free files, per-day bulk APIs, flat files and warehouse tables, with prices, history and catches.

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

End-of-day prices for every US stock come in bulk three ways: free files
such as Stooq's (personal use only), paid bulk APIs and flat files such as
EODHD, EODData and Massive, or a warehouse table on the Snowflake
Marketplace. One US trading day is about 42,000 rows, and full history is
about 155 million.

Below are the options side by side, what "bulk" costs beyond the price, and
which fits which job.

> [!NOTE]
>
> Fruit Stand publishes the Historical Stock Prices listing, one of the
> options below. Every provider's price, history and terms were checked on
> its own site on November 4, 2026. The row counts are from our own data.

## The options compared

| Option | What you get | History | Price | License | Main catch |
| - | - | - | - | - | - |
| [Stooq](https://stooq.com/db/h/) | One ZIP of daily prices for US securities (595 MB as text) | Long, varies by ticker | Free | Personal use only | No commercial use; you parse and load it |
| [EODData](https://eoddata.com/products/historicaldata.aspx) | Yearly ZIP files per exchange, in MetaStock text format | Up to 30 years | \$90 per exchange for 30 years (NYSE, Nasdaq and AMEX each), plus a membership for daily files | Per their terms | Split-adjusted only, not for dividends |
| [EODHD bulk API](https://eodhd.com/financial-apis/bulk-api-eod-splits-dividends) | One request returns a whole exchange for one day, as CSV or JSON | Back to 1990 | From \$19.99/month (personal); not on the free plan | Personal or commercial plans | Each request costs 100 API calls; history is one day at a time |
| [FMP EOD bulk](https://site.financialmodelingprep.com/developer/docs/stable/eod-bulk) | All symbols for one date | Not stated on the page | Plan not stated on the page | Per plan | Check which plan includes it |
| [Massive flat files](https://massive.com/pricing) | Daily files for all US stocks | 5 years ($29/month), 10 years ($79), 20+ years (\$199) | $29 to $199/month | Individual use; business plans separate | You load and maintain the files |
| [Nasdaq Data Link, North American EOD](https://data.nasdaq.com/databases/NAEOD) | Adjusted EOD prices and adjustment factors through the Tables API | Since January 2001 | Shown after login | Premium license | Price not public |
| [Databento US Equities](https://databento.com/docs/examples/equities/closing-prices) | Official consolidated daily bars from Nasdaq's NLS+ feed, for all US stocks and ETFs, through its API | 8+ years | Pay as you go by the GB ($125 free credits for new users), or $199/month | Personal or commercial, licensed in its portal | Short history; you estimate usage before you buy |
| Snowflake's free stock prices | A shared table in Snowflake | Varies | Free | Snowflake's terms | Three months behind, and the close is the after-hours price |
| [Fruit Stand Historical Stock Prices](https://app.snowflake.com/marketplace/listing/GZTYZTG3LNFA) | Shared tables in Snowflake, raw and adjusted OHLC | Back to each listing date, from 1962 | \$100/month after a 30-day trial | Per the listing terms | Snowflake only; daily data only |

The free Snowflake row is covered in detail in [Snowflake's Free Stock
Prices vs. Paid](https://fruitstand.dev/blog/free-snowflake-stock-price-data-compared.md).

## How big is "every US stock"?

From the Historical Stock Prices listing, November 2026:

| | Securities | Daily rows, all history | First date | Rows on November 3, 2026 |
| - | -: | -: | - | -: |
| Stocks | 18,272 | 52.5 million | January 2, 1962 | 12,191 |
| ETFs | 5,959 | 8.8 million | November 6, 1984 | 5,847 |
| Mutual funds | 25,748 | 93.8 million | May 3, 1973 | 23,886 |
| **Total** | **49,979** | **155.1 million** | | **41,924** |

About two-thirds of the stocks have a row on a given day. The rest are
mostly OTC securities that don't trade every day, plus securities that have
stopped trading.
Mutual funds are the biggest share of rows, so leave them out if you only
need exchange-traded securities.

## What bulk costs beyond the price

* **Backfilling history.** A per-day bulk endpoint gives you one day per
  request. Thirty years is about 7,500 trading days. On EODHD that's 7,500
  requests at 100 calls each, or 750,000 calls, which is about 8 days at its
  100,000-calls-a-day plans. Flat files and warehouse tables skip this step.
* **Keeping adjustments current.** When a stock splits or pays a dividend,
  its adjusted history before that date changes. A daily file only gives you
  the new day, so your stored adjusted prices drift unless you refetch that
  ticker's history or apply the adjustment factors yourself. In our own
  pipeline, any security with a new split or dividend has its full history
  refetched, and every security is restated twice a week to catch anything
  missed.
* **Delistings and ticker changes.** Acquired and delisted companies drop
  out of daily files, and some sources drop their history too. [Is yfinance
  Still Usable?](https://fruitstand.dev/blog/is-yfinance-still-usable.md) shows Kenvue's history
  disappearing from Yahoo two days after its acquisition closed.
* **Licensing.** Stooq and Massive's individual plans are for personal use.
  For a team or a product, pick a plan licensed for it.
* **Loading.** Files and APIs end in your own tables, so you also build the
  loader, the schedule and the checks for duplicates and bad prices.

## Which should you choose?

* **A personal project, free:** Stooq's daily ZIP covers it, within its
  personal-use terms.
* **A one-time history purchase:** EODData sells each exchange's history
  outright, but it's split-adjusted only, so calculate dividend-adjusted
  returns yourself.
* **Your own database, updated daily:** a per-day bulk API (EODHD or FMP),
  Massive's flat files, or Databento if you want the official consolidated
  close and only need recent years. Budget time for the backfill and for re-adjusting
  history when corporate actions post.
* **Already on Snowflake:** a Marketplace listing, such as Fruit Stand's
  [Historical Stock Prices](https://app.snowflake.com/marketplace/listing/GZTYZTG3LNFA),
  gives you the full history as tables, with nothing to load or re-adjust.
  To weigh it against the other eight stock price listings, including
  Snowflake Curated Data, CRSP, Bloomberg and EDI, [Stock Price Datasets on
  the Snowflake Marketplace, Compared](https://fruitstand.dev/blog/stock-price-datasets-snowflake-marketplace.md)
  lines them up on history, update time, columns and price, with a
  which-listing-for-which-job guide. If you'd rather bring your own files or
  API into Snowflake, [How to Get Historical Stock Prices into Snowflake (3
  Ways)](https://fruitstand.dev/blog/historical-stock-prices-into-snowflake.md) walks through each
  route step by step, with the SQL to check your load.

## Every US stock in one query

With the listing, "every US stock" is a filter, not a download. One day for
every stock and ETF that traded:

```sql theme={null}
select s.code, s.name, s.asset_class, p.close, p.adjusted_close, p.volume
from security_price_history_vw p
join security_vw s
    on s.code = p.code and s.exchange_code = p.exchange_code
where p.exchange_code = 'US'
  and s.asset_class in ('stock', 'etf')
  and p.date = '2026-11-03'
order by s.code;
```

On November 3, 2026 that returned 18,038 rows. Drop the date filter for the
full history. For the full list of tickers, see [How to Get a List of Every
US Stock and ETF Ticker in SQL](https://fruitstand.dev/blog/list-every-us-stock-etf-ticker-sql.md).

## F.A.Q.

> [accordion] How many rows is one day of US end-of-day data?
>
> About 42,000 in our data for November 3, 2026, including mutual funds, or about 18,000 for stocks and ETFs alone. EODHD's documentation counts 44,376 US rows for August 18, 2026.

> [accordion] Can I use free bulk downloads commercially?
>
> Usually not. Stooq says its data is for personal use only, and Yahoo-based tools carry the same limit. Commercial use needs a provider's commercial plan or license.

> [accordion] Do bulk files include adjusted prices?
>
> It varies. EODData's history is adjusted for splits but not dividends. Nasdaq Data Link's North American EOD includes adjustment factors. Check whether a source restates past adjusted prices when a new split or dividend posts.

> [accordion] How far back does US end-of-day data go?
>
> Depends on the source: EODHD's bulk endpoint reaches 1990, Nasdaq Data Link's North American EOD starts in 2001, Databento has 8+ years, and Massive's plans range from 5 to 20+ years. Our listing goes back to each security's first trading day, as early as 1962.

To get end-of-day prices for every US stock, ETF and mutual fund as tables
in Snowflake, 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.