For most of 2024 and 2025, Polymarket Kalshi arbitrage was theoretical for U.S. residents because Polymarket geofenced U.S. accounts. That changed in January 2026 when Polymarket settled with U.S. authorities and re-opened to verified domestic users. With both venues legally accessible, cross-venue arbitrage on sports event contracts is now a real, repeatable strategy — one that requires net-of-fees math, latency awareness, and a steady eye on liquidity. This tutorial walks through the mechanics end to end: how the two venues differ, how to pair contracts, how to compute the realistic arbitrage window, and the operational gotchas that eat returns if you’re sloppy.
The two venues
Kalshi (CFTC-regulated, USD)
Kalshi is a designated contract market under the CFTC. It lists yes/no event contracts that settle to $1 / $0. Trading is in USD via ACH-funded accounts. Order book depth on major NFL spreads runs $100K-$500K per side at the inside quote. The Third Circuit ruling in April 2026 confirmed federal preemption of state gaming laws on its contracts. We cover the full Kalshi mechanics in Kalshi sports event contracts.
Polymarket (USDC on Polygon, U.S. re-opened January 2026)
Polymarket runs on Polygon (an Ethereum L2). Contracts are USDC-denominated and settle to 1 USDC / 0 USDC. Until early 2026 U.S. residents were excluded; the post-settlement reopening included a CFTC no-action letter scoped to certain sports event contracts. U.S. accounts go through KYC and use the official U.S. mobile app. Liquidity on the same NFL contracts is typically $50K-$200K per side — thinner than Kalshi but recovering.
Pricing and increments
- Kalshi: $0.01 minimum tick; quoted bid/ask in cents.
- Polymarket: $0.001 minimum tick; quoted in millis (e.g. 0.547 USDC).
- Both venues quote two-sided. YES + NO sums to ~$1.00 on liquid markets, ~$0.97-$1.00 with spread.
Pairing equivalent contracts
The first translation step is recognizing that the same event might be expressed differently across venues.
NFL spread example
Kalshi: "Will the Eagles win by 3 points or more vs Cowboys?" YES.
Polymarket: "Will the Eagles cover −3 vs the Cowboys?" YES.
Same event, same payout — directly arbitragable. But check the line carefully. Kalshi might list a −3 contract while Polymarket lists −3.5. Those are NOT equivalent. A −3 contract pays YES on a 3-point Eagles win (push for the sportsbook spread, but Kalshi pays full $1 because the contract is "win by 3+"). The −3.5 contract requires a 4+ point win. Always verify the cover threshold on both venues before pairing.
NFL total example
Kalshi: "Will Eagles vs Cowboys total points be 47 or more?" YES.
Polymarket: "Will Eagles vs Cowboys total points exceed 46.5?" YES.
Different thresholds → not directly arbitragable. You can still pair them as a near-equivalent and price the residual risk (the chance the total lands exactly between the two thresholds), but it’s no longer pure arbitrage.
The net-of-fees formula
An arbitrage exists when:
(1 − Kalshi_fee) × ($1 − Kalshi_YES_ask) + (1 − Polymarket_fee_gas) × ($1 − Polymarket_NO_ask) > stake_total
In plain English: the combined payout from winning on whichever side hits, after fees, must exceed your total stake. Worked example.
Worked arbitrage on a NFL spread
- Kalshi quote: YES Eagles cover −3 at 54¢ ask.
- Polymarket quote: NO Eagles cover −3 at 0.448 USDC ask.
You buy 10,000 Kalshi YES at 54¢ = $5,400. You buy 10,000 Polymarket NO at 0.448 = $4,480 (USDC, assume 1:1 to USD).
Total stake: $5,400 + $4,480 = $9,880.
If Eagles cover: Kalshi pays $10,000. Polymarket pays $0. Net: $10,000 − $9,880 = $120 gross.
If Eagles do not cover: Kalshi pays $0. Polymarket pays $10,000. Net: $10,000 − $9,880 = $120 gross.
Either way, gross profit: $120 on $9,880 stake = 1.21% gross return.
Apply the fees
- Kalshi settlement fee on winning side: 1.5% × $4,600 (net winnings on YES side) = $69. Or 1.5% × $0 = $0 on losing side.
- Polymarket taker fee: 2% × $5,520 (net winnings on NO side) = $110.40. Or $0 on losing side.
- Polymarket gas costs (round-trip): ~$2.
If Eagles cover: $120 gross − $69 (Kalshi fee on the win) − $2 (Polymarket gas) = $49 net. Return: 0.50%.
If Eagles do not cover: $120 gross − $110.40 (Polymarket fee on the win) − $2 (Polymarket gas) = $7.60 net. Return: 0.08%.
Realized net is path-dependent because Kalshi’s fee is lower than Polymarket’s. If you can structure the larger stake on whichever side has higher implied probability (so you collect the lower-fee win more often), expected net return improves. Optimization is real but small.
Detecting windows
The arbitrage spread isn’t always positive. Three patterns produce windows:
- Pregame line moves. When the sportsbook line shifts (e.g. Eagles −3 to Eagles −3.5 after an injury report), Kalshi typically follows within minutes; Polymarket can lag 10-30 minutes because of thinner U.S. liquidity. The lag is the window.
- Early-week openers. Tuesday-morning openers see early Kalshi liquidity but Polymarket order books sit thin until late-week. Spreads widen.
- Late Sunday inactives. Final inactive declarations move sportsbooks and Kalshi sharply; Polymarket can move with 5-10 minute latency.
The desk at /desk pulls live quotes from both venues every 5 seconds and highlights pairs where the net-of-fees spread is positive. Manual detection is exhausting; automation is necessary.
Position sizing and bankroll
Arbitrage is locked-profit, not zero-risk. The risks are:
- Settlement risk. Edge cases where Kalshi and Polymarket settle differently due to wording (e.g., overtime treatment on a moneyline contract). Read both contract specs before pairing.
- Slippage. Your second leg’s quote can move between the time you fill leg one and leg two. Use atomic limit orders, not market orders.
- Stablecoin de-pegging. Polymarket settles in USDC. A USDC de-peg below $1 would cost you on your USDC-denominated payout.
- Gas spikes on Polygon. Rare but real; a $50 gas spike during a $5K arb can erase the edge.
Size each arb at 5-10% of your prediction-market bankroll. Don’t concentrate the whole roll into one slip; the settlement-risk tail is real. Pair the desk’s sizing module with our Kelly criterion formula adapted to the locked-return profile.
Operational checklist
- Verify the contract pair is truly equivalent (same threshold, same overtime treatment, same player listing if relevant).
- Confirm both venues have liquidity at the quoted depth. The inside quote may be only 100 contracts; the next tier could be 4¢ worse.
- Compute net-of-fees spread under both possible outcomes; only enter if both are non-negative.
- Fund accounts ahead of time. Polymarket requires USDC on Polygon; bridging from a CEX takes 10-30 minutes.
- Use limit orders to avoid slippage on the second leg.
- Log every arb. Track realized vs predicted return; the gap reveals fee or slippage leakage you didn’t model.
The /desk arbitrage panel automates steps 1-3 and integrates with the bet-tracking workflow for step 6.
The frequency question
How often do positive-spread arbs appear? Based on the desk’s public log over Q1 2026:
- Liquid NFL Sunday spreads: 3-8 windows per week, each lasting 30 seconds to 5 minutes.
- NBA totals on featured games: 5-12 windows per week, similar duration.
- MLB game lines: 10-20 windows per week, but thinner depth limits scale.
- UFC headline fights: rare, irregular; 0-2 per week.
Net realized return per arb (after fees): typically 0.10% to 0.40% on capital risked. The model that runs 5 arbs a week at average 0.25% net return produces 65% annualized on the capital that’s parked, before accounting for downtime — which is most of the time.
Capital efficiency: keeping enough on both sides
The biggest operational pain in cross-venue arb is that you must have funded balances on both Kalshi and Polymarket simultaneously. Capital sitting idle on either side is dead weight — not earning, not generating EV. Three approaches operators use:
Pre-funded balanced reserves
Hold a target balance on each venue equal to your typical arb size. Refill from the winning side after settlement. Simple but capital-intensive — you’re effectively double-paying for the right to arb.
Settlement-cycling
Pair arbs in batches. Run 3-5 arbs on Saturday-Sunday, let Sunday settlements top up Kalshi, withdraw to bank Monday, fund Polymarket Tuesday. This is the lowest-friction model for retail-sized operators but limits you to one batch per week.
Stablecoin bridge for fast Polymarket refills
Maintain USDC on a CEX (Coinbase, Kraken). Withdraw to Polymarket on demand via Polygon bridge. Round-trip takes 15-45 minutes. Useful for capturing time-sensitive windows mid-day.
Slippage modeling: the silent killer
Quoted prices are not realized prices. Three sources of slippage every arb operator must model:
- Order book depth. The inside quote on Kalshi might only be 200 contracts. Your 1,000-contract fill walks the book to the next tier 2-3¢ worse. If the gross arb was 3¢, slippage erases it.
- Quote movement between legs. You fill leg one in 50ms. By the time your leg two order routes (another 100-300ms), the quote may have moved. If both venues move together, slippage is symmetric; if they diverge, you can end up paying both sides of a widened spread.
- Cross-venue latency. Kalshi and Polymarket data feeds don’t arrive at exactly the same instant. A genuine arb window detected by your scanner may already have closed by the time you confirm.
The defensive approach: only enter arbs where the gross spread exceeds your modeled slippage by at least 2x. On a 0.5¢ slippage budget, only enter when the gross spread is 1.5¢ or more.
The contract-specs trap
Both venues publish detailed contract specifications. Read them. The differences that bite:
- Overtime treatment. An NFL moneyline contract on Kalshi typically pays the team that wins after overtime. Polymarket usually mirrors this, but edge cases (suspended games, ties) can settle differently.
- Postponement language. Postponed games may settle to "no contest" (return capital) on one venue and "void" on the other. If postponement happens between your two fills, you can end up with a residual position on one side.
- Player-prop activation rules. If a player is inactive at game start, the prop voids on most venues — but the timing of "activation" can vary (some venues lock at announcement, others at kickoff). Confirm before pairing prop arbs.
Tax treatment of arbitrage profits
Arb profits are taxable. Two specific considerations:
- Per-venue 1099s. Kalshi issues 1099s for net winnings above $600. Polymarket issues 1099s for U.S. accounts above the same threshold. Your aggregate winnings are taxable; your aggregate losses on either venue can offset only if you itemize.
- Crypto-to-USD conversion gains. Polymarket settlement comes in USDC. Selling USDC for USD may trigger small capital-gains events if USDC has appreciated vs your original purchase price (rare but possible).
A serious arb operator with $50K+ annual gross handle should consider quarterly estimated tax payments to avoid year-end surprises.
Detecting versus executing: two different problems
Most beginners conflate "finding an arb" with "capturing an arb". They are different problems with different infrastructure.
Detection infrastructure
- Live quote subscription to both Kalshi and Polymarket WebSocket feeds.
- Contract-pairing table that maps Kalshi contract IDs to equivalent Polymarket market IDs.
- Net-of-fees spread calculator that updates in real time.
- Alerting system that surfaces only spreads above your threshold.
Execution infrastructure
- Pre-funded accounts on both venues to avoid bridging latency.
- Order-routing logic that fires both legs as close to simultaneously as possible (within 200ms ideally).
- Cancel-and-retry logic for the second leg if the quote slips before fill.
- Confirmation logging that records actual fill prices vs detected quotes.
Detection is mostly a data problem. Execution is mostly a latency problem. Both must be solved to convert detected arbs into realized profit. The desk at /desk handles the detection side; execution still requires manual approval per slip in most jurisdictions but the desk preloads both legs as separate confirmable orders.
The take
Polymarket / Kalshi arbitrage is real, repeatable, and small. The total addressable annual return for a serious operator is in the high-single-digit thousands of dollars per $50K-$100K of parked capital. It’s not get-rich money; it is a structural edge that exists because the two venues serve different user bases on different latencies. Treat it as supplementary income alongside model-driven betting on /picks and /desk. For deeper context on how Kalshi event contracts translate to traditional spread/moneyline pricing, see our event contract to spread translation guide; for the broader Kalshi mechanics, the cornerstone Kalshi sports event contracts piece is the place to start. Track every arb with the discipline outlined in how to track your bets.
Trade responsibly — arbitrage is not risk-free, set position limits and never overcommit capital to a single pair.
Named example board
Keep the page grounded with actual decisions. Josh Allen rushing props, Bijan Robinson usage, Puka Nacua target volume, Amon-Ra St. Brown reception stability, and Travis Kelce touchdown equity are all different cases even when they sit on the same fantasy or betting screen. The point is to map the name to the input that matters most.
- Role example: routes, carries, targets, and red-zone work before highlights.
- Market example: spread, total, team total, or prop price before prediction.
- Fantasy example: ADP, roster build, and scoring format before ranking.
- Review example: compare the final result to the original input, not only the box score.
Price examples and pass rules
Use names as evidence, not decoration. The useful SEO win is that Josh Allen, Ja'Marr Chase, Bijan Robinson and Puka Nacua and Eagles, Cowboys, Chiefs, Bills and Lions appear inside decisions, thresholds, and internal links instead of being dumped into a keyword list.
- Spread example: if Chiefs-Broncos opens Chiefs -3.5 and your fair number is -2.8, +3.5 is the bet, +3 is a pass, and the moneyline needs roughly +155 or better before it replaces the spread.
- Total example: if a Bills outdoor total opens 46.5 and wind moves from 8 mph to 21 mph, an under projection at 42.8 still needs a playable number; under 45 or better is different from chasing 43.5.
- Futures example: Bengals AFC North +280 is 26.3% before hold. If your fair number is 30%, stake modestly, track portfolio correlation, and avoid stacking every Burrow, Chase, and Higgins bet into the same thesis.
- CLV rule: a good write-up is not enough. Track whether the spread, total, prop, or futures price closed better than your entry before grading the process.
Use closing-line value guide, vig and hold guide, bet tracking workflow to keep the examples attached to measurable prices.
Research note board
Use this table to turn the guide into a decision note. The point is to know when the idea is actionable and when it is only context.
| Angle | Input to verify | Example application | Pass when |
|---|---|---|---|
| Market price | Spread, total, moneyline, prop price, or futures hold | Eagles and Cowboys compared through PPR | The price has moved past the number that created the edge |
| Football or sport context | Role, pace, weather, injury status, opponent style | Josh Allen role news mapped to the relevant market | The original input changes or remains unconfirmed |
| Review loop | Entry, close, result, and reason code | hold logged with a clear thesis | You cannot explain whether the process beat the market |
Educational analysis only, not a bet recommendation. Check current lines, injuries, rules, contest terms, and local regulations before acting.
EV per $100 across win rate × odds grid
Expected value of a $100 stake at each combination of true win rate and market odds. Anywhere the cell is positive you have a long-run profitable bet; the magnitude shows how aggressive Kelly will size it.
Breakeven win % at common American odds
The win rate you need to break even at each price. Pick odds shorter than -150 and you must win >60% just to stay flat — a hurdle most casual handicappers never sustain.



