Prediction-Market Fees Explained: Polymarket vs Kalshi
"Zero fees" is the phrase that quietly kills marginal strategies. Both Polymarket and Kalshi charge real money to trade, the fee depends on the contract price, and the person crossing the spread pays it. If your edge is a couple of cents per contract, fees decide whether the strategy is profitable or just busy. Here is how each venue prices a trade, as of July 2026, and what it does to your net.
The shape both venues share
Both platforms price the taker fee off the same core shape: it peaks near a coin-flip price and shrinks toward the extremes. The reason is that p x (1 - p) is the variance of a Bernoulli distribution, largest at 50/50 and near zero at a near-lock or a longshot. A contract that is a genuine toss-up costs the most to trade; a 5-cent longshot or a 95-cent near-certainty costs the least.
The practical consequence is the same on both venues: because the formula multiplies through the price uncertainty term, it peaks near the midpoint and shrinks toward both ends. Coin-flip-priced contracts are the most expensive to trade; longshots and near-locks are the cheapest. If you have two contracts with similar expected value, the one further from the midpoint is cheaper to get into.
Kalshi: per-contract taker fee, makers usually free
Kalshi charges a trading fee at execution and nothing to hold a position to settlement. Kalshi makes money primarily one way: a small fee on each trade, with no spread markup beyond the public order book, no platform fee, and no charge to hold a position all the way to settlement.
The general taker formula uses a 0.07 coefficient, rounded up to the next cent per order. The fee is: ceil-to-cent of (0.07 x contracts x price x (1 - price)). At 50 cents that is the peak: 0.07 x 0.50 x 0.50 = 0.0175, or 1.75 cents per contract, the maximum fee per contract under the general schedule. Move away from the middle and it falls fast. At 10 cents the fee is 0.07 x 0.10 x 0.90 = 0.63 cents, already 64% cheaper than the 50-cent price.
Some Kalshi markets carry a separate maker fee, but most do not. Makers default to zero. Kalshi charges maker fees only on designated series, where the general maker multiplier is 0.0175. That is one quarter of the taker rate, so where a maker fee applies it is roughly 25% of the taker fee at the same price. Certain premium categories also use a higher taker coefficient than 0.07, so confirm the multiplier in the order ticket before sizing up.
Two things trip up new traders. First, every round trip is taxed twice: if you exit early by selling instead of holding to settlement, you pay the trading fee a second time on the way out, so every round trip is taxed twice, and holding a winning position to settlement is often cheaper than actively trading in and out of it. Second, funding is cheap: standard ACH bank deposits and withdrawals are free on Kalshi's side, while debit card deposits carry a 2% processing fee and wire transfers may carry fees from your bank. Kalshi does not add an additional fee on wire deposits.
Polymarket: taker fees by category, makers get paid
Polymarket ran fee-free for years and then rolled out a taker-fee model in stages through 2026. As of March 30, 2026, taker fees apply across nearly every market category. The core rule is the same asymmetry as Kalshi: makers are never charged fees, only takers pay fees. The dollar fee is symmetric around 50% probability, so a trade at 30 cents incurs the same dollar fee as a trade at 70 cents.
What differs is that the taker rate depends on the market category. Effective March 30, 2026, taker fees apply across: Crypto (fee rate 0.072, peak 1.80%), Sports (0.03, peak 0.75%), Finance, Politics, and Tech (0.04, peak 1.00%), Economics, Culture, Weather, and Other (0.05, peak 1.25%), and Mentions (0.04, peak 1.00%). Geopolitics and world events remain completely fee-free: Polymarket does not charge fees or profit from trading activity on those markets. On buy orders, fees are deducted from matched shares; on sell orders, fees are collected in pUSD. Note that sell orders are not subject to taker fees.
In percentage terms the peak fee at 50 cents reaches a maximum effective fee rate of 1.80% at 50% probability for the priciest category, dropping toward the extremes. There is also a floor: fees are rounded to 4 decimal places, the smallest fee charged is 0.0001 pUSD, and anything smaller rounds to zero, so very small trades near the extremes may incur no fee at all.
The maker side is not just free, it can be positive. Polymarket charges no maker fees and uses a portion of taker fees to fund maker rebates, redistributed daily in USDC to liquidity providers. The rebate share varies by category: 20% for Crypto, 25% for most other fee-bearing categories, and 50% for Finance. Finance's 50% rebate share is the highest on the platform and is widely read as a deliberate incentive to attract liquidity providers to a newly fee-bearing category. If you post resting limit orders, you pay nothing and collect a slice of what takers pay.
Gas and settlement
Polymarket's gas question is mostly a non-issue if you fund with pUSD on Polygon. Polymarket does not charge any fees to deposit or withdraw your pUSD, though third-party providers like Coinbase or MoonPay may have their own standard network fees. The costs that catch people come from the on-ramp, not the chain: depositing tokens other than pUSD on Polygon may result in extra costs due to swapping or bridging, including gas and provider fees, and depositing pUSD via Polygon typically minimizes these costs. Debit-card routes through third-party processors are where real percentage fees hide. Neither venue charges a separate settlement fee: on Kalshi you hold to resolution and collect $1 per winning contract with no exit fee.
How much this actually eats
The headline percentage understates the damage because fees are a share of contract value, not capital risked, and on Kalshi you pay twice on a full round trip. A concrete Kalshi round trip: trade 100 contracts at 50 cents, and as a taker crossing the spread your fee is round-up(0.07 x 100 x 0.25) = $1.75 in, plus roughly another $1.75 if you exit by trading, about $3.50 for the round trip. On a coin-flip contract where you risk 50 cents to win 50 cents, that is real drag on your break-even hit rate.
- Taker on a 50c contract is the worst case on both venues. Cross the spread only when the edge clearly clears the fee.
- Post limit orders when timing allows. Makers pay zero on Polymarket (and collect rebates) and usually zero on Kalshi.
- Trade away from 50c when expected value is similar. Fees at 20c or 80c are materially lower than at the midpoint.
- Count both legs on Kalshi. A round trip pays the taker fee twice unless you hold to settlement or rest one leg as a maker. On Polymarket, sell orders do not incur taker fees.
- Watch category on Polymarket. Geopolitics is free; crypto sits at the top of the range at 1.80% peak.
- Finance on Polymarket has the highest maker rebate at 50%, making resting limit orders especially attractive there.
The single most useful habit: model the fee before you trade, not after. Fee formulas and category rates have changed multiple times since early 2026, so wire the current schedule into your backtest rather than assuming a flat percentage.
Bake fees into the backtest
A strategy that looks profitable on mid-price fills often is not once the taker fee and the double-charged round trip are subtracted. If you are automating, the fee model belongs in the paper-trade loop against the live order book, not in a spreadsheet afterward. This is one reason Banger (bangertrades.com) paper-trades a Python strategy against live book depth before you commit capital: an edge that survives realistic maker/taker fees on both venues is the only edge worth running with real keys.
# Kalshi taker fee, per order, rounded up to the cent
import math
def kalshi_taker_fee(contracts, price, coeff=0.07):
raw = coeff * contracts * price * (1 - price)
return math.ceil(raw * 100) / 100 # ceil to next cent
# 100 contracts at 50c
print(kalshi_taker_fee(100, 0.50)) # -> 1.75
# round trip if you exit by trading: pay it again
print(2 * kalshi_taker_fee(100, 0.50)) # -> 3.50
# Polymarket taker fee (global, simplified formula, no exponent)
def polymarket_taker_fee(contracts, price, fee_rate):
# fee_rate: 0.072 crypto, 0.03 sports, 0.04 politics/finance/tech, 0.05 econ/culture/weather
return round(fee_rate * contracts * price * (1 - price), 4)
print(polymarket_taker_fee(100, 0.50, 0.072)) # -> 1.80 (crypto)
print(polymarket_taker_fee(100, 0.50, 0.04)) # -> 1.00 (politics)Confirm the live coefficient and category rate before sizing. Kalshi's general taker multiplier is 0.07 with maker at 0.0175 where charged, and premium categories can run higher. Polymarket's per-market fee schedule is the authoritative source for the category rate and exponent. Both venues reserve the right to change these, so re-check the official schedules for anything you are trading at scale.
Sources
- Fees - Polymarket Documentation
- Trading Fees | Polymarket Help Center
- Kalshi Fee Schedule (June 2026)
- Kalshi Fees Explained: The Real Cost of Trading (2026)
- Kalshi Fees 2026: Fee Schedule, Maker & Taker Rates Explained | pm.wiki
- Kalshi's fee structure, explained - Polytrage
- Polymarket Fees 2026: $0.75-$1.80 per 100 Shares (Full Table) | Start Polymarket
- Polymarket Fee Rollout - Pine Analytics
- Kalshi Help Center: Fees
- Prediction Market Fees: Kalshi, Polymarket, Robinhood & Coinbase | DeFi Rate