Poly Research & Robotics
EXPLAINER · ~7 min read

How to Read a Polymarket Order Book (And Stop Overpaying)

The order book tells you exactly what you'll pay before you pay it. Here's how to use it.

By PR&R Research~7 min readUpdated 2026-05-04
How to Read a Polymarket Order Book (And Stop Overpaying)

Most traders on prediction markets look at the headline price and assume that's what they'll pay. It isn't. The price you see is the best available price for the first available share. The moment your order is larger than what's sitting at that level, you start paying more, and the order book is the only place that tells you by how much.

This is a walkthrough of how Polymarket's order book works, how to calculate your real average fill price before you submit anything, and how to wire that logic into a bot so it never silently overpays. Follow these steps top to bottom and you'll have the foundation for a disciplined, slippage-aware execution layer.


Step 01Understand the Two Sides of the Book

Every order book has two sides: the ask side (sellers listing what they'll accept) and the bid side (buyers listing what they'll pay). Before you place any trade, reading both sides tells you exactly how much you can buy or sell and at what price. Miss this, and you'll overpay without knowing it.

The ask side shows the price and quantity that market participants are willing to sell. If the ask is sitting at 69 cents per YES share, that's the cheapest price any seller is currently offering. The bid side works in reverse: it shows the highest price a buyer will currently pay, which is the ceiling you'll receive if you're selling into the market.

These two numbers, the best ask and the best bid, define the spread. The spread is a cost you pay on every round trip. Tighter spreads mean cheaper trading. Wider spreads, common in thin markets, mean you give up more edge just getting in and out.

Ask Side

Sellers listing prices they'll accept. You hit the ask when you buy. The best ask is the lowest price any seller is offering right now.

Bid Side

Buyers listing prices they'll pay. You hit the bid when you sell. The best bid is the highest price any buyer is offering right now.

On Polymarket

Pull both sides of the order book before sizing any order. The Polymarket API returns the full depth on each side. Don't just read the top-of-book price. Read the full ladder, because your actual fill price depends on how deep your order goes into it.


Step 02Read Ask Prices and Available Volume

The ask side tells you the price sellers want and how many shares they're offering at that price. Check the available volume before you buy so you know exactly how much you can spend without pushing your average cost higher than the headline price.

Here's a concrete example. The ask is 69 cents and there are 4,000 shares available at that level. That means you can deploy up to $2,760 (4,000 x $0.69) and every share fills at exactly 69 cents. The moment you try to spend $3,000, you've exceeded the available depth and your order starts consuming the next price level.

The number to watch is the total shares available at each level, not just the price. Price tells you the cost per share. Volume tells you how many shares you can buy before that price disappears.

4,000
shares at best ask (69¢)
$2,998
max spend at that level
70¢
avg fill if you spend $3,000
On Polymarket

Before your bot submits a buy order, read the ask ladder and sum available shares from the best ask upward until you hit your intended spend. If your order size exceeds the shares at the best ask, calculate the volume-weighted average price across the levels you'll consume. Set a maximum acceptable average fill price as a hard parameter. If the projected fill breaches it, reduce order size or skip the trade entirely.


Step 03Calculate Your Real Average Fill Price

When you buy more shares than are available at the best ask, your order spills into the next price level, then the next, and your actual average cost ends up higher than the headline price. This is called price impact, and ignoring it is how traders accidentally overpay.

Each price level in the ask side holds a fixed number of shares. Once those shares are exhausted, your order moves to the next level at a higher price. Your final average cost is the volume-weighted mean across every level touched.

In a liquid market, the effect is small. Buying $3,000 worth of shares when only $2,998 is available at 69 cents pushes your average fill to 70 cents. In a thin market, the same dynamic compounds fast. Buying into a market with ask levels stacked at 3.1, 3.2, 3.3, and beyond means sweeping through each level in sequence until your order is filled, landing you at an average cost of 3.4 even though the best ask was 3.1.

You take all the shares at 3.1, then move to 3.2, then 3.3, and you end up with an average price of 3.4.PR&R
# Simulate fill across order book levels
def simulate_fill(ask_levels, target_spend):
    total_cost = 0
    total_shares = 0
    for price, available_shares in ask_levels:  # sorted ascending by price
        if total_cost >= target_spend:
            break
        spend_here = min(available_shares * price, target_spend - total_cost)
        shares_here = spend_here / price
        total_cost += spend_here
        total_shares += shares_here
    avg_fill = total_cost / total_shares if total_shares > 0 else None
    return avg_fill, total_shares, total_cost
