Skip to main content

What this page covers

  • What prediction market arbitrage is and why it exists
  • How to calculate spreads and account for fees
  • Manual cross-platform scanning with Python
  • Automated scanning with the Rekko API
  • Execution risk and practical considerations
  • Real-time alerting via webhooks and SSE

What is prediction market arbitrage?

Prediction market arbitrage occurs when the same event is priced differently on two platforms. If Kalshi prices “Will the Fed cut rates?” at 62 cents YES and Polymarket prices the same event at 68 cents YES, you can buy YES on Kalshi at 62c and buy NO on Polymarket at 32c (1 - 0.68), locking in a 6-cent spread regardless of the outcome. This happens because Kalshi and Polymarket serve different audiences (regulated US traders vs global crypto traders), have different liquidity pools, and react to news at different speeds.

Calculating the spread

The basic spread between two platforms:
A market with Kalshi YES at 0.62 and Polymarket YES at 0.68 has a 6% spread. You profit by buying on the cheaper side and selling on the expensive side.

Accounting for fees

Raw spreads overstate the opportunity. You need to subtract fees from both sides:
Only pursue opportunities where net_spread > 0.

Manual approach: scanning both APIs

Without a unified API, you need to query both platforms, fuzzy-match events by title, and calculate spreads yourself:
This approach has problems:
  • Fuzzy matching is unreliable — false positives and missed matches
  • Different title formats across platforms
  • Two separate authentication flows
  • No scoring or ranking of opportunities
  • Must be rebuilt every time either API changes

Automated approach: Rekko arbitrage API

Rekko handles the cross-platform matching, spread calculation, fee accounting, and scoring:

Live scan

For the freshest data, use the live endpoint (takes 10-30 seconds):

Scoring breakdown

Use ?expand=scoring to understand why an opportunity ranks high or low:

Execution risk

Arbitrage in prediction markets is not risk-free. Key risks: Execution latency: Prices move while you place orders on two platforms. The spread can narrow or reverse before both legs fill. Liquidity gaps: The displayed price may not have enough depth for your desired size. Slippage on one leg erodes the spread. Settlement mismatch: Kalshi and Polymarket may resolve the same event differently due to different resolution sources or criteria. Capital lockup: Positions tie up capital until the market resolves, which can be weeks or months. The annualized return may be modest. Platform risk: Crypto-side positions carry smart contract risk. Regulatory-side positions carry compliance risk.

Mitigation strategies

  • Use Rekko’s execution_guidance endpoint to check spread depth before trading
  • Set a minimum net spread threshold (3-5% after fees) to absorb slippage
  • Start with smaller positions to test execution on both platforms
  • Prefer markets resolving within days rather than months for better capital efficiency

Real-time alerting

Webhooks

Register a webhook to get notified when new arbitrage opportunities appear:

SSE streaming

For real-time, subscribe to the price shift stream:

Complete arbitrage scanner

A runnable script that checks for arbitrage and reports findings:

What’s next

Build a trading bot

End-to-end bot with screening, analysis, and execution.

Kelly criterion sizing

Optimal position sizing for prediction market positions.

Webhooks and streaming

Real-time alerts for price shifts and new opportunities.

Arbitrage API reference

Full endpoint documentation for cached and live arbitrage.

Correlation analysis

Cross-market correlation for portfolio diversification.