Polymarket Kalshi Arbitrage Finder & Monitor avatar

Polymarket Kalshi Arbitrage Finder & Monitor

Pricing

Pay per event

Go to Apify Store
Polymarket Kalshi Arbitrage Finder & Monitor

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

Anton König

Maintained by Community

Actor 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 charges 0.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 (increase vs cut, above vs below) and event stage (on the ballot vs passes are different events). Every row carries its match_confidence. Suspiciously large edges on imperfect matches are flagged match_review_recommended, because a 20% "arb" is almost always a wrong pairing rather than free money. Known-bad pairs can be suppressed via excludePairIds.

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, gone rows,
  • POSTs new/widened rows to your webhookUrl as JSON, so you can alert into Discord, Slack (via relay), or your own bot.

Input

FieldDefaultMeaning
minEdgePct0only output rows at/above this fee-adjusted edge
stakeUsd100stake per leg used for the depth walk
minMatchConfidence88fuzzy-match threshold (the four gates always apply on top); lower it to 80 to widen the net and review pairs yourself
monitorModefalseemit only changes vs previous run
webhookUrlnonepush 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; shares tells 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