Set Up Your Polymarket Arbitrage Scanner
A step-by-step walkthrough for the cross-platform arb scanner. Monitors Polymarket + Kalshi simultaneously, calculates profit after fees, and alerts you the moment a real opportunity opens. Zero directional risk required.
What the Arb Scanner Does
PM-02 watches Polymarket and Kalshi simultaneously, every 3 minutes. When the same event is priced differently across platforms — and the gap is large enough to profit after fees — it fires a Telegram alert with exactly what to buy on which platform.
With AUTO_EXECUTE=true it places both legs simultaneously, locking in the profit before the window closes.
- 1
Every 3 minutes
Fetches all active markets from both Polymarket and Kalshi. Uses fuzzy AI matching to find the same event on both platforms.
- 2
Calculates net profit after fees
Accounts for Polymarket's ~2% maker fee and Kalshi's 7% profit fee. Only alerts on opportunities where net profit > your minimum (default 3¢).
- 3
Fires Telegram alert
Tells you exactly: buy YES on [platform] @ [price] + buy NO on [platform] @ [price]. Net profit: $X on $Y deployed.
- 4
Optional auto-execute
Places both legs simultaneously the moment the arb is detected. No manual action needed.
What You Need
Accounts
- Polymarket account with USDC funded — same as PM-01
- Kalshi account with USD funded — kalshi.com (US-regulated, takes 5 min)
- Telegram bot — same bot as PM-01 if you have it
Capital strategy
Unlike PM-01, arb requires capital on both platforms simultaneously. Split your capital between Polymarket and Kalshi. The scanner handles one side on each per arb.
Install & Configure
Unzip PM-02 and run the setup wizard:
cd pm-02-arb-scanner
python3 setup.py
The wizard will ask for:
- Polymarket API Key, Secret, Passphrase, Private Key, Wallet address
- Kalshi API key — get from kalshi.com → Account → API Keys
- Telegram bot token + chat ID
- MIN_SPREAD — minimum net profit to alert (recommend 0.03)
- MAX_ARB_POSITION — max $ per side per arb (recommend 100-500)
- AUTO_EXECUTE — true/false (start false, go true when comfortable)
Test Your Connection
python3 src/test_connection.py
Expected output:
✓ Polymarket public API reachable
✓ CLOB API key valid
✓ Kalshi API key valid and markets reachable
✓ Telegram message sent — check your phone!
✓ POLYMARKET_API_KEY is set
✓ KALSHI_API_KEY is set
All checks passed. Ready to scan for arbs.
Dry Run — Watch It Find Arbs
python3 src/arb_scanner.py --dry-run
You'll see the scanner working in real time:
[CYCLE 1] 00:14:22
Fetching Polymarket... 187 markets
Fetching Kalshi... 143 markets
Matching markets... 31 pairs found
[DRY RUN] ARB FOUND
Polymarket: Will Fed cut 25bps? → YES @ 44¢
Kalshi: Will Fed cut 25bps? → YES @ 37¢
Action: BUY YES on Kalshi @ 37¢ + BUY NO on Polymarket @ 56¢
Spread: 7¢ | Net profit after fees: $55 on $1000
Match score: 0.91
→ Would execute (dry run — skipped)
Next scan in 3 min.
Go Live + 24/7 Daemon
Drop the dry-run flag:
python3 src/arb_scanner.py
Install the 24/7 background service:
./scripts/setup_launchd.sh
Monitor the log:
tail -f /tmp/arb_scanner.log
PM-01 takes directional positions with edge. PM-02 takes zero-risk arb positions. Independent profit streams, same platform.