On Polymarket

Before your bot submits a market order, run this simulation against the live order book. Pull the ask-side levels, sort ascending by price, and iterate through them accumulating shares and cost until your order quantity is satisfied. Divide total cost by total shares to get the projected average fill price. If that number exceeds your edge threshold, either reduce order size to stay within the liquid portion of the book or skip the trade. A bot that skips this check will routinely pay 3.4 on trades it priced at 3.1.


Step 04Diagnose Liquidity Before You Size

Not all Polymarket markets are created equal. A liquid market lets you put in a large order and get filled near the price you expected. A thin market punishes you for size: the more you buy, the worse your average fill gets.

In a liquid market, 4,000 shares might sit at a single price level (69 cents), meaning you can deploy up to $2,998 and your average fill stays at 69 cents. Cross that threshold by even a dollar and your average ticks up to 70 cents. That's a one-cent slippage on a liquid market.

In a thin market, the same dynamic is far more punishing. A $200 order might walk the book through price levels at 3.1, 3.2, 3.3, and beyond, landing you at an average fill of 3.4. That's a 9.7% slippage cost on a single order. Any edge your model identified at 3.1 is gone.

Liquid Market

4,000 shares at 69¢. Spend $2,998 and fill at exactly 69¢. Spend $3,000 and average ticks to 70¢. Slippage is minimal.

Thin Market

Small clips at each level (3.1, 3.2, 3.3...). A $200 order lands at an average of 3.4. Slippage is 9.7% and eats your edge entirely.

On Polymarket

Before your bot submits a market order, query the order book and calculate the expected average fill price for the intended order size. If that average deviates from the best ask by more than your acceptable slippage threshold, either reduce order size to stay within the liquid portion of the book or switch to a limit order at a specific price level. Skipping this check means your bot will routinely overpay in thin markets, turning a positive-edge trade into a losing one.


Step 05Choose Between Market Orders and Limit Orders

A market order executes immediately at whatever price the order book offers. A limit order waits in the book until the market reaches your target price. Knowing when to use each one is the difference between paying what you planned and paying whatever the book gives you.

Market orders are fast and certain. You get filled immediately. The cost is that in thin markets you sweep through multiple price levels and your average fill is worse than the best ask. In liquid markets where depth is deep, the slippage is negligible and market orders are fine.

Limit orders are slower but precise. You name your price and the order sits in the book until the market reaches it. You might not get filled at all if the market never reaches your level. But when you do get filled, you pay exactly what you specified, no slippage.

  • Use market orders when the book is deep enough that your full order size fits within one or two price levels.
  • Use limit orders when the book is thin, when you want to enter at a specific price below the current ask, or when you want to exit at a specific profit target above your entry.
  • Before sending a market order, run the fill simulation from Step 03. If projected slippage exceeds 1-2 cents (or whatever threshold your strategy requires), switch to a limit order instead.
On Polymarket

A Polymarket bot needs to choose between market and limit orders on every trade. Build a decision function that reads the order book depth, calculates projected slippage for the intended order size, and routes to a limit order if slippage exceeds your threshold. For exit logic, pre-place limit sell orders at your target price rather than polling and reacting, so fills happen automatically without the bot needing to be active at the exact moment the price hits.


Step 06Schedule Entries with Limit Orders

A limit order lets you name your entry price and walk away. Instead of buying at whatever the market offers right now, you set a target price and the order executes automatically when the market gets there.

If the current ask is 2.7 and you want to enter at 2.5, set the limit at 2.5. The order sits dormant in the book until the ask drops to that level, then fires automatically. You don't have to watch the screen. You don't have to time the entry. The order book handles it.

This also protects against slippage in thin markets. Rather than sweeping multiple price levels and landing at an average you didn't intend, the limit order guarantees you pay no more than your specified price. The trade-off is that if the market never drops to 2.5, you don't get filled. That's a feature, not a bug, if 2.5 is the price where the trade makes sense.

On Polymarket

