Tuesday, July 28, 2026

I matched 38 markets that trade on both Polymarket and Kalshi. 14 of them don't actually resolve the same way.

The cross-venue arb posts ("same question, 15 points apart, free money") are usually wrong, and not because of fees or slippage. They're wrong because the two venues wrote different rulebooks for what looks like the same question.

I pulled 38 pairs that are live on both venues right now and read both sets of resolution criteria. 24 resolve on the same outcome. 14 don't. That's more than 1 in 3.

One thing about the numbers below before I start: every gap is the executable gap, computed against the live bid/ask you'd have to hit: buy YES on one venue at its ask, buy NO on the other at its bid-implied ask, which pays $1 either way it resolves. It is not the last-trade print each venue puts on its ticker, which is where most of the fake arb screenshots come from. Quotes are from ~5:20pm ET today and they move.

1. Zelenskyy and Putin: 73 points apart, worth nothing.

  • Polymarket, "Will Zelenskyy and Putin not meet before 2027?" YES 86¢ (bid)
  • Kalshi, "Will Zelenskyy and Putin speak? Before 2027" YES 13¢ (ask)

Two problems stacked on top of each other.

First, the legs are inverted. The Polymarket market is a location market. Its rules say it "will resolve according to the location of the next meeting between Volodymyr Zelenskyy and Vladimir Putin," and "If no meeting takes place by December 31 ET, this market will resolve to 'No meeting before 2027'." The leg quoted above is the no-meeting leg. Polymarket's 86¢ and Kalshi's 13¢ are prices on opposite events. Flip Polymarket's polarity and it implies 12 to 14¢ that they do meet, against Kalshi's 12 to 13¢. The books basically overlap. The 73-point gap is an artifact of reading YES on one venue as YES on the other.

Second, even after you flip it the outcomes still differ. Polymarket: "A meeting is defined as any encounter where Zelenskyy and Putin are both present and interact with each other in person." Kalshi: "If Volodymyr Zelenskyy and Vladimir Putin meet (including phone calls) before Jan 1, 2027, then the market resolves to Yes," and its terms add that "Virtual meetings or calls where both parties speak directly to each other will also count." A phone call resolves Kalshi YES and does nothing at all on Polymarket.

2. Hantavirus: the two rulebooks contradict each other outright.

  • Polymarket, "Hantavirus pandemic in 2026?" YES 3.4¢ (ask)
  • Kalshi, "Will WHO declare Hantavirus a Public Health Emergency of International Concern this Year?" YES 5¢ (bid)

Polymarket resolves YES only if the WHO "explicitly characterizes" hantavirus as a "pandemic," and then rules the other thing out by name: "A Public Health Emergency of International Concern (PHEIC) alone will not qualify unless it is also described as a pandemic."

Kalshi's entire contract is that PHEIC: "If Hantavirus becomes a Public Health Emergency of International Concern in 2026, then the market resolves to Yes."

The exact event Polymarket names as insufficient is the whole of the Kalshi market. A WHO PHEIC with no pandemic language pays Kalshi YES and Polymarket NO. The executable gap here is only 1.6 points, which is the point I'd make: small gaps are not automatically the safe ones. There is no gap at which this pair is a lock, because the two legs can disagree about the same real-world event.

3. Bitcoin $67,500 in July: same number, different measuring stick.

  • Polymarket, "Will Bitcoin reach $67,500 in July?" YES 9¢ (bid)
  • Kalshi, "How high will BTC get in July? Above $67,500.00" YES 9¢ (ask)

Same threshold, same month, same YES semantics, and an executable gap of 0.0 points. But the measurement is built differently.

Polymarket resolves YES if "any Binance 1 minute candle for BTC/USDT during the month specified in the title... has a final High price equal to or greater than the price specified in the title." One exchange, one pair, one wick, no smoothing.

Kalshi resolves off the CF BRTI: "At each minute throughout the market duration, a settlement value is calculated using every minute-by-minute CF BRTI price for BTC. For each of these individual minute-by-minute checks, the top 20% and bottom 20% of the cumulative dataset are removed before calculating the average of the remaining values." Their own terms say the method "reduces the impact of extreme price spikes or drops."

Different price source, and a much looser trigger: a single one-minute wick on one exchange's USDT pair versus a multi-exchange index that throws out the top 20% of its own sample before averaging. Whatever you think the right spread between those two contracts is, it probably isn't zero, and zero is where they're trading. (This pair expires Aug 1, so it's a short-lived example, but it's live right now.)

4. Trump out: same event, one leg gets an extra year.

  • Polymarket, "Trump out as President before 2027?" YES 8¢ (ask). Resolves if he "resigns or is removed as President or otherwise ceases to be the President of the United States for any period of time by December 31, 2026, 11:59 PM ET"
  • Kalshi, "Will Donald Trump leave office before 2028?" YES 15¢ (bid). "If Donald Trump leaves office before January 1, 2028, then the market resolves to Yes"

7-point gap, and all of it is the extra twelve months. Same outcome, different window. The gap prices time, not disagreement.

The four flavors

Reading all 38 pairs, the mismatches sort into four buckets, which is how the rows ended up tagged:

  • comparable: identical outcome and window, so the gap is a real comparable. 24 of 38.
  • different outcome: the two contracts resolve on different events (Zelenskyy, hantavirus). 9 of 38.
  • different horizon: same event, different deadline (Trump). 4 of 38.
  • different structure: same event and window, different measurement (the BTC one). 1 of 38.

The point isn't that cross-venue gaps are all fake. Some are real. When both legs resolve on the identical outcome and window, the gap is a genuine comparable. It's that you can't tell which is which from the price alone. You have to read the rules.

That's what I built. oddsgap pulls the live book from both venues, matches the pairs, and puts the executable gap next to both resolution rulebooks so you can read them side by side, with a parity badge on every row. Non-comparable rows still show their gap, struck through. I'd rather show you the number and tell you it's fake than hide it.

Caveats, since you'll find them anyway: the matching is hand-curated, not automated, which is why it's 38 pairs and not 3,800. The executable gap is top of book, gross of venue fees, and doesn't model quoted size, so it's an upper bound on a real fill and never better than what the screens say. And a couple of the "comparable" tags are judgment calls. The note on each row says which ones I'm less confident about. Every market above is named as it appears on its venue, so you can pull the rules at the source instead of taking my word for any of this.

Free tier is the top 5 comparable gaps by executable edge. There's a $9/mo Pro tier for the full table if you want it.

Tool: https://oddsgap.io

I built this. Posting it here because the resolution-rules problem comes up in this sub constantly and I couldn't find anything that just puts both rulebooks next to each other. Happy to hear what's wrong with it, especially if you think one of my "comparable" tags is wrong.


No comments:

Post a Comment