← Back to blog

Are There Free Arbitrages Between Polymarket and Kalshi? We Checked — Mostly No

By the ZenHodl team — we run the trading bots this blog writes about, and the qualifying live-position record, including losses, is public with its admission rules at /results.

The pitch is seductive: the same MLB game has a moneyline on Polymarket and on Kalshi. If the two prices ever diverge, you buy the cheap one, sell the rich one, and collect the difference risk-free. Cross-venue arbitrage, all day long.

We built the dataset to test exactly this — a matched book: sampled top-of-book observations for the same dated game on both venues, stitched onto one timeline. Settled games carry outcomes; unresolved games remain explicitly unlabeled. Then we measured the quoted executable edge. The short answer: mostly no. And that null result is more useful to a serious buyer than a fairy tale, because it stops you from burning capital chasing a phantom.

First, the sample-size trap

Our matched MLB book over June 21–23, 2026 has 57,757 rows. It would be easy — and dishonest — to call that the sample size. It isn't.

Those 57K rows are mostly the same book re-snapshotted while nothing changed. Collapse to distinct quote-states and you have 3,198 of them — just 5.5%. Time-weight the exposure and you have roughly 530 observation-hours across 30 games (29 settled). That is the real N. Every statistic below is computed on quote-states and time-weighted exposure, never raw rows. If a vendor quotes you "57,000 data points of arbitrage analysis," now you know what that actually means.

The mid-gap looks juicy. The quoted cross-spread doesn't.

Polymarket and Kalshi mids agree to within 0¢ median / 0.53¢ mean — they track each other at 0.9964 correlation. So far, no free money: a tiny average gap is what an efficient pair of venues should look like.

The mistake is to "trade the mid gap." You can't trade the mid — you cross the spread on both venues. The honest executable edge is:

edge = max(kalshi_bid − poly_ask,  poly_bid − kalshi_ask)

Measured that way, the median quoted edge is negative (~−1¢): on a typical quote-state the displayed spread starts against you. After an assumed 3–5¢ round-trip cost floor, a positive quoted opportunity appears in only 0.39% of time-weighted exposure — and 92.8% of those rare >3¢ windows disappear by the next ~30-second sample. This dataset does not prove those quotes were simultaneously fillable.

Neither venue is even systematically sharper: per-venue Brier scores are 0.2141 vs 0.2142 — a tie to four decimal places.

Where the big gaps come from (and why they're a mirage)

The largest cross-venue gaps in the data — 10¢ to 37¢ — look like the jackpot. They aren't. They're lag and stale-quote artifacts: one venue's quote hasn't refreshed yet, the bid-ask on each side stays ~1¢, and the gap closes before you can act on it. It's the appearance of a dislocation, not tradeable liquidity. A backtest that naively books those gaps as profit is fooling itself.

What we're not claiming

Why an honest "no" is worth paying for

This is the whole value proposition of the matched book inverted. Most people building cross-venue strategies will spend weeks discovering what we just showed you: the obvious arb is competed away, and the scary-looking gaps are stale quotes. Knowing that before you wire up execution is worth real money — it saves you from the most expensive lesson in market-making.

You can reproduce all of this. The free score-synced matched-book sample is on Hugging Face and Zenodo (DOI 10.5281/zenodo.20816908) — one game per file, both venues, winner labeled. Load it, recompute the executable edge, and watch the arb disappear under cost.

For the capture method, see how to get historical Polymarket order-book data. To inspect the data used for this test, see the Polymarket–Kalshi MLB matched book.

Related reading

Get ZenHodl Weekly

One weekly email with live results, one model insight, and product updates.

Tuesday mornings. No spam.

Test cross-venue execution assumptions

Compare executable bids and asks across both venues instead of backtesting on mids.

Join the community

Discuss strategies, share results, get help.

Join Discord