Skip to main content
← Back to Guides
Advanced📖 16 min

Cross-Platform Arbitrage: Locking Profit Between Polymarket and Kalshi

Arbitrage is the closest thing to a free lunch that financial markets offer. When the same outcome trades at two different prices on two different venues, you can buy low on one, sell high on the other, and pocket the difference no matter how the event resolves. In prediction markets, this happens more often than you'd think — Polymarket and Kalshi are separate order books, with separate traders, separate liquidity, and separate moments of mispricing. This guide explains the mechanics, walks a full numeric example, defines what actually counts as a *real* arb (most spreads you'll see are mirages), and shows how to scan for and execute these trades using Predite's Arbitrage scanner and the ARB Hunter bot.

This is an advanced, math-heavy guide. If you're still shaky on Expected Value or position sizing, read those guides first — arbitrage assumes you're comfortable thinking in probabilities and cents.

The Core Idea: Two Sides That Sum to Less Than $1

Every binary prediction-market share resolves to exactly $1.00 (if the event happens) or $0.00 (if it doesn't). YES and NO are mirror images: if you hold one YES share and one NO share on the same market, you are guaranteed to receive exactly $1.00 at resolution, because one of them will be worth a dollar and the other zero.

That guarantee is the entire engine of arbitrage. If you can assemble a guaranteed $1.00 payout for less than $1.00 in total cost, the difference is locked-in profit — independent of the outcome.

There are two flavors:

  • Single-platform arbitrage. On one venue, YES is trading at $0.48 and NO is trading at $0.49. Buy both. Total cost: $0.97. At resolution you collect $1.00. You made $0.03 per pair, risk-free, because the book temporarily let the two sides sum to less than 100%. Predite's scanner flags these when the sum drops below roughly 97 cents.
  • Cross-platform arbitrage. YES trades at $0.42 on Polymarket but $0.55 on Kalshi for the *same* question. You buy YES cheap on Polymarket and take the opposite exposure on Kalshi (buy NO at $0.45, since Kalshi's YES at $0.55 implies NO at $0.45). Buying YES on Polymarket at $0.42 plus NO on Kalshi at $0.45 costs $0.87 for a guaranteed $1.00 — a 13-cent edge per pair before costs.

The second flavor is where the real, recurring money lives, because two independent order books drift apart far more often than one book misprices itself.

A Worked Numeric Example

Suppose both venues list a market on the same Fed decision. Predite's Arbitrage scanner surfaces this row:

  • Polymarket YES: 42¢ (so NO ≈ 58¢)
  • Kalshi YES: 55¢ (so NO ≈ 45¢)
  • Spread: 13.0%

The cheapest way to own a guaranteed dollar is to buy the cheap YES on Polymarket and the cheap NO on Kalshi:

  • Buy 1 YES on Polymarket @ $0.42
  • Buy 1 NO on Kalshi @ $0.45
  • Total cost: $0.87 per pair

At resolution, exactly one of two things happens:

  • Fed cuts (YES resolves). Polymarket YES pays $1.00. Kalshi NO pays $0.00. You collect $1.00.
  • Fed holds (NO resolves). Polymarket YES pays $0.00. Kalshi NO pays $1.00. You collect $1.00.

Either way you collect $1.00 against $0.87 spent. Gross profit: $0.13 per pair, a 14.9% return on capital deployed, with zero directional risk.

Now scale it. Predite's scanner reports profit "per $100" deployed — in this case roughly $13 of gross profit for every $100 you commit. If you commit $2,000 split across the two legs ($1,000-ish each side, sized so the share counts match), the gross take is about $300. But "gross" is the operative word. The whole skill of arbitrage is in the deductions, and that's what separates a real arb from a fake one.

What Makes a Real Arb (Not a Trap)

The 13-cent spread above is the headline. Your actual profit is what survives after four filters. If any one of them fails, the "arb" is an illusion that will quietly cost you money.

1. Identical Resolution Criteria

This is the filter that kills most cross-platform arbs, and it's the one beginners ignore. Two markets can have nearly identical *titles* and completely different *rules*.

  • "Will the Fed cut rates in June?" might mean the June FOMC meeting on Polymarket and any rate change announced during the calendar month of June on Kalshi. A 25bp cut announced at an unscheduled meeting resolves one YES and the other NO.
  • A sports market might resolve on regulation time on one venue and including overtime on the other.
  • An election market might use the AP call versus official certification — which can be weeks apart, and occasionally diverge.

If the resolution sources or windows differ, you don't have an arb. You have two correlated-but-distinct bets, and the small probability that they resolve differently can wipe out your entire spread and then some — because when they diverge, you lose a full dollar on the leg that goes wrong. Before executing any cross-platform trade, open both markets and read both resolution sections in full. Predite's scanner matches markets by question similarity to surface candidates quickly, but it cannot read intent — final resolution verification is always a human step.

2. Spread Greater Than Fees + Slippage

The spread has to clear your *total* transaction cost on both legs, not just look big.

  • Fees. Polymarket charges no fee on resting limit orders (you're a maker), and a small taker fee — typically 0.2–0.5% — on orders that immediately fill. Kalshi charges a per-contract trading fee that scales with price and size. Budget both legs.
  • Slippage. The price you see is the *best* quote, available only for the top of the book. To deploy real size you walk down the book into worse prices. Buying $1,000 of a YES quoted at 42¢ might fill at a 43.5¢ average if the book is thin.
  • On-ramp / gas. Moving USDC, bridging, and Polygon gas are real if small.

A useful rule of thumb: net edge = headline spread − taker fees (both legs) − expected slippage (both legs). A 13-cent spread that survives as 9–10 cents net is excellent. A 3-cent spread that nets to 0.5 cents after costs is not worth the capital lock-up or the execution risk. Run the size through Predite's Slippage Simulator (Pro+) before you commit — it estimates your real fill price at a given order size so the spread you model is the spread you'll actually get.

3. Liquidity on Both Sides

An arb requires you to fill *both* legs at the prices you saw. A 15-cent spread is useless if the cheap side has only $80 of depth — you'll buy your $80, the price snaps back, and you're left holding one naked leg with no profit and full directional risk. Predite tags every opportunity with a risk level derived from the thinner of the two books:

  • LOW risk — both books have roughly $100k+ in liquidity. You can deploy meaningful size.
  • MEDIUM risk — at least one side is around $30k–$100k. Size down.
  • HIGH risk — the thin side is under $30k. Treat the spread as informational, not actionable.

Always size to the *thinner* book. Your maximum safe position is bounded by whichever venue can absorb your order without moving against you.

4. Execution Speed

Cross-platform spreads exist precisely because the two books haven't synced yet. They close fast — sometimes in seconds — when an arbitrageur (maybe you, maybe a bot) trades them away. The danger is legging risk: you fill the Polymarket leg, then reach for Kalshi, and the Kalshi price has already moved. Now you're half-hedged and exposed.

Two ways to manage this:

  1. Fill the thinner, faster-moving leg first, then the deeper one. The deep book is more likely to still be there a few seconds later.
  2. Automate it. A bot evaluates and fires both legs in the same cycle, far faster than you can tab between two browser windows. This is exactly what ARB Hunter is for.

Using Predite's Arbitrage Scanner

The scanner lives at Dashboard → Cross-Platform Arbitrage and is part of the Cross-Platform hub (it shares a tab strip with the Execution Router). It is gated to the Pro ($59/mo) and Bot ($99/mo) plans; Starter does not include it.

The scanner continuously matches active Polymarket and Kalshi markets, computes the spread on every matched pair, and also checks each individual market for the single-platform YES + NO < $1 case. By default it surfaces anything with a spread of 2% or more, sorted widest-first. Each row shows:

  • The market question and the trade direction ("Buy YES on Polymarket, Sell YES on Kalshi")
  • Both venues' YES prices in cents, side by side
  • The spread as a percentage
  • Estimated profit per $100 deployed
  • A LOW / MEDIUM / HIGH risk badge based on the thinner book

A practical workflow:

  1. Sort by spread, but don't trade the top row reflexively — the widest spreads are widest *because* something is off (usually mismatched resolution).
  2. Filter to LOW risk first. These are the ones you can actually size into.
  3. Open both markets and verify resolution criteria match exactly. This is non-negotiable.
  4. Run your intended size through the Slippage Simulator to confirm the net edge survives.
  5. If it clears, execute the thin leg first, then the deep leg, matching share counts so the hedge is exact.

Using the ARB Hunter Bot

Manual arbitrage is viable but slow, and the best spreads vanish before a human can act. ARB Hunter is one of the six Bot Builder templates and exists to fire both legs automatically. Bots — and live CLOB execution — require the Bot plan ($99/mo); on Starter or Pro you can build and paper-trade an ARB Hunter, but you can't take it live.

ARB Hunter scans on the 15-minute bot cron, evaluates matched pairs (and single-platform YES + NO < 100% cases), and when it finds a qualifying spread it splits your configured position size evenly across the two legs and executes them in the same cycle — one arb per cycle, by design, to avoid over-concentrating. Every execution is written to the audit log with the spread and strategy string, so you can reconstruct exactly what it did and why.

Key parameters to set:

  • Min spread threshold. The minimum net spread to act. Set this *above* your combined fee + slippage budget — 4–5% is a sane floor so the bot ignores spreads that look profitable but aren't.
  • Max position size. The total USD per arb, split in half per leg. Start small ($50–$100) until you've watched it run.
  • Mode. Always start in Paper. Run for a few weeks and confirm the bot's modeled spreads actually materialize at execution before risking real capital.
  • TWAP splitting. For larger sizes, the Bot plan can slice each leg into smaller child orders over time (TWAP) to reduce slippage on thin books. Enable this once you're deploying real size.

Watch live ARB Hunter closely for its first week. The single most important metric is realized slippage versus the spread the bot expected — if executions consistently come in 2–3 cents worse than modeled, raise your minimum spread threshold until the net edge is reliably positive.

The Risks (Arbitrage Is Not Actually Risk-Free)

"Risk-free profit" is the textbook pitch. In practice, prediction-market arbitrage carries real, specific risks. Respect them.

  • Resolution divergence. The big one. If the two markets resolve differently — because the criteria, sources, or windows weren't truly identical — you lose a full $1.00 on the wrong leg. One divergent resolution can erase the profit from dozens of clean arbs. This is why criteria verification is the entire game.
  • One leg fails to fill. You complete the Polymarket buy, the Kalshi price moves, and you can't fill the hedge at a profitable price. Now you're holding a naked directional position you never wanted. Thin books and slow manual execution make this likely.
  • Capital lock-up. Both legs tie up cash until resolution, which can be weeks or months away. A 13% locked return over three months is good; the same 13% with your capital frozen for a year while better opportunities pass by may not be. Always weigh the spread against the time to resolution — annualize it.
  • Platform and counterparty risk. Funds sit on two venues. Withdrawal delays, smart-contract risk on Polygon, account issues on Kalshi, or a venue voiding/refunding a market mid-flight all affect a hedge that depends on both legs paying out.
  • Fee and slippage drift. A spread that's profitable at quote becomes a loss after you walk both books and pay both fees. Model conservatively; assume worse fills than the screen shows.

When NOT to Arb

Arbitrage is a tool, not a religion. Skip it when:

  • The spread is below your all-in cost. A 2–3% spread that nets to fractions of a cent isn't worth the capital lock-up or the legging risk. Let it go.
  • Resolution criteria differ at all. If you can't confirm the two markets resolve on identical sources and windows, it's not an arb — it's an unhedged correlated bet wearing a disguise. Walk away.
  • Either side is illiquid (HIGH risk). If you can't fill both legs in size at the quoted prices, the spread is informational only.
  • Resolution is far away and the annualized return is mediocre. A 4% spread locked for nine months is a worse use of capital than redeploying into +EV directional trades. Compare against your alternatives.
  • You'd have to chase a fast-closing spread by hand. If it needs millisecond execution to capture, a manual trade will lose the race. Either let ARB Hunter take it or pass.

The honest reality: clean, large, liquid cross-platform arbs are *rare*, and they're competed away quickly by bots. Treat arbitrage as a high-conviction, occasional supplement to your core +EV strategy — not your bread and butter. When a genuine one appears, it's close to free money; the discipline is in refusing the 95% of spreads that only look like one.

Ready to see what's live right now? Open the Cross-Platform Arbitrage scanner on your Pro or Bot plan, sort by spread, filter to LOW risk, and practice the resolution-verification habit on a few real rows — even if you don't trade them. When you're confident reading the spreads, spin up an ARB Hunter in Paper mode and let it hunt while you watch. The math is simple; the edge is in the discipline.

Cross-Platform Arbitrage: Locking Profit Between Polymarket and Kalshi | Predite