Exchange fees / expected value
How exchange fees change the price and erode long-term gains
A small fee repeats every time you trade. Over a long sequence it can consume the entire pre-fee expected gain, even when the price looks attractive on each bet. Model the accumulated cost before treating a raw quote as a usable return.
Hold the bets and the pre-fee expected gain constant
Take 1,000 flat bets, each with a $100.00 base stake at decimal 2.00. Assume a true win probability of 51%, so the fair decimal price is 1.960784. The quote implies 50%. That gives a 2% pre-fee expected return, or $2,000.00 in expected return on $100,000.00 of base turnover.
The base stake stays fixed before fees. Pay entry fees separately rather than reducing the number of contracts, and do not reinvest returns. Each bet settles in its own market, so commissions on net market gains do not offset losses on other bets. Assume the same win probability throughout and no pushes, voids or slippage. These are expected values only.
More bets scale both terms. Repetition does not dilute a charge that applies on every entry or settlement.
What the fees take over 1,000 bets
| Schedule | Coefficient / commission | Net decimal quote | EV without added fee | Expected fees | EV after fee | Pre-fee expected gain consumed |
|---|---|---|---|---|---|---|
| Kalshi | 0.07 | 1.932 | $2,000.00 | $3,500.00 | -$1,500.00 | 175% |
| Kalshi MLB | 0.035 | 1.966 | $2,000.00 | $1,750.00 | $250.00 | 87.5% |
| Polymarket sports | 0.05 | 1.951 | $2,000.00 | $2,500.00 | -$500.00 | 125% |
| Polymarket NFL / college football | 0.03 | 1.970 | $2,000.00 | $1,500.00 | $500.00 | 75% |
| Novig live | 0.06 | 1.942 | $2,000.00 | $3,000.00 | -$1,000.00 | 150% |
| Novig pre-match | 0 | 2.000 | $2,000.00 | $0.00 | $2,000.00 | 0% |
| SX Bet | 1% | 1.990 | $2,000.00 | $510.00 | $1,490.00 | 25.5% |
| ProphetX | 2% | 1.980 | $2,000.00 | $1,020.00 | $980.00 | 51% |
| Betfair base | 5% | 1.950 | $2,000.00 | $2,550.00 | -$550.00 | 127.5% |
| Betfair elsewhere | 6.5% | 1.935 | $2,000.00 | $3,315.00 | -$1,315.00 | 165.75% |
| Matchbook base / enhanced special | 2% | 1.980 | $2,000.00 | $1,020.00 | $980.00 | 51% |
| Matchbook elsewhere | 4% | 1.960 | $2,000.00 | $2,040.00 | -$40.00 | 102% |
| 4Casters | 1% | 1.990 | $2,000.00 | $1,000.00 | $1,000.00 | 50% |
| 4Casters MLB moneyline | 0.75% | 1.993 | $2,000.00 | $750.00 | $1,250.00 | 37.5% |
| Fanatics Markets (fee already included) | Already in quote | 2.000 | $2,000.00 | $0.00 | $2,000.00 | 0% |
Kalshi's standard schedule costs $3,500.00 in this model. It consumes 175% of the pre-fee expected gain and leaves -$1,500.00. A positive raw-price calculation has become negative after the entry fee. Betfair's base schedule also crosses below zero. Lower charges still take a recurring share of the expected gain.
The published fee guide supplies the schedules. Account tiers and promotions change what you pay. Discounts, maker orders, country rules and order rounding also matter; use the applicable terms for your own calculation.
Charge the right cash flow
Per-contract entry fees
For contract price p and a unit payout, the fee is rate × p × (1 - p) per contract. Kalshi uses coefficient 0.07, with 0.035 on MLB. Polymarket sports uses 0.05, with 0.03 on NFL and college football. Novig uses 0.06 on live fills; pre-match has no entry fee under this schedule.
At the scenario's contract price of 0.50 and $1.00 payout, the base stake buys 200 contracts. Kalshi's fee is $0.0175 per contract, or $3.50 per bet. The all-in contract cost is the raw price plus the per-contract fee, giving an effective decimal quote of 1.932. You pay the entry fee whether the bet wins or loses. The table uses the large-order formula; Kalshi rounds each order up to the next cent in actual settlement.
Commission on winnings
SX Bet takes 1% of net winnings from takers; ProphetX takes 2% of net gains per market for straight bets. Betfair's default base rate is 5% in the UK, Ireland, Italy, Gibraltar and Malta, and 6.5% in most other countries. Matchbook uses 2% in the UK, Isle of Man, Channel Islands and Ireland, and 4% elsewhere. Its enhanced special markets use the lower rate for everyone; commercial accounts can incur additional fees.
Charges that need separate treatment
4Casters' standard commission is 1%, or 0.75% on MLB moneylines. Losing bets also incur commission. The table models commission on gains on wins plus commission on the losing base stake. The API's net_price only represents the payout on a win, so it omits that losing-bet cost.
Fanatics Markets includes the fee in price, with a published per-contract range of $0.00034 to $0.02. The row holds the offered decimal quote constant and adds no further fee. It cannot measure the fee already inside that quote. A comparison with a fee-free contract requires its underlying price and order size.
Model fees before accumulating expected returns
Store price, net_price and the market's fees object separately. For per-contract fees, decide whether your stake means total cash including fees or the contract purchase before fees. This worked example uses the latter. A fixed total-cash model buys fewer contracts and produces different dollar totals.
For commissions on net market gains, group positions by settlement market before applying the fee. Preserve country-specific rates and losing-bet charges. An absent fee field means the API has no applicable published schedule to attach; it does not establish that trading is free.
The recorded NBA comparison shows why this matters before any long-run calculation: adding the fee changes which book has the leading quote.
Questions
Can fees turn a positive expected return negative?
Yes. In this scenario the expected return before fees is $2,000.00. Kalshi's standard per-contract fee costs $3,500.00 over 1,000 bets, leaving -$1,500.00 in expected return. These are model outputs, not observed results.
Do these figures predict an account balance?
No. They are expected values under a fixed win probability and identical independent bets. Real outcomes vary, and account tiers, promotions, discounts and order rounding change what you pay.
Can I subtract another fee from an included price?
A price with fees.model equal to included already contains its trading fee. Adding the same fee again would double count it. You need a separate fee-free quote to estimate the cost already embedded.
Keep raw quotes and fee-adjusted prices together.
Request the published taker schedule with fees=taker on Starter or above. Keep your account's actual charges in the cash-flow model.
More from the blog
Prediction markets / price comparison
Kalshi and Polymarket vs sportsbooks in one call
A recorded NBA response, raw versus net quotes, and documented curl and Python examples for comparing the same fixture.
Read the post →API evaluation / testing
How to pick an odds API: a developer's test checklist
What to test during an odds API trial, how to measure each requirement, and what evidence to keep.
Read the post →NFL / line movement
NFL line movement explained: openers, steam and key numbers
Openers, closing lines, steam, key numbers 3 and 7, and why each book posts its own number. With real charts from last week's NFL games.
Read the post →Prediction markets / odds formats
Prediction market odds explained: convert a price to American odds
Turn a 62¢ contract into American odds and implied probability, and see how a market's spread and fees compare with sportsbook vig.
Read the post →CLV / +EV / no-vig
CLV and +EV explained: closing line value and no-vig fair odds
Remove the vig from a two-way market, price expected value, and measure CLV against the book's own closing line. Every step worked.
Read the post →