Prediction Market Arbitrage Calculator

A book-versus-book arbitrage calculator cannot price this trade, because one of the two legs charges an explicit fee on top of its price. This one nets the exchange fee out first, then reports what is left — including the common case where the fee eats the whole gap and there is nothing left to lock.

Prediction market arbitrage is covering both sides of the same event across an exchange and a sportsbook so every outcome pays the same amount. It exists only when the contract’s fee-adjusted cost plus the book price’s implied probability sum below 100%, and on a two-venue market the exchange fee is usually what stops them.

P=P+0.07P(1P)Σ=P+1dBr=1Σ1P^{*} = P + 0.07\,P\,(1-P) \qquad \Sigma = P^{*} + \dfrac{1}{d_B} \qquad r = \dfrac{1}{\Sigma} - 1

where:

Worked example — the numbers in the form below

An NFL game. The exchange quotes “Team A wins” at 49¢ bid / 50¢ ask. A sportsbook posts Team A −135, Team B +115. Take the better price on each side: the contract for A, the book for B.

P=0.50+0.07×0.50×0.50=0.5175dB=2.151dB=0.465116P^{*} = 0.50 + 0.07 \times 0.50 \times 0.50 = 0.5175 \qquad d_B = 2.15 \Rightarrow \tfrac{1}{d_B} = 0.465116
Σ=0.5175+0.465116=0.982616<1r=10.9826161=+1.77%\Sigma = 0.5175 + 0.465116 = 0.982616 < 1 \qquad r = \tfrac{1}{0.982616} - 1 = +1.77\%

Sized contract-first at C=1,000C = 1{,}000 contracts, so both legs pay $1,000:

exchange=1000×$0.50+0.07×1000×0.25=$500.00+$17.50=$517.50\text{exchange} = 1000 \times \$0.50 + \lceil 0.07 \times 1000 \times 0.25 \rceil = \$500.00 + \$17.50 = \$517.50
book=$1,0002.15=$465.12total outlay=$982.62\text{book} = \dfrac{\$1{,}000}{2.15} = \$465.12 \qquad \text{total outlay} = \$982.62
payout either way=$1,000.00locked $17.38  =  +1.77%\text{payout either way} = \$1{,}000.00 \quad\Longrightarrow\quad \text{locked } \$17.38 \;=\; +1.77\%
Without the fee the same two prices lock $34.88. The fee is $17.50 — 50.2% of the whole gap. Any tool that converts 50¢ to +100 and stops is reporting double the real number.

Check a pair of prices

The panel takes American odds for both venues, so the exchange leg goes in fee-adjusted — the conversion is one line and the table below has the common prices. It then picks the better price on each side, splits a total stake so both outcomes pay the same, and prints the locked return or the absence of one.

On the defaults the panel reports Σ=0.9826\Sigma = 0.9826, a return of +1.77%, $526.65 on the exchange leg and $473.35 at the book, paying $1,017.70 whichever side wins — a locked $17.70. That is the same trade as the worked example, scaled so the outlay is $1,000 rather than the payout; the return is identical because scaling a hedge does not change its rate.

Getting the exchange leg’s fee-adjusted price

One conversion, from the ask you would actually pay. Add the per-contract fee to the price, then run the standard American formula on the result:

