Polymarket Bot Tutorial · Chapter 19 of 32
Polymarket pays you every day just for keeping fair-priced limit orders resting in the book, whether or not they ever trade. This chapter explains how that reward really works, the scoring math, what you can honestly expect to earn, and how to farm it with a bot without taking on inventory risk.
Liquidity rewards in 60 seconds
Imagine a market stall that pays you a small daily fee just for showing up and chalking a fair price on your board, even on days you sell nothing. That is Polymarket's liquidity rewards program in one sentence. You rest limit orders near a market's middle price, and Polymarket pays you every day for being there, helping the market stay liquid. Your orders do not need to trade. That last part is the whole point, and it is the thing most guides get wrong.
Because you get paid for resting, not for trading, a fill is not the goal here - it is a side effect you would usually rather avoid, since a fill leaves you holding a position that can move against you. So the game is simple to state and interesting to solve: earn the reward score while getting filled as little as possible. Here is what this chapter covers.
- The two reward programs people mix up (and which one this is)
- How the per-minute reward score is calculated
- What you can honestly expect to earn
- How to find eligible markets from the API
- The farming strategy: earn the score, dodge the fills
- A minimal, correct farming bot you can build on
Two programs people confuse
Before any math, clear this up, because getting it wrong wastes capital. Polymarket runs two separate maker programs, and they pay in opposite ways.
| Liquidity Rewards (this guide) | Maker Rebates | |
|---|---|---|
| You get paid for | Orders resting near the midpoint, in the band | Orders that actually fill |
| Do orders need to trade? | No - resting alone earns | Yes - no fill, no rebate |
| Paid from | A daily reward pool per eligible market | A share of the taker fee on your filled order |
| How you maximise it | Rest near mid, large size, both sides, avoid fills | Get filled often |
| Main risk | Accidental fills and inventory | Adverse selection on every fill |
The old version of this page (and a lot of the internet) described liquidity rewards as a cut of taker fees on filled orders. That is the maker rebates program, not this one. Liquidity rewards pay you to sit there. Keep the two straight and the rest of this guide makes sense.
How the reward score works
Every minute, Polymarket takes a snapshot of the order book and scores each qualifying order. An order qualifies when it meets two conditions: it rests within the market's max-spread band of the midpoint (the midpoint is just the halfway price between the best bid and best ask), and it is at least the market's minimum size. Both numbers are set per market.
The score for one order is:
S(v, s) = ((v - s) / v)^2 * b
v = the market's max reward spread, in cents (rewardsMaxSpread)
s = how far your order sits from the midpoint, in cents
b = an in-game size and rate multiplier (bigger size scores more)
Read that formula in plain English: the closer you rest to the midpoint (small s), the higher your score, and it climbs fast because of the square. Sit right at the band edge and your score is near zero; sit near the middle and it is near its max. Bigger orders score more through the b term. Add up your scores across every minute of the day, and that is your total for the market.
So it helps to think of your daily score as three things multiplied together:
- Size - how many shares you rest (must clear the market's minimum).
- Time in the book - the share of the day your order is actually live. An order up 20 of 24 hours runs at roughly an 83% time factor; one that keeps getting cancelled scores far less.
- Closeness to the midpoint - the
((v-s)/v)^2term above. An order at the best price earns far more than one parked deep in the band.
That is why a steady, always-on bot beats hand-quoting: uptime is a direct multiplier on what you earn.
Your payout is then a simple split: your total score divided by every maker's total score in that market, multiplied by the market's daily reward pool. You are not competing against a fixed rate; you are competing for slices of a fixed pie against the other makers in the same book.
One rule changes the whole strategy. If you quote only one side (say, only YES), your score is cut to one third of the two-sided rate while the midpoint sits between 0.10 and 0.90. And if the midpoint drifts below 0.10 or above 0.90, one-sided liquidity earns nothing at all - only two-sided quotes qualify out there. So a one-sided farmer should stick to mid-priced markets and accept roughly a third of the reward for the same capital.
What you actually earn - the honest math
Here is the part no one likes to say plainly: your reward is your slice of a shared pool, so two numbers decide everything - how big the pool is, and how crowded the market is.
- The pool is the market's daily reward rate. Pull it live; it ranges from a few dollars a day to hundreds.
- The crowd is everyone else's score. In a mobbed market your share can round to almost nothing even with good placement. In a quiet, well-paying market the same capital earns far more. Less crowded is the single biggest lever you have.
Worked example. Say a market pays a $200 daily pool, and the total maker score in the book works out so your resting size is about 1% of it. Two-sided, you would earn roughly $2 that day. Quote one side only and the one-third penalty drops you near $0.67 - and because Polymarket only pays a market once your daily total there clears $1, that one-sided day might pay you nothing at all. Spread the same capital thinly across five crowded markets and you can end the day under the minimum in every one. Concentrate it into one or two quiet, well-paying markets and you clear the minimum and earn more per dollar.
So treat liquidity-rewards farming as a modest, market-by-market yield, not a salary. The realistic edge comes from picking uncrowded, well-paying markets and resting two-sided near the mid - not from cranking up size in whatever market is loudest.
For a sense of scale, here is what the live program actually looked like in June 2026, pulled straight from the rewards API:
- Around 7,300 markets were paying rewards at once, sharing roughly $200,000 per day in total.
- The pools are wildly uneven: the single biggest paid about $10,000/day, while the median market paid about $5/day. Only about 370 markets paid $100/day or more - those are the ones worth your capital.
- The most common reward band was 4.5 cents and the most common minimum size was 50 shares.
That spread is the whole story: chase the few hundred well-funded, uncrowded pools, not the thousands paying pocket change. For context on the other end, professional makers running serious size on $100k+ daily-volume markets have reported on the order of $150 to $300 a day per market in spread plus rewards combined - but that is full market making with real inventory risk, not passive resting, and it is not where a small account starts.
Find eligible markets from the API
Never assume a market pays. Pull the live list, which returns each market's reward band, minimum size, and daily rate, so you can rank by reward-per-dollar before you commit capital.
GET https://clob.polymarket.com/rewards/markets/current
# returns, per market:
# rewards_max_spread -> the band, in cents (your "v")
# rewards_min_size -> minimum order size to qualify
# total_daily_rate -> the daily pool you are splitting
# paginate with next_cursor until it returns the end sentinel
Join each entry to its market metadata (price, slug, tokens) from the Gamma API, then rank by daily rate divided by the capital you would need to rest the minimum size at the current price. The cheapest, least crowded, best-paying markets are the ones worth your capital.
The strategy: earn the score, dodge the fills
Because resting earns and fills do not, a good farmer rests close enough to the midpoint to score well, but shelters behind larger orders so the actual trades hit someone else first. When the book moves, you reprice in under a second to stay inside the band. The mindset is the opposite of a normal trader: you want to be present and quoting, not matched.
The one risk that matters is an accidental fill during a price move. If the midpoint slides from 0.55 to 0.42 over an hour, your bid can fill repeatedly while your ask sits untouched, and you end up long a pile of shares above the current price. None of that was the goal. Guard against it like this:
- Hard inventory cap - stop quoting the side you are already too long on.
- Immediate exit on any fill - the moment you get filled, post an exit order for the exact size, so inventory never sits unmanaged.
- Kill switch - if the midpoint moves more than your tolerance, or inventory blows past its cap, halt and flatten. The rewards are not worth riding a news move.
Code: a minimal rewards farmer
This is the smallest correct skeleton: it rests near the midpoint inside the band to earn the score, caps inventory, and exits any fill rather than chasing it. It does not try to get filled.
BAND_OFFSET = 0.01 # rest 1c off mid, inside the reward band
INV_CAP = 50 # max shares long or short before we stop that side
SIZE = 50 # at least the market's rewards_min_size
def farm_loop(token_id):
while True:
book = fetch_book(token_id)
mid = (book.best_bid + book.best_ask) / 2
inv = chain_balance(token_id) # current inventory
cancel_my_quotes(token_id)
# rest near mid to score; skip a side once we are too long/short on it
if inv < INV_CAP:
post_gtc(token_id, "BUY", mid - BAND_OFFSET, SIZE)
if inv > -INV_CAP:
post_gtc(token_id, "SELL", mid + BAND_OFFSET, SIZE)
# any fill is unplanned: exit it immediately, do not accumulate
if inv != 0:
flatten_at_touch(token_id, inv)
time.sleep(20) # reprice fast so we stay inside the band
Production additions you will want: skew the quotes when inventory builds, pause around scheduled news, confirm each market still qualifies on every rewards-API refresh, and reconcile the daily reward credits against your own log. Want this done for you, with the guards already built in? See our liquidity market maker tool - but you can absolutely build your own from this skeleton.
Key takeaways
- Liquidity rewards pay you for resting near the midpoint, not for trading. Fills are a risk, not a goal.
- Your payout is your score divided by everyone's in that market - so the least crowded, best-paying markets win.
- One-sided quoting earns a third in mid-priced markets and nothing outside 0.10 to 0.90. Quote two-sided, pick mid prices.
- A market only pays once your daily total there clears $1. Concentrate capital; do not sprinkle it thinly.
- This is not maker rebates (a taker-fee cut on fills). Different program, opposite mechanics.


