Polymarket Kalshi Arbitrage Finder & Monitor
Pricing
Pay per event
Polymarket Kalshi Arbitrage Finder & Monitor
Finds matched markets across Polymarket and Kalshi and computes fee-adjusted, order-book-depth-aware arbitrage edges. Monitor mode emits only new or changed opportunities and can push webhook alerts.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Anton König
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 hours ago
Last modified
Categories
Share
Find matched markets across Polymarket and Kalshi and compute fee-adjusted, order-book-depth-aware arbitrage edges. Run it once for a snapshot, or on a schedule in monitor mode to get only new / widened / gone opportunities, optionally pushed to your webhook.
Built for people who actually trade prediction-market arbitrage, not for screenshots: every number is computed the way your fill would really happen.
Why this one (what incumbents get wrong)
- Fee-correct. Polymarket now charges taker fees on many markets (
fee = shares x rate x p x (1-p), rate 0.07 crypto / 0.05 sports / 0.04 finance & politics, read per-market from the API). Kalshi charges0.07 x C x P x (1-P)rounded up per fill. Most scanners compare raw prices and call it "arbitrage". This actor outputs the edge after both venues' real fees. - Depth-aware. Order books are walked with your configured stake (default $100 per leg) to get executable average prices, not top-of-book fantasy. Polymarket's CLOB returns asks in descending order; naive scanners read the worst price as the best. This actor sorts correctly.
- Match honesty. Cross-venue matching runs fuzzy scoring behind four hard gates: resolution-date window, numeric strike overlap, month-deadline consistency, opposite-direction words (
increasevscut,abovevsbelow) and event stage (on the ballotvspassesare different events). Every row carries itsmatch_confidence. Suspiciously large edges on imperfect matches are flaggedmatch_review_recommended, because a 20% "arb" is almost always a wrong pairing rather than free money. Known-bad pairs can be suppressed viaexcludePairIds.
What you get (dataset row)
{"pair_id": "516923__KXUSAIRANAGREEMENT-27-26SEP","question": "US-Iran Final Nuclear Deal by August 31, 2026?","match_confidence": 89,"pm_url": "https://polymarket.com/market/us-iran-final-nuclear-deal-by-august-31","kalshi_url": "https://kalshi.com/markets/KXUSAIRANAGREEMENT","direction": "buy_kalshi_yes__buy_pm_no","exec_price_a": 0.093, "exec_price_b": 0.899,"shares": 105.3, "cost_usd": 104.50,"gross_spread_pct": 0.8,"fee_adjusted_edge_pct": 0.73,"edge_usd": 0.77,"annualized_return_pct": 8.0,"days_to_resolution": 33.4,"change_type": "new","match_review_recommended": false}
Both directions are evaluated for every pair: buy_pm_yes + buy_kalshi_no and buy_kalshi_yes + buy_pm_no. If the fee-adjusted sum of executable prices is below $1.00, the difference is locked in at resolution (assuming the two markets resolve identically, which is what match_confidence and your review are for).
The full matched-pair table (all cross-venue pairs with confidence scores and URLs) is stored in the key-value store under matched_pairs.
Monitor mode
Schedule the actor (e.g. every 10 minutes) with monitorMode: true:
- remembers the previous run's opportunities in the key-value store,
- emits only
new,widened(>= +0.25pp),narrowed,gonerows, - POSTs
new/widenedrows to yourwebhookUrlas JSON, so you can alert into Discord, Slack (via relay), or your own bot.
Input
| Field | Default | Meaning |
|---|---|---|
minEdgePct | 0 | only output rows at/above this fee-adjusted edge |
stakeUsd | 100 | stake per leg used for the depth walk |
minMatchConfidence | 88 | fuzzy-match threshold (the four gates always apply on top); lower it to 80 to widen the net and review pairs yourself |
monitorMode | false | emit only changes vs previous run |
webhookUrl | none | push alerts to this URL |
excludePairIds | [] | suppress known-bad pairs |
Data sources
Official public read APIs only, no scraping, no login: Polymarket Gamma + CLOB, Kalshi trade-api v2. The actor is read-only and never places orders.
Honest limitations
- An "arb" is only riskless if the two markets truly resolve identically. Read both rule pages before trading; the actor gives you both URLs and a confidence score, not legal advice.
- Executable size is limited by the thinner book;
sharestells you the size the stake could actually fill at the quoted prices. - Settlement timing differs between venues; capital can be locked until both resolve.
Keywords
polymarket arbitrage, kalshi arbitrage, prediction market arbitrage, polymarket kalshi matched markets, cross-market spread scanner, prediction market scanner, polymarket api, kalshi api, arbitrage monitor, prediction market alerts