P=P+0.07P(1P),A={+100(1P)PP0.50100P1PP>0.50P^{*} = P + 0.07\,P(1-P), \qquad A^{*} = \begin{cases} +\,\dfrac{100\,(1-P^{*})}{P^{*}} & P^{*} \leq 0.50 \\[8pt] -\,\dfrac{100\,P^{*}}{1-P^{*}} & P^{*} > 0.50 \end{cases}

The right-hand column below is the other half of the same fact, and it is the number worth memorising: it is the price the sportsbook has to beat on the opposite side before any arbitrage exists at all.

Exchange askFee-adj. cost PP^{*}Enter as (American)Book must beat…if the fee were zero
20¢0.2112+373.48−373.48−400.00
30¢0.3147+217.76−217.76−233.33
40¢0.4168+139.92−139.92−150.00
45¢0.4673+113.98−113.98−122.22
50¢0.5175−107.25+107.25+100.00
51¢0.5275−111.64+111.64+104.08
55¢0.5673−131.12+131.12+122.22
60¢0.6168−160.96+160.96+150.00
70¢0.7147−250.51+250.51+233.33
80¢0.8112−429.66+429.66+400.00

Note the 51¢ row. On a 49/50 book the exchange’s other side is not 50¢ — a taker buying NO pays 100 − 49 = 51¢, which is why the form’s two exchange fields are −107.25 and −111.64 rather than a matched pair. The spread is charged to whoever is in a hurry, in both directions. The prediction market odds converter has the full table of formats, and computes the fee-adjusted break-even on any price.

The fee moves the bar by 7.25 points of American odds

Everything on this page reduces to one comparison. Without a fee, a 50¢ contract on side A pairs with anything better than +100 on side B. With the standard taker fee, the bar moves to +107.25:

dB>11P=110.5175=2.0725AB>+107.25d_B > \dfrac{1}{1 - P^{*}} = \dfrac{1}{1 - 0.5175} = 2.0725 \quad\Longleftrightarrow\quad A_B > +107.25

That is 1.75 probability points, and it is why exchange-versus-book pairs that look arbitraged on a screen usually are not. The gap has to clear both venues’ costs, and the two costs are charged in different places: the book’s inside the price (−135 / +115 is a 3.96% overround — a 3.81% hold), the exchange’s bolted on after it (0.07(1P)=3.5%0.07(1-P) = 3.5\% of outlay at 50¢). An arbitrage survives only by taking the good half of each.

No arbitrage is an answer

Same 50¢ contract, same side A, but now the book prices side B at +105 instead of +115:

A gap that does not survive its costs

fee-blind: 0.500000+12.05=0.987805<1    r=+1.23%\text{fee-blind: } \quad 0.500000 + \tfrac{1}{2.05} = 0.987805 < 1 \;\Rightarrow\; r = +1.23\%
fee-adjusted: 0.517500+12.05=1.005305>1    r=0.53%\text{fee-adjusted: } \quad 0.517500 + \tfrac{1}{2.05} = 1.005305 > 1 \;\Rightarrow\; r = -0.53\%
A tool that converts the contract price and stops prints +1.23% here. The panel flags no arb at these prices and prints −0.53% — there is no arbitrage, and taking both legs is a locked loss of 53 basis points. A gap that does not clear its costs is a result, not a failure to find one.

This is the same rule the rest of the site runs on: when the inputs contain no edge, no edge gets printed. Rounding a negative into “thin but positive” is how a spreadsheet turns into a slow leak.

Contracts are integers; stakes are not

The stake split is continuous, the exchange leg is not. Contracts come in whole units, so the two payouts almost never match to the cent and a small directional residual is left over. On the worked example, sizing from a $1,000 outlay:

C=SΣ=10000.982616=1017.7    1,017 contractsC = \dfrac{S}{\Sigma} = \dfrac{1000}{0.982616} = 1017.7 \;\longrightarrow\; 1{,}017 \text{ contracts}
exchange=1017×$0.50+0.07×1017×0.25=$508.50+$17.80=$526.30\text{exchange} = 1017 \times \$0.50 + \lceil 0.07 \times 1017 \times 0.25 \rceil = \$508.50 + \$17.80 = \$526.30
book=$1,0172.15=$473.02outlay $999.32locked $17.68=+1.77%\text{book} = \dfrac{\$1{,}017}{2.15} = \$473.02 \qquad \text{outlay } \$999.32 \Rightarrow \text{locked } \$17.68 = +1.77\%

At a thousand contracts the rounding costs two cents. At twenty contracts, on a market whose fee rounds up a full cent, it is a materially larger share — which is the same regressive-at-small-size effect the fee schedule has on its own. Round the contract count down and match the book stake to the contracts actually filled, not the other way round: the leg you can only buy in whole units is the one that sets the size.

Round trips are taxed twice

The locked figure assumes both legs run to resolution. Exchange fees are charged per trade and settlement is free, so unwinding the contract leg early adds a second fee of roughly the same size as the first:

exit near $0.50:0.07×1000×0.25=$17.50vs. a locked$17.38\text{exit near } \$0.50:\quad \lceil 0.07 \times 1000 \times 0.25 \rceil = \$17.50 \quad\text{vs. a locked}\quad \$17.38

One round trip on the exchange leg turns a $17.38 locked margin into a 12-cent loss, before whatever the exit price does to the hedge. The asymmetry is worth stating plainly because it inverts the usual intuition: on this pairing the illiquid path — sitting on both legs until the game ends — is the cheap one.

Execution risk, priced where it can be

The arithmetic above is exact. Everything that makes it wrong in practice is below.

Why the book-versus-book calculator cannot do this

The standard arbitrage calculator assumes both legs are quoted the same way: a price in, a payout out, all costs inside the number. Two sportsbooks satisfy that. An exchange does not — its cost arrives as a separate line item that scales with P(1P)P(1-P), peaking at a coin flip and shrinking toward the tails, which is the exact inverse of how a book’s margin behaves. Feed a raw contract price into a book-versus-book tool and it will systematically overstate the edge, worst of all in the middle of the price range where most game markets live.

The fix is the one line at the top of this page: adjust the contract leg to PP^{*} first, then the two legs are comparable and the ordinary arbitrage arithmetic applies unchanged.

Common mistakes

Sources

  1. Kalshi. “Fee Schedule” (July 2026 revision). — the taker formula, the round-up-to-the-cent rule, and the zero settlement fee that makes holding cheaper than trading out.
  2. Burgi, C., Deng, W. & Whelan, K. (2026). “Makers and Takers: The Economics of the Kalshi Prediction Market.” GWU Working Paper 2026-001. PDF. — taker cost and price behaviour across 300k+ settled contracts.
  3. Thaler, R. H. & Ziemba, W. T. (1988). “Anomalies: Parimutuel Betting Markets: Racetracks and Lotteries.” Journal of Economic Perspectives 2(2), 161–174.

Frequently asked questions

What is prediction market arbitrage?

Prediction market arbitrage is covering both sides of the same event across an exchange and a sportsbook so every outcome pays the same amount. It exists only when the contract’s fee-adjusted cost plus the book price’s implied probability sum below 100%, and on a two-venue market the exchange fee is usually what stops them.

How do you calculate an exchange versus sportsbook arbitrage?

Add the exchange leg’s fee-adjusted cost per contract to the inverse decimal odds of the book’s posted price on the opposite side. If that sum is below 1.00, the two legs cover each other for less than they pay. The locked return is 1 divided by the sum, minus 1, and the stake on each leg is proportional to its own term.

Why does the exchange fee kill most of these arbitrages?

Because it is charged on the leg that looks cheapest. A 50¢ contract taken as a taker costs 51.75¢ per $1 of payout, so the sportsbook has to price the other side better than +107.25 rather than better than +100. On a worked $982.62 position the fee took $17.50 of a $34.88 gross gap — a fraction over half.

What happens when the gap does not survive the fee?

The panel flags “no arb at these prices” and prints the shortfall rather than a locked profit. A 50¢ contract against a book at +105 sums to 0.5175 + 0.4878 = 1.0053, which is above 1.00, so both sides together cost more than they pay and the return reads −0.53%. Before the fee the same pair reads +1.23%, which is the number a fee-blind tool would show.

Does holding both legs to settlement matter?

It is the difference between the arithmetic holding and not holding. Exchange fees are charged per trade and settlement is free, so unwinding the contract leg early pays a second fee of roughly the same size. On the worked example that second fee is about $17.50 against a $17.38 locked margin, which turns the position negative.

Do the two legs always settle on the same rules?

No, and this is the risk least often priced. The exchange settles against the contract’s own written rulebook and the sportsbook grades against its house rules, and they can differ on overtime, abandonment, postponement and what counts as an official result. When the rules diverge the two legs are not the same event and the hedge is not a hedge.