# How to Find Mispriced Markets on Polymarket and Get Paid

Spot the Polymarket prices that are wrong and size up only when the math says the trade pays you after the fee. Four steps, estimate, compare, subtract the fee and decide, plus a 15-line Python check turn any market into a TRADE or SKIP call in about two minutes.

From the book: [Polymarket Profits](https://youcanbuildthings.com/books/polymarket-profits.md)

Web page: https://youcanbuildthings.com/articles/how-to-find-mispriced-markets-on-polymarket

Hello builders,

The traders who win on Polymarket get paid for one thing: finding prices that are wrong and buying them before the market fixes itself. Every share costs between 1 and 99 cents and pays $1.00 or nothing, so the price is the crowd's probability, and your money comes from the gap between that number and a better one. This is how to find mispriced markets on Polymarket in four steps: estimate, compare, subtract the fee, decide. A small Python check does the fee math for you.

The crowd you're trading against is mostly guessing. Researchers at Yale and London Business School studied 1.72 million Polymarket accounts and $13.76 billion of trading, and the abstract of their paper puts the finding bluntly:

> We show instead that accuracy is driven by a small minority of informed traders. ... The remaining majority does not produce accuracy; rather, it funds it.

([Gómez-Cram, Guo, Jensen and Kung, "Prediction Market Accuracy: Crowd Wisdom or Informed Minority?"](https://doi.org/10.2139/ssrn.6617059))

![How to find mispriced markets on Polymarket: of 1.72 million accounts and $13.76 billion traded, each dot is 1 in 100 accounts: 3 skilled winners, 29 lucky winners, about 2 in 3 lost; your EV after the fee: Yes price $0.35, your estimate 55%, EV after fee about +$0.19 a share](https://youcanbuildthings.com/images/articles/how-to-find-mispriced-markets-on-polymarket/polymarket-skilled-winners-and-ev-after-fee.png)

Read the dots as 100 accounts. About 3 won through skill, 29 made money in a way that looked like chance, and about 2 in 3 lost. The paper measures who wins, and the routine below is the book's bet on how to trade like the few who do.

## Estimate before you look

We read the question and the resolution rules, and make our own estimate before we look at the price. Once you've seen 38 cents, your estimate drifts toward 38 cents. I use at least two of these four ways to estimate from the book:

1. **Base rate.** How often does this kind of event happen? If the Fed cut at 3 of its last 20 meetings, you start at 15% and move from there.
2. **Break it into parts.** For a council to approve a stadium deal this month, the vote has to be on this month's agenda, a majority has to be committed, nothing can delay it, and the financing has to be final. If the published agenda doesn't list the vote, one of the four already failed.
3. **Find the closest match.** No base rate for this exact person or company? Use the nearest group of similar cases.
4. **Argue the other side for 5 minutes.** Search for reasons you're wrong. If your number survives, keep it.

Then we compare. Your edge is your estimate minus the price, in points. For a share that pays $1.00, the expected value per share before fees is that same gap: at a Yes price of $0.35 and an estimate of 55%, EV = 0.55 × $0.65 − 0.45 × $0.35 = +$0.20 a share, or $20 on 100 shares. The taker fee comes out next, rate × p × (1 − p). At a 0.05 rate that's 0.05 × 0.35 × 0.65, about $0.011, so we keep about +$0.19, the number on the picture. We only trade when the edge is 5 points or more and the EV is still positive after the fee.

Save this as `ev.py`, then replace the four example markets at the bottom with your own. The `estimate` is always your Yes probability, even when you buy No:

```python
def price_check(question, yes_price, estimate, fee_rate, side="YES"):
    """Edge and EV per share after the taker fee, then TRADE or SKIP."""
    price, p = yes_price, estimate
    if side == "NO":                      # buying No: flip both
        price, p = 1 - yes_price, 1 - estimate
    edge = p - price                      # also the EV per share before fees
    fee = fee_rate * price * (1 - price)  # Polymarket taker fee per share
    net = edge - fee
    verdict = "TRADE" if edge >= 0.05 and net > 0 else "SKIP"
    print(f"{verdict}  {side} at ${price:.2f}  edge {edge*100:+.0f} pts  "
          f"EV after fee {net:+.3f}/share  | {question}")

# your four markets: Yes price, YOUR estimate, the market's fee rate
price_check("Layoffs before Friday?", 0.35, 0.55, 0.05)
price_check("Yankees win tonight?", 0.62, 0.70, 0.05)
price_check("Stadium deal approved this month?", 0.38, 0.18, 0.04, side="NO")
price_check("Longshot priced at 5 cents?", 0.05, 0.03, 0.05)
```

Run `python3 ev.py`:

```
TRADE  YES at $0.35  edge +20 pts  EV after fee +0.189/share  | Layoffs before Friday?
TRADE  YES at $0.62  edge +8 pts  EV after fee +0.068/share  | Yankees win tonight?
TRADE  NO at $0.62  edge +20 pts  EV after fee +0.191/share  | Stadium deal approved this month?
SKIP  YES at $0.05  edge -2 pts  EV after fee -0.022/share  | Longshot priced at 5 cents?
```

The first three are the book's worked examples, including the stadium deal at 38 cents, where an 18% estimate makes No at $0.62 worth +$0.19 a share. The fourth is the longshot trap: a 5-cent share that pays 20x looks exciting, and if the real chance is 3% you lose 2 cents on every share.


## Read the fee per market

The fee rate changes the answer, so we read it per market. [Polymarket's fee page](https://docs.polymarket.com/trading/fees) gives the formula as "fee = C × feeRate × p × (1 - p)" and says "Makers are never charged fees. Only takers pay fees." The taker rates it lists:

- **Crypto 0.07**
- **Sports, Economics, Culture, Weather and Other 0.05**
- **Politics, Finance, Tech and Mentions 0.04**
- **Geopolitics 0**, because "Geopolitical and world events markets are fee-free."

The rate on a live market can sit below that list. When I pulled the busiest markets, the Ballon d'Or markets carried a `feeSchedule` rate of 0.03 against 0.05 for Culture, so the worked examples above, which use the listed rates, run slightly conservative. One public request gives the rate for any market, using the slug from its address:

```bash
curl -s "https://gamma-api.polymarket.com/markets?slug=will-kylian-mbapp-win-the-2026-ballon-dor"
```

Look for `"rate"` inside `feeSchedule` in what comes back. A resting limit order pays nothing, which is worth a cent a share on every trade where you can wait.

As for how big an edge is worth the money, the book puts 1-5 points as barely worth it after fees, 5-15 points is where most good trades live, and 15+ is rare enough that you size up with Kelly and move fast, because a gap that big usually closes within hours. The rule of thumb in the book is that most days we look at 20-30 markets and trade none of them. We keep a journal of every estimate, and after 50 trades we check whether the 70% calls came in about 70% of the time.

Now go build something this weekend!

John Cook

---

Get the book: Polymarket Profits, $12.99 on Amazon: https://amzn.to/4taBIo7
