A limit buy that fills below the price you typed is working as intended: when it arrived, other people already had ETH offered for less, and your buy traded against those offers at their prices. In the example on this page, a buy of 1 ETH at 2,452.00 USDT on ETH/USDT shows as filled straight away, and Order History gives an average of 2,450.43, which is 1.57 USDT under the limit.
The limit only caps how bad the price can get. Binance's support article "What are Market Order and Limit Order, and How to Place Them?" says a limit order is executed only if the market reaches the set limit price "or better". For a buy, better means lower; for a sell, higher.
The fill price comes from the order that was already resting
Whether a limit order is a maker or a taker depends on what happens at submission. The Binance Spot API glossary describes LIMIT_MAKER as an order that can only be a maker order, meaning it "cannot immediately match and take". Turn that around: an order that matches a resting order the moment it arrives is the taker. A buy priced above the best ask is a taker the moment it lands.
A taker fills at the price levels of the orders it consumes. The Binance Spot API documentation has an example of exactly this: the full response for one sell order lists five entries under fills, priced 4000, 3999, 3998, 3997 and 3995. One order, five prices, each one a level of the book.
To be clear about the basis: the support article does not state in a single sentence that trades happen at the resting order's price. That conclusion is drawn from the "or better" wording together with the per-fill prices in the API example.
Buy 1 ETH with a 2,452 limit: what each ask level fills
Best ask 2,450.10 USDT with 0.3 ETH; next 2,450.40 with 0.5 ETH; then 2,451.00 with 1.0 ETH. Best bid 2,450.00.
All three levels are at or below 2,452, so the buy works up from the cheapest until it has 1 ETH:
| Fill | Price (USDT) | Qty (ETH) | Spent on this fill (USDT) |
|---|---|---|---|
| 1 | 2,450.10 | 0.3 | 735.03 |
| 2 | 2,450.40 | 0.5 | 1,225.20 |
| 3 | 2,451.00 | 0.2 | 490.20 |
| Total | avg 2,450.43 | 1.0 | 2,450.43 |
Only 0.2 of the 1.0 ETH at the third level is used. The fills add up to 2,450.43 USDT; divide by 1 ETH and that is the average. At the limit you could have paid up to 2,452.00, so the 1.57 USDT gap is where the "better price" came from.
A sell works the other way round. Price it below the best bid and it sells into the highest bids first, each fill at or above your limit and often above it.
This is the same walk through the book that a market order makes, with one floor added: a limit buy will not touch asks above 2,452, while a market order has no such stop. How to judge visible depth before a market order is covered in is the visible depth enough for this market order.
A limit that reaches two levels: the taken part is cheaper, the rest pays your price
Same book, different order: buy 2 ETH with a limit of 2,450.50.
The asks at 2,450.10 and 2,450.40 are within the limit, so 0.8 ETH fills at once for 1,960.23 USDT. The 2,451.00 level is above the limit and matching stops there. The remaining 1.2 ETH goes onto the book at 2,450.50, above the old best bid of 2,450.00, so it becomes the new best bid and the order shows as partially filled. What happens to that remainder is covered in only part filled: where did the rest go.
When sellers later hit those 1.2 ETH, they trade at 2,450.50, not lower. Now you are the maker and the other side is taking your price. Once everything fills, the total is 1,960.23 + 2,940.60 = 4,900.83 USDT, an average of 2,450.415. The average beats the limit, but only because of the first 0.8 ETH.
So an order that rests from the start fills at your price on every trade; it never gets the improvement. If resting is what you want and you never want to take, the Post Only option cancels the whole order at submission instead of letting it cross.
Where to check each fill: average in Order History, prices in Trade History
Binance's help page How to View My Spot Trading Activity? splits the panel under the spot chart into three tabs: Open Orders for orders still working, Order History for orders filled or canceled within a period, and Trade History for the trades that actually executed, with fee details. That page (updated 28 January 2026, read on 12 November 2026) limits Order History to the past six months; the window is Binance's to change, so the period menu on your own screen is the final word.
Take the first order. In Order History it is one row: price 2,452.00 (what you entered), filled 1, average 2,450.43. In Trade History, filtered by pair, side and time, it corresponds to fills at 2,450.10, 2,450.40 and 2,451.00. Do not insist on seeing exactly three rows. The API glossary describes an aggregate record that combines trades from the same taker order at the same time and price, and the help page does not say how the website groups rows. Reconcile on total quantity and total spent; when rows do not line up, see order history vs trade history.
Through the API, the order's cummulativeQuoteQty is, by the Spot API glossary's definition, the sum of price × qty over every fill. Divide it by executedQty to get the average: 2,450.43 ÷ 1 for the first order.
The average is worse than the limit: start with the order type
A buy averaging above its limit, or a sell averaging below, should not happen on a plain limit order under the "or better" rule. If you see it, check three things:
- The order type. A market order has no price floor. On a stop-limit, compare fills with the limit price, not the stop price: a sell with a 2,300 stop and a 2,290 limit that fills at 2,295 broke no rule. Why a triggered stop-limit can still leave you holding the asset is in the stop triggered, why do I still hold the asset.
- The number you are comparing with. The last price flickering on screen when you clicked is not your limit; the Price column in Order History is.
- The amount you received. Trade History shows which asset the fee was charged in and how much. Fees shrink what lands in your balance; they do not change the fill price. A sliver you cannot sell afterwards is a separate issue, covered in the quantity step leaves dust.
If all three check out and a plain limit order still shows a fill beyond its limit, take the order ID, pair, time and that Trade History row to Binance support. Only the platform can trace a single fill end to end.