← Back to blog

How Prediction Market Bots Work (And How to Build One)

By ZenHodl. Dataset documentation, research and model evaluations are linked in the article. A separate filtered ledger of bot-attributed trades, including losses and its admission rules, is public at /results.

If you've traded on Polymarket or Kalshi, you've noticed: some contracts seem mispriced. A team is winning by 15 points in the third quarter, but the market still has them at 72 cents. Your gut says it should be 85+.

That gap between what a contract should be worth and what the market is asking — that's called an edge. And building a bot to find those edges automatically is exactly what we do at ZenHodl.

The Core Idea

A prediction market bot does three things:

  1. Estimates fair probability — using a machine learning model trained on historical game data (score, time remaining, Elo ratings)
  2. Compares to market price — what Polymarket is currently asking for the contract
  3. Buys when there's a gap — if the model says 85% but the market asks 72 cents, that's a 13-cent edge

The key insight: the model must be independent from the market. If you train on market prices, your model just learns to agree with the market — and can never find mispricings.

Risk Filters, Not a Proven Edge

Not every disagreement between model and market is tradeable, so we filter on:

Correction (2026-09-25): these are risk-control filters, not a validated profitable threshold. A study of 2,584 of our own eligible live fills found no edge cutoff in the 0-30 cent range that clears positive expected value in 9 of 11 sports we trade, and our measured bought-side calibration gap is negative in every sport with enough fills to measure (roughly -7pp to -31pp). Treat the numbers above as a way to size risk down, not as evidence the bot is profitable above them.

Hold to Settlement

The simplest — and most profitable — strategy is to buy and hold to settlement. The contract resolves to $1.00 (win) or $0.00 (lose) after the game ends. No need to time exits or watch the market.

Buy at 72 cents, team wins → +28 cents profit. Buy at 72 cents, team loses → -72 cents loss.

At 71.9% win rate (a historical backtest average, not a live result), the arithmetic works out to 0.719 × 28 - 0.281 × 72 = -0.1c/trade before counting the edge. (Correction, 2026-09-25: an earlier version of this line said +0.1c; buying at 72c breaks even at a 72% win rate, so 71.9% is slightly below break-even.) That is the theoretical picture, not a promise. Backtest edges typically shrink by roughly half once you account for real spread, slippage, and adverse selection live, and our own measured bought-side calibration is currently negative across every sport we have enough fills to measure. For a bot-by-bot look at how this framework has actually performed live, including the losing stretches, see what's profitable across our 5 bots and 8 sports and our CLV retraction and honest aggregate.

The Tech Stack

A complete prediction market bot needs:

This is exactly what our 6-module course teaches you to build from scratch — or you can use our live API to get the signals without building.

Getting Started

The fastest way to see this in action:

  1. Try our free calculator — look up a game and see our fair WP next to the market price
  2. Download Module 1 free — build the ESPN data scraper yourself
  3. See live results — real trades from this system, updated weekly

Want to build your own bot? The ZenHodl course takes you from zero to a deployed sports betting bot in 6 notebooks. Works with Polymarket, Kalshi, DraftKings, and any sportsbook. $49 one-time, AI-friendly.

Related reading

Get ZenHodl Weekly

Dataset releases, research notes, and public results, including corrections.

Research and dataset updates from ZenHodl.

Want to build this yourself?

Work through ESPN data collection, Elo, probability modeling, calibration and backtesting in six Jupyter notebooks. Inspect the free first module and course requirements before buying.