Prediction Market Arbitrage Explained
Arbitrage in prediction markets means locking in a profit that does not depend on the outcome. You buy a bundle of positions that, taken together, pays out more than it costs no matter what happens. The math is simple. Capturing it is not. This post covers the three real flavors of prediction market arbitrage, why each one is harder than the spreadsheet suggests, and where automation actually earns its keep.
The core idea: a dollar that costs less than a dollar
Every binary contract on Kalshi or Polymarket pays $1 if it resolves true and $0 if false. For a single market, YES and NO are the two sides of the same coin, so in an efficient book YES + NO = $1.00. When the two sides are quoted such that you can buy both for less than a dollar, you have an edge. One side will pay $1 at resolution. If the pair cost you $0.97, you booked $0.03 with zero outcome risk.
That is the whole game. Everything else is a variation on finding a set of contracts whose combined cost is below their guaranteed combined payout.
Type 1: within-market mispricing (YES + NO under $1)
The simplest case is a single market where the best YES ask plus the best NO ask sum to less than $1.00. Buy both, collect $1.00 at resolution. This shows up most on thin order books right after news, when one side reprices and the other lags.
The same logic extends to multi-outcome markets that are mutually exclusive and collectively exhaustive (exactly one option wins). If you can buy YES on every outcome for a combined cost under $1, exactly one resolves to $1 and the rest to $0, so you profit on the difference. Equivalently, on a clean two-sided market you can short the overpriced side: if YES + NO trades above $1, sell the bundle.
Type 2: cross-venue (same event, two exchanges)
The same real-world question often lists on both Kalshi and Polymarket. Because the two run separate liquidity pools, separate user bases, and reprice news at different speeds, their prices drift apart. You buy the cheap YES on one venue and the cheap NO on the other.
Concrete example. Kalshi YES at $0.45, Polymarket NO at $0.52. Combined cost $0.97, guaranteed payout $1.00, gross $0.03 per pair, about 3.1 percent. These gaps appear when one venue lags a data release while the other has already repriced, and the window often closes inside a minute as the slower book catches up.
Type 3: correlated and complementary markets
The hardest and least crowded flavor. Two or more markets are logically linked, so their prices must obey a constraint even though no single book enforces it. If a market 'Candidate wins state X' and a market 'Candidate wins the election' imply probabilities that violate the law of total probability, there is a combination of bets that pays regardless of outcome. The 2025 IMDEA Networks study ('Unravelling the Probabilistic Forest') formalized this, separating market-rebalancing arbitrage (within one market or condition) from combinatorial arbitrage (across logically dependent markets), and documented nearly $40 million in arbitrage profits on Polymarket between April 2024 and April 2025 across 86 million bets. The bulk of it, roughly $29 million, came from rebalancing multi-condition NegRisk markets, not from simple two-number gaps.
Combinatorial edges tend to be larger and live longer than the simple ones, because spotting them requires modeling the logical relationship between markets, not just diffing two numbers. That is exactly why fewer players compete for them.
Why it is hard
On paper every arb is free money. In practice four frictions eat most of it, and the fourth can take more than the trade was worth.
- Fees. Kalshi charges takers round-up(0.07 x contracts x P x (1-P)), which peaks near 1.75 cents per contract at the $0.50 midpoint and falls toward the wings. Polymarket now charges per-category taker fees that peak around 1.80 percent at the $0.50 midpoint, highest on crypto and lowest on sports, with only geopolitics markets still free. A cross-venue arb pays fees on both legs, so a gross spread of a couple of percent is often gone after costs.
- Liquidity and slippage. The quoted top-of-book is not the price you fill at size. Slippage scales with how large your order is relative to the depth sitting on the book, and prediction-market books are often thin past the first few price levels. Size up past the resting liquidity and your edge evaporates into the walk down the book. Always price the fill, not the top quote.
- Timing and capital lock. Windows last seconds. Worse, capital is not fungible across venues. Polymarket settles in USDC on-chain with near-instant withdrawals, while Kalshi runs USD over ACH that can take one to three business days. You cannot instantly recycle winnings from one venue to fund the other, so each leg ties up its own stack.
- Settlement divergence. The killer. Two venues can word the 'same' contract differently, or key resolution off a different source or timestamp. In the 2025 US government shutdown markets, both venues tied resolution to OPM status, yet the timing and verification source still produced disputes about exactly when the shutdown counted as over. A cross-venue 'arb' whose legs can resolve on different criteria or different moments is not an arb. It is two separate bets, and they can both lose.
Add resolution timing risk. Kalshi typically settles within hours. Polymarket runs through UMA's optimistic oracle, which has a minimum two-hour liveness window if a proposed outcome goes uncontested, and stretches to days if a dispute escalates to a UMA token-holder vote. Your capital sits locked the whole time, and a disputed resolution is real tail risk.
Where automation earns its keep
Manual arbitrage on these markets is mostly a losing proposition now. By the time a human spots a 60-second gap, prices it against fees and slippage, and clicks both legs, a bot already took it. Automation helps in four concrete ways: it watches thousands of books at once, it prices the net edge after fees and expected slippage before sending an order, it fires both legs fast enough to avoid legging risk (filling one side and getting stranded on the other), and it enforces hard risk limits so a stale quote or a bad fill does not blow up the account.
This is also where most naive bots die. They model the gross spread and ignore settlement-rule divergence, ACH lockup, and the slippage curve at size. An arbitrage engine is only as good as the costs it refuses to ignore.
This is the class of strategy Banger is built to host. You write the edge as a Python strategy (banger.Strategy), paper-trade it against the live Polymarket and Kalshi order books to confirm the net spread survives fees and slippage, then run it live with a declarative risk envelope: per-trade cap, daily loss stop, max open positions, kill switch. Banger never custodies funds. You bring your own venue keys, and US persons trade legally via Kalshi and Polymarket US, both CFTC-regulated. Paper-first matters most here because the dangerous costs, slippage at size and settlement divergence, are invisible until you watch a strategy trade real books.
Bottom line
Three forms: YES + NO under a dollar within a market, the same event mispriced across venues, and logically linked markets that violate the math connecting them. The simple two are crowded and second-counted by bots. The combinatorial ones pay more and last longer because they take modeling to find. In every case, the spread you see is gross. The only number that matters is what survives fees, slippage, capital lockup, and the chance the two legs do not resolve the same way. Build for the net, paper-trade it against live books, and let automation handle the speed.