Kalshi + Polymarket Arbitrage Finder — Price Gaps & Odds avatar

Kalshi + Polymarket Arbitrage Finder — Price Gaps & Odds

Pricing

from $1.40 / 1,000 market scrapeds

Go to Apify Store
Kalshi + Polymarket Arbitrage Finder — Price Gaps & Odds

Kalshi + Polymarket Arbitrage Finder — Price Gaps & Odds

Match the same question across Kalshi and Polymarket and price the YES/NO hedge after fees, with return and days to close. Plus a unified odds feed of every open market and full odds history. Pure API, no browser.

Pricing

from $1.40 / 1,000 market scrapeds

Rating

0.0

(0)

Developer

SignalBench

SignalBench

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

0

Monthly active users

12 days ago

Last modified

Categories

Features

Limited permissions

Share

Kalshi + Polymarket Arbitrage Finder — Price Gaps, Odds Feed & History

Find the questions that Kalshi and Polymarket price differently. This Actor reads both platforms' full open books, matches the same yes/no question across them, and prices the hedge: buy YES on one platform, buy NO on the other, and collect $1 whichever way it resolves. Every matched question comes back with its net edge after Kalshi's fee, its return, and how long your money is tied up.

It also does the plain jobs: a unified odds feed of every open market on both platforms in one schema, and full odds history for any market. Pure JSON APIs, no browser, so a full two-platform scan takes about 30 seconds.

$2 per 1,000 items ($0.002 each). One matched question is one item. Failed or empty lookups are never charged.

Three modes

1. Price gaps & arbitrage (default)

Matching is the hard part. The platforms word the same event differently ("be the Democratic Presidential nominee in 2028" vs "win the 2028 Democratic presidential nomination"), and many markets differ only by a threshold ("above 1.00%" vs "above 1.25%"). A pair is only reported when all of these hold:

  • Same numbers. Thresholds, counts and years must match exactly.
  • Same polarity and direction. "Will X meet Y" never pairs with "Will X not meet Y", "above" never pairs with "below", "win" never pairs with "lose", and "before June" never pairs with "after June".
  • Close dates within 7 days (adjustable).
  • High match score. The distinctive words of each question must appear in the other. The default bar is 0.75 on a 0–1 scale.
  • No conflicting detail. A rare word left over on one side, such as "Best Narrative" vs "Best Multiplayer" or "Tampa" vs "the US", rejects the pair.
  • No ambiguity. When several Kalshi markets share one title, each is read with its outcome name ("Who will IPO in 2026? DeepSeek"). Anything still ambiguous is skipped. Placeholder books wider than 20¢ and markets past their close date are skipped too.

On the live books in October 2026 this matched about 200 questions per run, and roughly 35 had a net edge of at least half a cent per $1. Every pair with an edge, and a sample of every question family, was checked by hand.

For every pair you get:

FieldMeaning
strategyWhich side to buy where, e.g. "Buy YES on Polymarket + buy NO on Kalshi"
costPerPairYES leg + NO leg at the best ask. One pair pays exactly $1.
netEdge$1 − cost − Kalshi's estimated taker fee, per pair
netReturnPctNet edge as a % of the money put in
daysToClose, annualizedNetReturnPctHow long the money is locked, and the return per year (empty under a week)
isArbitragetrue when the net edge is at least $0.005 per $1
priceGapKalshi midpoint minus Polymarket midpoint, for pure price comparison
matchScoreHow closely the two questions match
kalshi*, polymarket*Both questions, bids, asks, volumes, close times and links

Turn on Only show arbitrage to drop pairs without an edge. Leave it off to get every matched question, which is the full cross-platform price comparison. The keyword and category filters keep a pair when either question matches. Minimum volume and closing within N days must hold for both legs, each in its own volume units.

Read this before you trade

An edge in this table is a lead, not a guaranteed profit.

  • Check the resolution rules on both sites. Two markets can share a question and still settle differently: a different source, a different deadline, or a different treatment of edge cases. Kalshi's "Who will run for the 2028 nomination?" and Polymarket's "announce a run before 2028" look alike but can resolve apart. The largest edges are the most likely to be one of these.
  • Prices are top of book. The edge holds only for the size available at the best ask. Larger orders walk the book.
  • Fees. netEdge subtracts Kalshi's published taker fee, 0.07 × P × (1 − P) per contract, rounded up to the cent per order, so very small orders pay slightly more. Polymarket charges no trading fee on most markets. Where it does, subtract it yourself.
  • Capital is locked until resolution. A 1% edge on a 2028 question is about 0.5% a year. Sort by annualizedNetReturnPct.
  • Access. Each platform has its own eligibility rules by country. This is market data, not financial advice.

2. Unified markets feed

All open markets from both platforms in one normalized schema. Kalshi coverage scans the full open book (130k+ markets in October 2026); Polymarket arrives volume-ranked from its API. With both platforms selected, results are ranked within each platform by volume and interleaved, so you always see both (a pure cross-platform volume sort would bias toward Polymarket, which reports volume in USD while Kalshi reports it in contracts). Filter by:

  • Keyword — "election", "fed", "bitcoin", "world cup"…
  • Category — Politics, Economics, Sports, Crypto, World… (matches Kalshi categories and Polymarket event tags)
  • Minimum volume — skip dead markets
  • Closing within N days — only near-resolution markets
  • Platform — both, Kalshi only, or Polymarket only

