Arbitrage Scanner
The same event priced differently on Polymarket and Kalshi.
The tool runs at /divergence and needs a $49.99/mo membership. There is no free tier and no trial, so opening it signed out lands on the pricing page rather than the board. This page is the open documentation of what it does.
When Polymarket and Kalshi list the same real-world outcome and disagree on its price, buying the cheap side on one venue and the opposite side on the other can pay a fixed dollar whichever way it resolves. The Arbitrage Scanner finds those pairs, prices the round trip after fees, and turns a viable one into a concrete stake split.
The matching engine is deliberately conservative. Pairs come from a curated alias table with a hand-verified entity extractor per family, not from fuzzy title search, because a wrong pair is not a small error — it is two unrelated positions presented as a lock.
How a pair is matched
Each family in the table names the Kalshi series and gives a rule for pulling the same entity out of a Polymarket question. The current families are the 2026 World Cup winner, the World Cup Golden Ball, the World Cup top scorer, Fed rate decisions per FOMC meeting, and the 2026 Formula 1 Drivers' Champion.
Entities are normalised and diacritic-folded, so an accented name on one venue matches the plain spelling on the other. Event guards prevent a perennial series from cross-pairing a future season against this year's markets, and the Fed family embeds the meeting in the entity so two different meetings can never match each other.
The fee model, and why the net gap is the only one that matters
Kalshi charges a per-contract trading fee that peaks at the middle of the price range and shrinks toward both ends. Polymarket charges no trading fee but costs gas and spread, carried here as a small per-share allowance. Both are applied before anything is called an edge.
The board shows the gross gap, the estimated fee, and the net gap, and it sorts by the net. A four-cent gross gap on a mid-priced Kalshi contract is a much smaller trade than it looks.
The split uses asks, never last trades
A lock priced off last-trade prices is fiction: a contract that last printed at one cent can be asking two, which doubles the real cost of that leg. The stake splitter prices each direction off the ask of the exact contract being bought — Polymarket's best ask for YES and one minus its best bid for NO, Kalshi's yes and no asks directly — and only considers a direction where both asks genuinely exist.
The split is equal-contract: buy the same whole number on each side so every outcome pays exactly that many dollars, with the contract count set by your budget divided by the all-in cost per dollar of payout. A depth check walks the real order books to show how large the lock can actually get filled before the edge dies.
Rows that are signals, not locks
Some families are marked as not lockable. The World Cup top-scorer pair is the standing example: on a tie for most goals, one venue's wording can resolve yes for every tied leader while the other breaks the tie to a single winner. Part of the visible gap is that rule difference rather than mispricing.
Those rows show the divergence and refuse to render a lock or a stake split, with the reason attached. It is the difference between a price disagreement and a riskless spread, and conflating them is how people lose money on arbitrage.
What it cannot tell you
Every tool has a boundary, and knowing where it sits is the difference between using one well and being misled by it. For Arbitrage Scanner:
- Pairs are curated. A family nobody has verified simply does not appear, so an empty board means no verified pair is diverging — not that no arbitrage exists anywhere.
- Resolution criteria can differ even on matched families. Rows where they can are marked and never sized, but reading both venues' rules yourself is still the last line of defence.
- Last-trade gaps are signals. Only the ask-priced split is executable, and the ask can move between the page rendering and your order landing.
- A lock is only real once both legs fill. Cross one spread and the other leg may reprice before you get there.
- It assumes funded accounts on both venues. Moving money between them is neither instant nor free, and that cost is not in the model.
- The fee model uses the venues' published formulas, not your actual fills, and the Polymarket side is an allowance for gas and slippage rather than a quoted charge.
What it is built on
- Polymarket gamma's full relevance-bounded open-market catalog, for the Polymarket side of every pair.
- Kalshi trade-api v2 series markets, one call per family in the alias table.
- Polymarket CLOB and Kalshi order books, for the depth walk behind the maximum fillable lock.
- The shared fee and staking maths in lib/staking.ts, which prices legs identically on the server and in the splitter.
Related reading
- Prediction Market Arbitrage: Trading Price Divergence Between Polymarket and Kalshi — Guide
- How to Split Stakes on Both Sides of a Prediction Market Arb (Polymarket vs Kalshi) — Guide
- Prediction Market Arbitrage: Polymarket vs Kalshi — Strategy
Tools that pair with it
One venue, every outcome — where the legs price above or below 100%.
One market, every signal we hold on it, on one screen.
Search every market on Polymarket, Kalshi, and Manifold.
WhaleTracks is informational analytics, not financial advice. Market data comes from Polymarket, Kalshi and Manifold's public APIs; WhaleTracks is not affiliated with any of them. Past performance does not guarantee future results.