DEV Community

Mr Zack
Mr Zack

Posted on

Finding risk-free arbitrage between Polymarket and Kalshi (and why most arb finders show you garbage)

Prediction markets exploded this year. The same event — a Fed rate decision, an NFL game, tomorrow's NYC high temperature — often trades on both Polymarket and Kalshi at different prices. Buy YES on one platform and NO on the other for a combined cost under $1.00 and you lock in profit no matter what happens. That's the theory.

The practice: most cross-platform arb tools show you a wall of 90% "edges" that are actually mismatched markets. "Fed rate at 1.75%" paired with "Fed rate above 2.75%". "Bank of England" paired with "Bank of Japan". "Will there be no Gemini release" paired with "When will Gemini release". You waste an evening checking them one by one, find zero real arbs, and never open the tool again.

I built a scanner that treats matching as the hard problem it is. Rules that killed the false positives:

  • Numeric strikes must agree. If both questions contain non-year numbers and they don't intersect, the pair is dead. 1.75 ≠ 2.75, ever.
  • Negation must agree. "No X before 2027" never pairs with "X before 2027".
  • Directions must not conflict. "Above" never pairs with "below"; "above" against no direction at all gets penalized — different payoff shapes.
  • Dates must be close. End dates more than 3 days apart = different markets, even with identical wording.
  • Edges above 15% are flagged suspicious, not celebrated. A real cross-platform gap is 0.3–6%. If a tool shows you 90%, it matched the wrong market.
  • Kalshi's 7% fee is subtracted before anything is called an arb. A 1.5% gross gap that dies after fees is not an opportunity.

On a full scan this morning — ~2,000 high-volume Polymarket binaries against ~60,000 open Kalshi markets — it matched 345 equivalent pairs and 25 of them were genuine net-positive arbs (0.3% to 6% after fees): Trump–Kim meeting, measles case counts, a couple of 2028 nominee long shots.

Both APIs are public and unauthenticated (Polymarket's Gamma API, Kalshi's trade API v2), so the whole thing is plain HTTP — no proxies, no keys, no headless browser. The matcher is ~200 lines of deterministic token/entity logic: alias table (BTC→bitcoin, Fed→federal-reserve), day-of-month detection so "Dec 31" doesn't become a strike price, inverted-index blocking so 2k × 60k comparisons stay under 200ms.

I packaged it as a pay-per-event Apify actor: Polymarket Kalshi Arbitrage Scanner. Run it on a 15–60 min schedule with minNetEdgePct: 0 and you only pay for rows that are actually actionable. If you trade weather markets specifically, the Kalshi Weather Markets Scraper is the companion piece.

Not financial advice — arbs decay in minutes, liquidity at the quoted ask matters, and you should always verify on-platform before putting money down. But if you're going to hunt cross-platform edges, at least hunt real ones.

Top comments (0)