What Price Does a Market Order Fill At?
A market order fills at whatever the book gives: usually the far side of the NBBO, sometimes better, sometimes three levels worse. Here is the tape.
What price does a market order fill at? A market order fills at whatever the book gives it the instant it arrives: usually the far side of the NBBO, the national best bid and offer, and once in a while a shade better than that. The price on your screen is a quote, not a contract. Your order takes shares from whoever is resting at the top of the book, and it keeps taking them at successively worse prices until the full quantity is done.
Three regimes cover almost every fill a retail trader meets. A small order in a penny-wide name lands at the quote or just inside it. A large order walks the book and settles at a blended average worse than the price that was on screen. An order sent into the opening minutes, or into a reopening after a halt, meets a spread wide enough that the fill can look like a malfunction. The panels below read all three off the tape for one pinned session, September 16, 2026, so the numbers stay put.
What price does a market order fill at in a liquid name?
A buy market order pays the ask. A sell market order receives the bid. The gap between the two, the quoted spread, is the first and most predictable cost of using a market order at all, and in a heavily traded name during the middle of the day it is often a single cent. Here is that gap for six household names over the same half hour, averaged across every quote update in the window.
| symbol | avg_spread_cents | avg_spread_bps |
|---|---|---|
| MSFT | 10.94 | 2.21 |
| AAPL | 3.58 | 1.07 |
| SPY | 1.77 | 0.23 |
| NVDA | 1.38 | 0.64 |
| KO | 1.14 | 1.29 |
| NFLX | 1.1 | 1.42 |
The exact SQL behind every number
SELECT
ticker AS symbol,
round(avg(toFloat64(ask_price - bid_price)) * 100, 2) AS avg_spread_cents,
round(avg(toFloat64(ask_price - bid_price)
/ ((toFloat64(ask_price) + toFloat64(bid_price)) / 2)) * 10000, 2) AS avg_spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO', 'NFLX')
AND sip_timestamp >= toDateTime('2026-09-16 15:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-09-16 15:30:00', 'UTC')
AND bid_price > 0
AND ask_price > bid_price
GROUP BY symbol
ORDER BY avg_spread_cents DESCRead the panel in two units. In cents per share, MSFT carried the widest average quote at 10.94 cents, and NFLX the tightest at 1.1 cents. A cents figure flatters a cheap stock and punishes an expensive one: the second column restates the same gap as a fraction of the price, 2.21 basis points for the first name against 1.42 for the last. A basis point is one hundredth of one percent.
At a one cent spread, a 100-share market buy crosses one dollar of spread on the whole order. A limit order resting at the bid would have saved that dollar, at the risk of never trading. That tradeoff is the entire subject of market orders versus limit orders.
Can a market order fill better than the quoted price?
Yes, and for small retail orders it happens constantly. Most retail market orders never reach an exchange: the broker routes them to a wholesaler that fills them out of its own inventory at a price inside the quote. Quotes in stocks above one dollar must be priced in whole pennies, while executions may print in fractions of a cent, so price improvement leaves a visible fingerprint on the tape as a sub-penny print.
| et_hour | print_count | subpenny_pct |
|---|---|---|
| 10:00 | 117449 | 53.19 |
| 11:00 | 110938 | 62.82 |
| 12:00 | 54569 | 50.3 |
| 13:00 | 40150 | 32.93 |
| 14:00 | 81758 | 26.85 |
The exact SQL behind every number
SELECT
formatDateTime(toStartOfHour(toTimeZone(sip_timestamp, 'America/New_York')), '%H:%i') AS et_hour,
count() AS print_count,
round(100 * countIf(toUInt64(round(toFloat64(price) * 10000)) % 100 != 0)
/ count(), 2) AS subpenny_pct
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= toDateTime('2026-09-16 14:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-09-16 19:00:00', 'UTC')
AND price > 0
AND size > 0
GROUP BY et_hour
ORDER BY et_hourAcross the 5 hourly buckets, prints at sub-penny prices made up 53.19% of all prints in the 10:00 hour, out of 117449 prints, and 26.85% in the 14:00 hour. Every one of those is a trade that settled somewhere other than a whole cent. The pricing grid behind it, and how the improvement gets measured, are in the sub-penny rule and price improvement.
Why did my market order fill at several different prices?
The quote shows only what sits at the top of the book, and the size displayed there is usually small. The prints on the tape run the same way.
| size_bucket | print_count | pct_of_volume |
|---|---|---|
| up to 100 | 381148 | 46.37 |
| 101 to 500 | 21728 | 30.6 |
| 501 to 1,000 | 1243 | 6.36 |
| 1,001 to 5,000 | 697 | 9.29 |
| more than 5,000 | 48 | 7.37 |
The exact SQL behind every number
WITH window_prints AS
(
SELECT size
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= toDateTime('2026-09-16 14:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-09-16 19:00:00', 'UTC')
AND size > 0
)
SELECT
multiIf(size <= 100, 'up to 100',
size <= 500, '101 to 500',
size <= 1000, '501 to 1,000',
size <= 5000, '1,001 to 5,000',
'more than 5,000') AS size_bucket,
count() AS print_count,
round(100 * sum(size) / (SELECT sum(size) FROM window_prints), 2) AS pct_of_volume
FROM window_prints
GROUP BY size_bucket
ORDER BY min(size)Over that window, prints of up to 100 shares accounted for 381148 trades and 46.37% of the shares that changed hands, while prints of more than 5,000 shares made up 7.37% of volume.
A 5,000-share market order arriving into a tape shaped like that does not meet 5,000 shares at one price. It takes what is displayed at the best offer, then the next offer up, then the one above that. The confirmation comes back as a volume weighted average price: each piece weighted by its share count. The first share of the order gets the price you saw. The last share sets the damage. Slippage is the name for the difference between the quote at the moment the order left and the average price it actually paid. Splitting the order into pieces does not make the book any deeper, and each piece crosses the spread again. Timing matters as much as size, which is the subject of how long a market order takes to fill.
Why does a market order at the open fill so far from the quote?
The first minutes of the session hold the least resting size of the regular day, and the quoted spread shows it. This panel walks one name in five minute buckets from 9:00 a.m. to 11:00 a.m. ET on the pinned date, through the premarket, the bell, and the hour that follows.
| et_time | avg_spread_cents | avg_spread_bps |
|---|---|---|
| 09:00 | 29.99 | 9.03 |
| 09:05 | 18.05 | 5.42 |
| 09:10 | 18.47 | 5.55 |
| 09:15 | 11.29 | 3.39 |
| 09:20 | 20.42 | 6.14 |
| 09:25 | 29.92 | 9 |
| 09:30 | 8.25 | 2.47 |
| 09:35 | 6.04 | 1.81 |
| 09:40 | 6.63 | 1.99 |
| 09:45 | 5.76 | 1.72 |
| 09:50 | 5.63 | 1.69 |
| 09:55 | 5.93 | 1.78 |
| 10:00 | 6.24 | 1.87 |
| 10:05 | 4.49 | 1.35 |
| 10:10 | 4.25 | 1.27 |
| 10:15 | 4.27 | 1.28 |
| 10:20 | 4.53 | 1.36 |
| 10:25 | 4.25 | 1.27 |
| 10:30 | 4.13 | 1.24 |
| 10:35 | 4.85 | 1.45 |
The exact SQL behind every number
SELECT
formatDateTime(toStartOfInterval(toTimeZone(sip_timestamp, 'America/New_York'),
INTERVAL 5 MINUTE), '%H:%i') AS et_time,
round(avg(toFloat64(ask_price - bid_price)) * 100, 2) AS avg_spread_cents,
round(avg(toFloat64(ask_price - bid_price)
/ ((toFloat64(ask_price) + toFloat64(bid_price)) / 2)) * 10000, 2) AS avg_spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'AAPL'
AND sip_timestamp >= toDateTime('2026-09-16 13:00:00', 'UTC')
AND sip_timestamp < toDateTime('2026-09-16 15:00:00', 'UTC')
AND bid_price > 0
AND ask_price > bid_price
GROUP BY et_time
ORDER BY et_timeThe 09:00 bucket, well before the bell, averaged 29.99 cents of quoted spread. By the 10:55 bucket the same quote averaged 3.67 cents, or 1.1 basis points. A market order sent during the early bucket pays the early number. Nothing malfunctioned. The order crossed the spread that existed at that moment. The same shape appears after a trading halt, where the reopening auction can carry an indicative price range many cents wide. Why spreads widen at the open takes the pattern apart bucket by bucket.
Was the quote you clicked even the real quote?
Two mechanics routinely put a different number on the screen from the one the order met.
- Delay. A free quote feed is often fifteen minutes stale, and a fifteen minute old price in a moving stock is a historical fact rather than an executable one. See why stock quotes are delayed 15 minutes.
- Odd lots. An order for fewer than 100 shares does not qualify for the protected quote, so an attractive price for 37 shares may never have entered the NBBO at all. Why odd lots do not set the NBBO covers that gap, and what the NBBO is defines the quote itself.
Where can I see my broker's real fill prices?
Brokers and market centers publish monthly execution statistics under Rule 605, including the effective spread: what orders actually paid measured against the quote at arrival, rather than what the quote advertised. Rule 606 covers where those orders were sent. The pair is the closest thing to an audited scorecard on fill quality, and both are public. Rule 605 and 606 execution reports walks through reading one.
The rule of thumb that falls out
Market orders are cheap in one corner of the market and costly everywhere else. The cheap corner looks like this:
- a name that quotes a penny wide for hundreds of shares at a time
- an order small enough to clear inside the size displayed at the quote
- the middle of a regular session, away from the open, the close, and any reopening auction
- no halt or pending corporate event in the name
Step away from any of those and the fill price moves with it.
FAQ
Does a market order always fill at the ask price?
No. A buy market order starts at the best offer, and a small retail order is frequently filled a fraction of a cent inside it by a wholesaler. A larger order can fill well above the offer once it exhausts the shares displayed there.
Why did my market order fill at a worse price than the quote I saw?
Usually one of two mechanics: the size displayed at that price was smaller than the order, or the quote moved in the interval between the click and the order's arrival. A delayed or odd-lot quote produces the same impression.
Can I set a maximum price on a market order?
No. A market order carries no price limit by construction. A limit order is the instrument with a ceiling on a buy or a floor on a sell, and it trades only at that price or better.
What is slippage on a market order?
Slippage is the gap between the quoted price at the moment the order was sent and the volume weighted average price the order received. It grows with order size and with the width of the spread at arrival.
What happens to a market order sent before the market opens?
It waits. A market order entered outside regular hours queues for the opening auction rather than trading in the premarket, and it prints at whatever single price that auction sets.
Data notes
Every panel pins to the trading day of September 16, 2026, so the figures stay fixed as the tape moves on. The spread panels average the quoted bid and offer across each quote update inside the stated window and drop crossed or one-sided quotes. The sub-penny panel flags any print whose price carries a fraction of a cent. Prints are counted as reported, with no filtering by trade condition, so the counts include every sale printed in the window.
Every panel here ships with the exact SQL beneath it. To put the same spread and print size questions to a different name, or a different hour, ask them in plain English on the Strasmore terminal.