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

# Snowflake's Free Stock Prices vs. Paid: What's Different

> Snowflake Curated Data's free stock prices next to Fruit Stand's and Nasdaq's official close: a 3-month lag, after-hours closes and Nasdaq-only volume, shown.

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

Snowflake's free stock prices come from **Snowflake Curated Data (Free)**: daily
prices for 23,388 US tickers, three months behind. They often differ from
the official close, because the free tier's close is the after-hours price.
Microsoft closed at $425.85 there on July 29, 2026, against an official
$390.54. Fruit Stand's paid listing matched the official close every time.

For a prototype where three-month-old data is fine, the free tier works.
For returns, backtests or anything compared with published figures, the
price definitions matter more than the price tag. This post puts real prices
from both side by side, with the SQL to check them yourself.

> [!NOTE]
>
> Fruit Stand publishes the Historical Stock Prices listing. We pulled every
> number below on November 1, 2026: Fruit Stand's prices from its listing,
> Snowflake Curated Data's from its free tier, and official closes from
> Nasdaq's [Nasdaq Official Closing Price](https://www.nasdaq.com/market-activity/stocks/aapl/historical-nocp)
> history. To compare more listings, including CRSP, Bloomberg and EDI, see
> [Stock Price Datasets on the Snowflake Marketplace, Compared](https://fruitstand.dev/blog/stock-price-datasets-snowflake-marketplace.md).

## Free vs. paid at a glance

| | Snowflake Curated Data (Free) | Fruit Stand Historical Stock Prices |
| - | - | - |
| Price | Free | \$100/month, 30-day free trial |
| How current | 3 months behind (through July 31, 2026, on November 1) | Daily, by 5:00 AM PT |
| History | Since May 1, 2018 | Complete history (50+ years), back to each security's listing date |
| Universe | 23,388 US stock and ETF tickers | \~50,250 US stocks, ETFs and mutual funds |
| Close | After-hours close | Official close |
| Volume | Nasdaq trades only | All US venues |
| Adjusted prices | Yes, adjusted all-session prices | Yes, adjusted open, high, low and close |
| Format | One row per ticker, date and variable | One row per security per day |

Snowflake Curated Data also has a paid tier at \$25,000 a year with no lag,
but its prices use the same all-session definitions.

## What the free tier doesn't cover

Before comparing prices, check that your securities are there at all. We
matched every US stock and ETF that traded on July 31, 2026, the free tier's
latest date:

| Gap | What we found |
| - | - |
| OTC stocks | Fruit Stand had 10,061 OTC-traded stocks and ETFs with a price that day. 23 of them were in the free tier. |
| Mutual funds | None. Fruit Stand has about 25,800 US mutual funds, with daily NAV. |
| Missing days for ETFs | For exchange-listed ETFs in both datasets, 19% of trading days in May–July 2026 had no free-tier row (60,615 days across 2,726 of 5,220 ETFs). |
| Missing days for stocks | For exchange-listed stocks in both, 1.7% of trading days were missing (6,114 days across 595 of 5,792 stocks). |
| Some listed securities | Berkshire Hathaway's Class A shares (BRK-A) aren't in the free tier on any date. |

The missing days look like days with no trades on Nasdaq itself, which fits
a dataset built from Nasdaq's own feed. The Xtrackers ETF BHYB is an
example: its last free-tier row is July 6, 2026, yet it traded \$210 million
across all venues on July 31. For thinly traded ETFs, that leaves holes in
any return or time series built from the free tier.

## What three months behind misses

On November 1, the free tier's latest prices are from July 31. Here's how
far a few well-known tickers moved in the three months it can't see, using
official closes:

| Ticker | Close on Jul 31, 2026 | Close on Oct 30, 2026 | Change |
| - | -: | -: | -: |
| TSLA | \$311.21 | \$399.81 | +28.5% |
| MSFT | \$464.72 | \$521.91 | +12.3% |
| AAPL | \$308.91 | \$344.63 | +11.6% |
| NVDA | \$200.75 | \$204.64 | +1.9% |
| SPY | \$747.03 | \$755.72 | +1.2% |

Anything built on the free tier, a dashboard, a model input or a portfolio
valuation, is that far out of date until the next quarter's data arrives.

## Closing prices on big after-hours days

Snowflake Curated Data's documentation says its prices cover all trading
sessions, so its "Post-Market Close" is the last price of the after-hours
session. Most market data, from brokers to index providers, uses the
official close at 4 PM. On a quiet day the two are close. When news lands
after the bell, they aren't:

| Ticker | Date | Nasdaq official close | Fruit Stand close | Free tier close | Free tier vs. official |
| - | - | -: | -: | -: | -: |
| MSFT | Jul 29, 2026 | \$390.54 | \$390.54 | \$425.85 | +9.0% |
| AAPL | Jul 30, 2026 | \$333.43 | \$333.43 | \$312.33 | −6.3% |
| TSLA | Jul 22, 2026 | \$374.01 | \$374.01 | \$358.54 | −4.1% |
| NVDA | May 20, 2026 | \$223.47 | \$223.47 | \$220.66 | −1.3% |
| AAPL | Jun 3, 2026 | \$310.26 | \$310.26 | \$313.92 | +1.2% |

These are the largest gaps between the two for each ticker in May–July
2026\. Fruit Stand's close matched the Nasdaq official closing price to the
cent on all of them.

## What the gap does to returns

A close that's already moved after hours takes that move out of the next
day's return. Here's the next trading day's return for the three biggest
gaps, calculated both ways:

| Ticker | Day | Return from official closes | Return from free tier closes |
| - | - | -: | -: |
| MSFT | Jul 30, 2026 | +15.51% | +5.32% |
| AAPL | Jul 31, 2026 | −7.35% | −1.60% |
| TSLA | Jul 23, 2026 | −14.52% | −9.63% |

Neither series is wrong: the move happened, just at a different time. But
returns from after-hours closes won't match published returns, index
returns or a broker statement, and backtests that trade "at the close" will
assume prices nobody could trade at 4 PM.

## Volume: one exchange vs. all of them

The free tier's volume is "Nasdaq Volume", trades executed on Nasdaq only.
US stocks trade on more than a dozen exchanges and off-exchange venues, so
that's a fraction of the total. On July 15, 2026:

| Ticker | Listed on | Total volume (Fruit Stand) | Nasdaq-only volume (free tier) | Share |
| - | - | -: | -: | -: |
| AAPL | Nasdaq | 60,957,600 | 20,062,636 | 32.9% |
| NVDA | Nasdaq | 124,797,203 | 37,734,536 | 30.2% |
| SPY | NYSE Arca | 43,844,770 | 6,864,433 | 15.7% |
| JPM | NYSE | 10,750,000 | 782,854 | 7.3% |

For stocks listed outside Nasdaq the share is much smaller, so volume-based
measures (average daily volume, liquidity filters, VWAP) come out very
different depending on which you use.

## Adjusted prices: close, with one difference

Both publish split- and dividend-adjusted prices. The free tier's are the
adjusted versions of its all-session prices, such as "Post-Market Close
Adjusted". On dates before each stock's most recent split, the adjustment
factors line up closely:

| Ticker | Date | Raw close (Fruit Stand) | Adjusted close (Fruit Stand) | Post-market close (free tier) | Adjusted post-market close (free tier) |
| - | - | -: | -: | -: | -: |
| AAPL | Jan 2, 2020 | \$300.35 | \$72.27 | \$300.85 | \$72.39 |
| TSLA | Jan 3, 2022 | \$1,199.78 | \$399.93 | \$1,207.90 | \$402.63 |
| NVDA | Jan 2, 2024 | \$481.68 | \$48.03 | \$479.98 | \$47.86 |
| JPM | Jan 2, 2020 | \$141.09 | \$117.31 | \$141.27 | \$117.46 |
| SPY | Jan 2, 2020 | \$324.87 | \$295.39 | \$325.07 | \$296.67 |

AAPL's 4-for-1 split, TSLA's 3-for-1 and NVDA's 10-for-1 are applied in
both, and JPM's and SPY's dividends too. The remaining differences mostly
come from the starting price, after-hours versus official, not from the
adjustment method. SPY shows the largest gap in the dividend adjustment
itself, about 0.4%.

## Check it yourself

With both listings in your account, one query lines them up. The free tier
stores one row per ticker, date and variable, so pivot it first:

```sql theme={null}
with fruit_stand as (
    select code as ticker, date, close, volume
    from security_price_history_vw
    where exchange_code = 'US'
      and code in ('AAPL', 'MSFT', 'TSLA')
      and date between '2026-07-01' and '2026-07-31'
),
curated as (
    select
        ticker,
        date,
        max(iff(variable_name = 'Post-Market Close', value, null)) as post_market_close,
        max(iff(variable_name = 'Nasdaq Volume', value, null)) as nasdaq_volume
    from snowflake_public_data_free.public_data_free.stock_price_timeseries
    where ticker in ('AAPL', 'MSFT', 'TSLA')
      and date between '2026-07-01' and '2026-07-31'
    group by ticker, date
)
select
    f.ticker,
    f.date,
    f.close,
    c.post_market_close,
    round(100 * (c.post_market_close / f.close - 1), 2) as pct_gap,
    round(100 * c.nasdaq_volume / f.volume, 1) as nasdaq_volume_share
from fruit_stand f
join curated c
    on c.ticker = f.ticker and c.date = f.date
order by abs(pct_gap) desc;
```

Run it with the Historical Stock Prices database selected, and change
`snowflake_public_data_free` to the name you gave the free tier when you got
it. To check official closes, Nasdaq publishes each Nasdaq-listed stock's
[official closing price history](https://www.nasdaq.com/market-activity/stocks/msft/historical-nocp).

## Switching from the free tier

If you've built on the free tier, moving to Historical Stock Prices is a
query change rather than a rebuild. The free tier stores one row per ticker,
date and variable; Historical Stock Prices has one row per security per day,
with a column for each price:

| Free tier `variable_name` | Historical Stock Prices column | What changes |
| - | - | - |
| `Pre-Market Open` | `open` | Official open instead of the pre-market open |
| `All-Day High`, `All-Day Low` | `high`, `low` | Regular-session high and low |
| `Post-Market Close` | `close` | Official close instead of the after-hours close |
| `Post-Market Close Adjusted` | `adjusted_close` | Split- and dividend-adjusted from the official close |
| `Nasdaq Volume` | `volume` | All US venues instead of Nasdaq only |
| `ticker` | `code` (with `exchange_code = 'US'`) | Preferred shares use a `-P` suffix, such as `JPM-PC` for the free tier's `JPM-C` |

So a query like this on the free tier:

```sql theme={null}
select ticker, date, value as close
from public_data_free.stock_price_timeseries
where ticker = 'AAPL'
  and variable_name = 'Post-Market Close'
  and date >= '2026-01-01';
```

becomes this on Historical Stock Prices:

```sql theme={null}
select code as ticker, date, close
from security_price_history_vw
where code = 'AAPL'
  and exchange_code = 'US'
  and date >= '2026-01-01';
```

## Is the free tier enough?

* **Yes, for prototypes and schema exploration**, where three-month-old
  prices and after-hours closes don't change the answer.
* **Yes, for studying after-hours trading**, such as how stocks react to
  earnings before the next open. All-session prices are built for that.
* **No, for returns, backtests or reporting** that has to match published
  figures. Use official closes, such as Historical Stock Prices.
* **No, for volume or liquidity across venues.** Nasdaq volume alone
  understates trading, most of all for NYSE-listed stocks.
* **No, for current prices or mutual funds.** The free tier is three months
  behind and covers stocks and ETFs only.
* **No, for OTC stocks or thinly traded ETFs.** OTC securities are almost
  entirely missing, and nearly one in five ETF trading days has no row.

Comparing more than these two? [Stock Price Datasets on the Snowflake
Marketplace, Compared](https://fruitstand.dev/blog/stock-price-datasets-snowflake-marketplace.md)
covers nine listings, including CRSP, Bloomberg, EDI and the SEC Financial
Analytics Kit, by coverage, columns and price.

## F.A.Q.

> [accordion] Is there free stock price data on Snowflake?
>
> Yes. Snowflake Curated Data (Free) has daily prices for 23,388 US stock and ETF tickers since 2018, three months behind, with after-hours closes and Nasdaq-only volume. Bright Data's Finance Information listing is also free, with the last six months of prices scraped from finance websites. For current official closes, Historical Stock Prices has a free 30-day trial.

> [accordion] Why is the free tier's close different from Yahoo Finance or my broker?
>
> Its close is the after-hours close, and its volume counts only Nasdaq trades. Yahoo Finance and brokers show the official 4 PM close and consolidated volume. On days with news after the bell, the closes can differ by several percent.

> [accordion] Does Snowflake Curated Data have adjusted prices?
>
> Yes. It publishes adjusted versions of its pre-market open, all-day high and low, and post-market close, adjusted for splits and dividends. They're adjusted all-session prices, so they still start from the after-hours close.

> [accordion] Which close does Fruit Stand's Historical Stock Prices use?
>
> The official close. On every date in this post, it matched the Nasdaq Official Closing Price to the cent. Volume is consolidated across all US venues.

To compare official closes with the free data yourself, start a free 30-day
trial of the [Historical Stock Prices listing on the Snowflake Marketplace](https://app.snowflake.com/marketplace/listing/GZTYZTG3LNFA).
It has daily raw and adjusted OHLC for 50,000+ US stocks, ETFs and mutual
funds, with official closes and consolidated volume. 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.