A Polymarket bot can use limit orders to implement disciplined entry rules without polling the order book in a tight loop. Set a buy limit at your model's fair-value estimate minus a margin of safety. The API handles execution when the price crosses that threshold. This removes the need for constant polling and guarantees the bot never pays more than the price at which the trade was originally justified.


Step 07Automate Exits with a Two-Leg Limit Structure

Once you've bought a position, you don't have to sit and watch the screen waiting to sell it. Set a second limit order at your target exit price and the market does the work for you.

The mechanics are straightforward. Buy shares at your entry price, then immediately submit a sell limit order at your target exit. If you want a 20-30% premium, calculate that price explicitly: buy at 0.50, set the sell limit at 0.60 to 0.65. The order sits in the book until the market reaches your price. If it does, you fill at exactly that level. If it doesn't, you still hold the position.

There's no slippage risk on the exit because you're the one setting the terms. You're the seller in the order book, not the buyer sweeping through levels. The only risk is that the market never reaches your target, in which case you need a separate rule for how long to hold or when to cut the position.

# After buy fill is confirmed
def place_exit_limit(entry_price, shares_filled, target_premium=0.20):
    exit_price = round(entry_price * (1 + target_premium), 4)
    order = {
        'side': 'sell',
        'type': 'limit',
        'price': exit_price,
        'size': shares_filled
    }
    return submit_order(order)  # submit via Polymarket API
On Polymarket

After a buy fill is confirmed, the bot calculates the target sell price (entry price multiplied by 1.20 or 1.30 for a 20-30% premium) and submits a sell limit order at that price via the API. The bot should monitor open orders and cancel or reprice the sell limit if the market moves against the position before the target is hit. This removes the need for manual monitoring and ensures the profit target is always live in the order book.


Step 08Run a Pre-Trade Order Book Check on Every Execution

Before you place any trade, pull up the order book. It shows you exactly how many shares are available at each price level, so you can see in advance whether your order size will push your average cost higher than you planned. This check should run every time, not just at startup.

Reading the totals and share counts before you submit tells you the maximum position size you can take without overpaying. If you want to buy 4,000 shares at 69 cents and there are exactly 4,000 shares offered at that level, your average fill is 69 cents and your total outlay is $2,760. Exceed that depth by even a dollar and your average cost ticks up.

In a thin market, slippage compounds fast. Buying into a market with only small clips available at each level can drag your average price from 3.1 to 3.2 to 3.3 and beyond, landing you at a blended cost of 3.4 when you expected 3.1. That's a 9.7% cost you didn't budget for.

observed Liquidity on thin markets shifts quickly. A book that showed 500 shares at the best ask when your bot started its cycle may show 50 shares by the time the order is submitted. Run the pre-trade check immediately before order submission, not at the start of the decision cycle.

# Pre-trade check: run immediately before every order submission
def pre_trade_check(ask_levels, target_spend, max_slippage_pct=0.02):
    best_ask = ask_levels[0][0]
    avg_fill, shares, cost = simulate_fill(ask_levels, target_spend)
    slippage = (avg_fill - best_ask) / best_ask
    if slippage > max_slippage_pct:
        return {'action': 'skip_or_reduce', 'projected_avg': avg_fill, 'slippage': slippage}
    return {'action': 'proceed', 'projected_avg': avg_fill, 'slippage': slippage}
On Polymarket

Wire this pre-trade check into every execution cycle of your bot. Query the ask-side depth, iterate through each price level and its available shares, accumulate cost until you hit your intended spend, and compare the blended average to your edge threshold. If the blended average exceeds the threshold, reduce order size or skip the trade. Don't run this check once at startup and cache the result. Liquidity shifts between cycles and a stale book read will cost you.


The order book is the most honest data source in any prediction market. It doesn't tell you what the probability is. It tells you what participants are actually willing to pay and sell for, right now, in real size. Reading it correctly before every trade is the single cheapest improvement most traders can make. For a bot, wiring in the pre-trade fill simulation and slippage check from Steps 03 and 08 is the foundation everything else builds on. Get that right first, then layer in the limit-order entry and exit logic from Steps 06 and 07. The strategy doesn't matter much if the execution is silently bleeding edge on every fill.

Join the lab

Join the Discord
Join Discord