Sort by one of:

  • Volume (default) — ranked within each platform and interleaved
  • Closing soon — soonest-resolving first (global, comparable across platforms)
  • Biggest movers (24h) — largest YES-price move in either direction first

3. Odds history

Give it Kalshi tickers and/or Polymarket URLs; get each market's price time-series (daily or hourly, up to 365 days): Kalshi native OHLC candlesticks (open/high/low/close + volume), Polymarket CLOB price points. "How did the odds move after the debate?" — answered in one run.

Output example (price gaps)

{
"type": "arbitrage",
"question": "Will Mark Kelly be the Democratic Presidential nominee in 2028?",
"matchScore": 0.911,
"strategy": "Buy YES on Polymarket + buy NO on Kalshi",
"yesLegPrice": 0.02,
"noLegPrice": 0.966,
"costPerPair": 0.986,
"grossEdge": 0.014,
"estimatedKalshiFee": 0.0023,
"netEdge": 0.0117,
"netReturnPct": 1.18,
"isArbitrage": true,
"daysToClose": 741,
"annualizedNetReturnPct": 0.58,
"kalshiTicker": "KXPRESNOMD-28-MK",
"kalshiYesBid": 0.034,
"kalshiYesAsk": 0.036,
"polymarketQuestion": "Will Mark Kelly win the 2028 Democratic presidential nomination?",
"polymarketYesBid": 0.017,
"polymarketYesAsk": 0.02,
"polymarketUrl": "https://polymarket.com/event/democratic-presidential-nominee-2028",
"closeGapDays": 0.6
}

That row is a real edge and a poor trade: 1.18% over 741 days. The annualized figure is there so you can tell the difference at a glance.

Output example (unified feed)

{
"type": "market",
"platform": "kalshi",
"id": "KXNBAFINALS-26-SA",
"question": "Will the San Antonio win the 2026 Pro Basketball Championship?",
"url": "https://kalshi.com/markets/kxnbafinals",
"yesPrice": 0.21,
"impliedProbabilityPct": 21,
"bestBid": 0.2,
"bestAsk": 0.21,
"spread": 0.01,
"oneDayChange": -0.03,
"volume": 75063434,
"closeTime": "2026-06-22T03:00:00Z",
"category": "Sports",
"tags": ["Sports"],
"scrapedAt": "2026-06-12T20:31:00.000Z"
}

Output example (odds history)

{
"type": "history",
"platform": "polymarket",
"question": "Will Jesus Christ return before 2027?",
"resolution": "1d",
"pointCount": 31,
"points": [
{ "t": "2026-05-14T00:00:18.000Z", "price": 0.0215 },
{ "t": "2026-06-12T20:31:04.000Z", "price": 0.0205 }
]
}

Each feed item also carries platform-native identifiers (kalshi.seriesTicker, polymarket.clobTokenIds, …) so you can chain a feed run straight into a history run.

A probability oracle for AI agents (MCP / LangChain)

Apify Actors plug into agents as tools (MCP). Pointed at this Actor, an agent can answer "What probability do prediction markets give X?" with live, cross-platform odds — and pull the time-series to reason about momentum:

  • MCP — expose the Actor as an agent tool via Apify's MCP server
  • LangChain / LlamaIndex — call it as a tool from any framework
  • n8n / Zapier / Make — scheduled odds snapshots into sheets and alerts; run it daily and you accumulate your own odds archive

Data sources & notes

  • Kalshi: official public trade API (/events, /candlesticks) — no auth needed for market data. Prices are decimal dollars (0–1 = implied probability).
  • Polymarket: public Gamma + CLOB APIs. Prices 0–1.
  • Volume units differ: USD on Polymarket, contracts (≈ $1 notional) on Kalshi. Figures are platform-reported; the cross-platform volume sort treats them as comparable for ranking only.
  • Only public market data is accessed — no accounts, no trading, no user data.

FAQ

Is this risk-free arbitrage? Not automatically. The hedge pays $1 either way only if both markets settle on the same facts at the same time. Read both resolution rules before trading, and see "Read this before you trade" above.

How often should I run it? Gaps open and close within minutes to days. Schedule it hourly with Only show arbitrage on, and send new rows to Slack, email or a sheet through an Apify integration.

Why don't I see sports game markets? A pair is reported only when both platforms list the same yes/no question with a two-sided book. Most game and player-prop markets are worded or structured too differently to match safely at the default score. Lower Minimum match score to 0.7 to include more, and check those pairs by hand.

Is there an official cross-platform prediction market API? No. Kalshi and Polymarket each have their own APIs with different schemas, auth models, and quirks (Kalshi's pagination buries real markets under parlay listings; this Actor handles that). This Actor merges them into one normalized feed.

How much does it cost? $0.002 per stored item — $2 per 1,000. A history item is one market's complete series (up to 365 days of points) for the same $0.002. Failed or empty lookups are never charged. Apify's free $5 monthly credit covers ~2,500 items.

How fresh is the data? Each run fetches live API data. Schedule runs (every hour, daily…) to build snapshots over time.

Can I get resolved-market outcomes? Closed/settled markets are visible in history mode via their tickers/URLs. A dedicated resolutions & calibration feed is on the roadmap.

Feedback and reviews

Missing a field, hit a bug, or need another input option? Open an issue on the Issues tab. Requests there shape what gets built next.

If this Actor saved you time, please leave a quick review. Reviews are how other users find it on the Apify Store, and they keep it maintained.