Why Stock Quotes Dey Delay 15 Minutes
Stock quotes dey delay 15 minutes for free websites because of data licensing. See how exchange rules work and wetin stale prices mean for real trades.
Stock quotes dey delay 15 minutes for most free websites because of licensing matter. The data connection no slow: price dey leave exchange matching engine and reach screen within fraction of second. The 15 minutes na contract term wey dey inside agreements. Those agreements decide who fit show live prices and how much dem go pay for am.
Where stock price dey come from before e reach you
One US stock fit trade for more than twelve public venues at the same time. E still get plenty off-exchange trading wey dey report their prints separately. Each venue dey publish its own quotes and trades. Industry plans dey combine everything into one tape. One plan cover NYSE-listed names, while another cover Nasdaq-listed names. The processors wey dey run dem na SIPs, short for securities information processors. This consolidated tape dey produce the national best bid and offer, meaning the best pair of prices wey dey available anywhere for that exact moment. We explain am fully for our guide to wetin NBBO be.
Exchanges still dey sell their own direct feeds. Dem dey faster and carry more detail than the consolidated tape, and dem get separate licenses.
Why stock quotes dey delay 15 minutes: na licensing answer
Market data na one exchange revenue line. Every person wey dey distribute prices—broker, website, terminal or phone app—dey sign agreement with exchanges and tape plans. Those agreements divide the same numbers into two products. Real time data dey attract fee, and dem dey report am for each user every month. Delayed data, once e don old reach at least 15 minutes, no dey under the real time schedule again. So distributor fit give am out free without counting users.
The schedules get different charges: access fee for the pipe, monthly fee for every user wey fit see live price, plus non display fees for machines wey dey consume prices when nobody dey watch dem. Dem file the rates publicly, and dem dey change most years. So the structure matter pass this year’s numbers. Person must pay per user every month for live prices. Nobody dey pay for price wey don stale for quarter of an hour.
Na the full answer to why the free version free. Volume na the other side of the cost of carrying live prices. The tape dey send continuous quote updates throughout the session. Options na the extreme example, as the size of the options quote feed dey show.
Wetin 15-minute delay really worth
Delay matter to the extent price dey move inside am, and person fit measure that. The panel below take every regular-session minute bar for SPY, the S&P 500 tracking fund, up to June 2026, then compare each one with the bar 15 minutes later. E group dem by the hour wey the earlier bar fall inside.
The exact SQL behind every number
WITH regular_bars AS
(
SELECT
toTimeZone(window_start, 'America/New_York') AS et,
toTimeZone(window_start, 'America/New_York') + INTERVAL 15 MINUTE AS et_later,
toFloat64(close) AS px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND close > 0
AND window_start >= '2026-06-01 00:00:00'
AND window_start < '2026-07-01 00:00:00'
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 960
)
SELECT
formatDateTime(toStartOfHour(a.et), '%H:%i') AS et_time,
round(quantileDeterministic(0.5)(abs(b.px / a.px - 1) * 100, toUInt64(toUnixTimestamp(a.et))), 3) AS median_gap_pct,
round(quantileDeterministic(0.95)(abs(b.px / a.px - 1) * 100, toUInt64(toUnixTimestamp(a.et))), 3) AS p95_gap_pct,
count() AS sample_count
FROM regular_bars AS a
INNER JOIN regular_bars AS b ON b.et = a.et_later
GROUP BY et_time
ORDER BY et_timeBars wey get timestamp for the opening hour, wey start by 9:30 a.m. ET, move median of 0.125% for the next 15 minutes, with 95th percentile of 0.556%. For 15:00 hour, the median na 0.065%. Each bucket combine 630 overlapping minute pairs, so these figures show normal result, no be one-day accident. The curve no flat, and fixed delay dey hide more movement for some hours than others.
How much e dey hide still depend on the name. Same measurement, six household tickers, same month.
The exact SQL behind every number
WITH regular_bars AS
(
SELECT
ticker,
toTimeZone(window_start, 'America/New_York') AS et,
toTimeZone(window_start, 'America/New_York') + INTERVAL 15 MINUTE AS et_later,
toFloat64(close) AS px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'KO', 'AAPL', 'MSFT', 'NVDA', 'AMD')
AND close > 0
AND window_start >= '2026-06-01 00:00:00'
AND window_start < '2026-07-01 00:00:00'
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 960
)
SELECT
a.ticker AS ticker,
round(quantileDeterministic(0.5)(abs(b.px / a.px - 1) * 100, toUInt64(toUnixTimestamp(a.et))), 3) AS median_gap_pct,
round(quantileDeterministic(0.99)(abs(b.px / a.px - 1) * 100, toUInt64(toUnixTimestamp(a.et))), 3) AS p99_gap_pct
FROM regular_bars AS a
INNER JOIN regular_bars AS b ON b.ticker = a.ticker AND b.et = a.et_later
GROUP BY ticker
ORDER BY median_gap_pct DESCAMD get the widest typical gap among the six, at 0.361%, while SPY get the narrowest, at 0.071%. Na the 99th percentile column you need read twice: across the worst one percent of 15-minute windows that month, AMD move 2.532%.
Here be the same idea for one day. The panel find the June 2026 session wey get the widest intraday range for SPY. Then e draw two lines: the live tape for each ten-minute mark, and wetin a page with 15-minute delay dey show at that moment.
The exact SQL behind every number
WITH
widest_session AS
(
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND close > 0
AND window_start >= '2026-06-01 00:00:00'
AND window_start < '2026-07-01 00:00:00'
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 960
GROUP BY d
ORDER BY (max(toFloat64(high)) - min(toFloat64(low))) / min(toFloat64(low)) DESC
LIMIT 1
),
session_bars AS
(
SELECT
toTimeZone(window_start, 'America/New_York') AS et,
toTimeZone(window_start, 'America/New_York') - INTERVAL 15 MINUTE AS et_earlier,
toFloat64(close) AS px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND close > 0
AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM widest_session)
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 960
)
SELECT
formatDateTime(a.et, '%H:%i') AS et_time,
round(a.px, 2) AS live_price,
round(b.px, 2) AS delayed_price,
round(abs(a.px - b.px), 2) AS gap_delta,
formatDateTime(a.et, '%b %e') AS session_label
FROM session_bars AS a
INNER JOIN session_bars AS b ON b.et = a.et_earlier
WHERE toMinute(a.et) % 10 = 0
ORDER BY a.etFor Jun 9, by 09:50 ET, live SPY na 746.13, while the delayed view read 744.22, $1.91 away from am. By 15:50, both read 735.29 and 734.49. The lines overlap whenever the tape quiet, and dem separate whenever price dey move. Delay cost nothing for market wey no dey move, but e cost pass at the moments wey people dey watch.
The display rule: wetin website suppose show you
Regulation NMS get consolidated display requirement under Rule 603(c). Vendor wey dey show quotation data to public suppose present consolidated information: national best bid and offer together with consolidated last sale. E no suppose dress one venue quotation up as the market price. Vendors must also mark delayed data as delayed. Na from there the small print for bottom of every finance page dey come. Two things follow for anybody wey dey read free quote.
- Free live quote from one exchange na real price, but e no be NBBO. E dey show one venue book, and that book fit wider pass the best price wey dey available.
- Page wey get live last trade but no bid or ask na normal thing. Last sale and quotes na separate licensed products, and last sale cheaper.
For wetin dey happen when two venues meet for top of the book, see locked and crossed markets.
Professional or non professional: test wey dey set your bill
How much live data go cost individual person depend on classification. And the classification depend on your work, no be how much money you get. For exchange language, you count as non professional subscriber when all these conditions apply.
- You be natural person wey dey take the data for personal use, no be for company or any other entity.
- You no register or qualify with SEC, CFTC, state securities agency, securities exchange or association, or futures contract market.
- You no dey work as investment adviser or asset manager. You also no dey do work wey go require any of those registrations.
- You no dey use the data for business, including for employer wey dey refund your subscription money.
If you fail one condition, exchanges go classify you as professional. Dem go bill you for each exchange, each user and each month, with a multiple of the non professional rate. Junior analyst for fund wey get small personal account still be professional. Retired investor wey get large portfolio and dey trade only their own money no be professional. Distributors must collect your answer and report am. Na why every live data signup dey ask about your employer and your registrations.
Wetin be snapshot quote?
Snapshot na one market reading wey system collect for the exact time wey you request am: the last price, or the current bid and ask, wey system return once and no update again. Stream na standing subscription, where every change dey push as e happen. Licensing dey price the two differently. E fit charge per query for one, and per user per month for the other. Na why free API fit give you delayed snapshot endpoint but no live stream. If you refresh snapshot every second, you don rebuild stream, and the agreements dey written to stop that kind use.
How you fit know whether the price wey dey front of you dey delayed
- Timestamp na the only reliable sign. Live quote dey carry timestamp wey fall within one or two seconds of the current ET clock.
- The day’s high and running volume dey go stale too, so delayed page fit miss a high wey tape set ten minutes ago.
- For the first 15 minutes after the 9:30 a.m. ET open, delayed page no get anything from the current session. E go show previous close or premarket print.
- Freeze test, wey mean to watch whether the number dey move at all, only dey work for names wey dey move.
That last one need data behind am.
The exact SQL behind every number
WITH regular_bars AS
(
SELECT
ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
toTimeZone(window_start, 'America/New_York') AS et,
toFloat64(close) AS px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'KO', 'AAPL', 'MSFT', 'NVDA', 'AMD')
AND close > 0
AND window_start >= '2026-06-01 00:00:00'
AND window_start < '2026-07-01 00:00:00'
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) < 960
),
stepped AS
(
SELECT
ticker,
et,
px,
lagInFrame(px) OVER (PARTITION BY ticker, session_date ORDER BY et
ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_px
FROM regular_bars
)
SELECT
ticker,
round(100 * countIf(px != prev_px) / count(), 1) AS minutes_price_moved_pct,
round(quantileDeterministic(0.5)(abs(px / prev_px - 1) * 10000, toUInt64(toUnixTimestamp(et))), 1) AS median_move_bps
FROM stepped
WHERE prev_px > 0
GROUP BY ticker
HAVING count() > 0
ORDER BY minutes_price_moved_pct DESCThrough June 2026, AMD print price wey different from the previous minute in 99.8% of regular session minutes, with median minute-to-minute move of 9.6 basis points. One basis point na one hundredth of one percent. KO repaint least often among the six, at 94.1%. For names wey active reach this level, if last price no move for several minutes inside the middle of a session, e be fair hint say you dey look at delayed or cached number. For thinly traded stock, that kind stillness dey normal. Na why timestamp remain the test.
Which free stock quotes truly dey real time
Two sources dey reliably carry live prices for private individual, while one common label need make person check am again.
- Funded brokerage account. Brokers dey carry non professional entitlement for their customers and pass live quotes through the app. Na why the account opening form ask about your employer.
- Exchange operator own website, for the names wey that exchange list. E dey real time and na single venue, so na one book, no be consolidated NBBO.
- Anything wey advertise free real time quotes without login and self certification. Check the stamp on the quote before you rely on am.
When the destination na program instead of screen, the classification change again. Machine consumption dey licensed under non display terms. Na separate schedule from the per user one. Our writeups on free stock market data APIs and querying market data with SQL explain those tiers.
FAQ
Why stock quotes dey delay exactly 15 minutes?
Fifteen minutes na the point wey US equity prices stop to be fee-bearing real-time product under exchange data agreements. Distributor fit publish any price wey old reach at least that time without reporting user count.
Wetin make person be professional market data subscriber?
Registration with securities or futures regulator, work for investment role, taking the data on behalf of entity, or using the prices for any business purpose. Net worth and account size no get any role for there.
How I fit know whether stock quote dey delayed?
Check quote timestamp against current ET clock, and look for delayed label wey vendors must display. For active name during regular hours, if price dey remain unchanged for minutes, na another sign.
Free real-time quotes dey the same as NBBO?
Many times, no. Free quote from one exchange only show that venue’s book. NBBO na the best bid and offer across every venue, calculated from consolidated tape.
The 15-minute delay matter for end-of-day data?
No. Once session close, delayed and real-time version of closing price or daily volume figure dey identical. The delay only matter while session still dey run.
Every panel for here come with the SQL wey produce am, so you fit count any number above again for another ticker or another month. If you wan measure wetin 15 minutes worth for a name wey you dey follow, ask for am in plain English on the Strasmore terminal.