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:Accounting for fees
Raw spreads overstate the opportunity. You need to subtract fees from both sides:| Platform | Maker fee | Taker fee |
|---|---|---|
| Kalshi | Free | 0.07 × price × (1 - price), max $0.0175 |
| Polymarket | Varies | Varies, generally low |
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:- 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:
| Score component | Weight | What it measures |
|---|---|---|
| Spread score | 40% | Size of the price gap |
| Liquidity score | 20% | Available depth on both sides |
| Match confidence | 20% | How certain the event match is |
| Execution score | 20% | Practical executability |
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_guidanceendpoint 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.