Skip to content
Back to guides
Prediction Markets

Polymarket / Kalshi Arbitrage: Net-of-Fees Tutorial

Shark Snip Editorial 12 min read

Read the price, role, and market first

Polymarket Kalshi arbitrage step by step: contract pairing, net-of-fees math, gas considerations, and the realistic windows that actually exist in 2026.
17 sections
Polymarket / Kalshi Arbitrage: Net-of-Fees Tutorial cover art

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:

  1. 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.
  2. Early-week openers. Tuesday-morning openers see early Kalshi liquidity but Polymarket order books sit thin until late-week. Spreads widen.
  3. 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

  1. Verify the contract pair is truly equivalent (same threshold, same overtime treatment, same player listing if relevant).
  2. Confirm both venues have liquidity at the quoted depth. The inside quote may be only 100 contracts; the next tier could be 4¢ worse.
  3. Compute net-of-fees spread under both possible outcomes; only enter if both are non-negative.
  4. Fund accounts ahead of time. Polymarket requires USDC on Polygon; bridging from a CEX takes 10-30 minutes.
  5. Use limit orders to avoid slippage on the second leg.
  6. 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:

  1. 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.
  2. 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.
  3. 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.

AngleInput to verifyExample applicationPass when
Market priceSpread, total, moneyline, prop price, or futures holdEagles and Cowboys compared through PPRThe price has moved past the number that created the edge
Football or sport contextRole, pace, weather, injury status, opponent styleJosh Allen role news mapped to the relevant marketThe original input changes or remains unconfirmed
Review loopEntry, close, result, and reason codehold logged with a clear thesisYou 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.

Frequently asked questions

Is Polymarket Kalshi arbitrage legal for U.S. residents in 2026?
Kalshi is CFTC-regulated and explicitly available to U.S. residents. Polymarket restored U.S. resident access in January 2026 following its $1.4B QCP Capital settlement and a no-action letter from the CFTC covering certain sports event contracts. U.S. users can trade Polymarket sports markets through the official U.S. mobile and web apps. Arbitraging the two is a normal arbitrage between two legal venues — no different from arbitraging two sportsbooks.
What is the typical Polymarket / Kalshi spread on an NFL contract?
On liquid Sunday afternoon NFL spreads, the cross-venue spread typically runs 0.5¢ to 2¢ per contract. Polymarket trades in USDC and is quoted in $0.001 increments. Kalshi trades in USD at $0.01 increments. The two prices on the same event don’t always converge because of latency between the venues, different user bases, and Polymarket’s gas-cost-adjusted equilibrium price. Windows of 2¢+ open during pregame line moves and on early-week openers, then tighten as liquidity arrives.
How do fees affect the arbitrage in practice?
Kalshi charges a 1-2% settlement fee on net winnings, tiered by volume. Polymarket charges gas on each trade (typically $0.50-$2.00 on Polygon as of mid-2026) and a 2% taker fee on cross-venue routes. To produce a positive net arb, the gross spread must exceed (Kalshi fee + Polymarket fee + gas) divided by stake. On a $1,000 arb, you need roughly a 2.5¢ gross spread; on a $10,000 arb, 0.4¢ is enough. Smaller arbs are eaten by fees.
How do I detect a Kalshi / Polymarket arbitrage window in real time?
You need (a) live quote feeds from both venues, (b) a translator that pairs equivalent contracts (NFL spread, NBA total, etc.), and (c) a net-of-fees calculator. The desk at /desk pulls quotes from both venues, applies the fee schedule, and surfaces any pair where buying YES on one venue and NO on the other returns a locked positive net. Manual detection is possible but slow — quotes move faster than humans can compare.

Build a free model in 60 seconds →

Go →
12m read time
28 players/teams
8 key angles
Angles in this read 6 angles

Editorial example layer

Concrete examples make the page useful: tie player and team names to role, price, matchup, and timing so the content reads like analysis instead of glossary filler.
Patrick MahomesJosh AllenLamar JacksonJoe BurrowJalen HurtsJustin HerbertC.J. StroudTua TagovailoaChiefsBillsRavensEaglesLionsBengalsclosing line valuetarget shareair yardsred-zone roleroute participation
Polymarket / Kalshi Arbitrage: Net-of-Fees Tutorial data infographic
Chart view of the article's core numbers. Source: inline-lib-evScenarios-polymarket-kalshi-arbitrage-tutorial.

Get picks in your inbox

One email, every slate — ranked edges, no touts. Unsubscribe any time.

Start free — pick a sport

Go →

We use cookies for essential site functionality. With your consent, we also use cookies for analytics and performance monitoring. See our Privacy Policy.