In plain English
A trader sees the same outcome priced at 67 cents on Polymarket and 71 cents on Kalshi. The screen shows a 4-cent gap. Buy YES at 67 on one venue, sell YES at 71 on the other, lock in 4 cents per contract. Easy money.
Except it almost never is. The gap on the venue UI is the gross spread before execution costs. The trade you actually have, after both venues take their fees and after the order book moves while you cross it, is usually much smaller. Sometimes it is negative. This entry is about the difference between the spread on the screen and the edge you can put in the bank.
Why a 4-cent gap is rarely 4 cents of profit
Three deductions stand between the apparent gap and the surviving edge.
The first is the Polymarket taker fee, which depends on category and on how close the contract price is to 50 cents. The second is the Kalshi taker fee, which follows a uniform parabolic formula across categories. The third is slippage on both legs, because an arb is a two-sided trade and the trader is crossing the book on both venues. None of these are visible on the venue UI. All three eat the spread.
On a 4-cent apparent gap near the centre of the price distribution, the three deductions together commonly leave less than 1 cent of net edge per contract. On a thinner book or a higher-fee category, they can take the trade negative. The retail playbook of clicking the gap and assuming the difference is profit is responsible for the bulk of unprofitable arbitrage on these venues.
How fees actually work on Polymarket and Kalshi
Polymarket international applies a category-specific taker fee that scales with price uncertainty. The simplified formula effective from March 2026 is:
fee = C × feeRate × p × (1 − p)
where C is the number of contracts, p is the contract price in dollars, and feeRate is a category coefficient. The headline rates, expressed as the peak fee at the 50/50 price point (where p × (1 − p) is maximised at 0.25), run from 0% on Geopolitics, 0.75% on Sports, 1.00% on Politics, Finance and Tech, 1.25% on Economics, Culture and Weather, up to 1.80% on Crypto. Geopolitics is the only fee-free category. Makers pay zero, and a portion of taker fees (typically 25%) is redistributed daily to makers as a rebate.
Kalshi charges takers a uniform parabolic fee across all categories:
Kalshi taker fee = ceil(0.07 × C × p × (1 − p)) per contract
rounded up to the nearest cent. The peak per-contract fee is 1.75 cents at p = 0.50 and drops symmetrically toward both extremes. Kalshi began charging makers in April 2025 at roughly a quarter of the taker rate, around 1.75% of (p × (1 − p)) per contract.
Both formulas produce the same shape: a parabola that peaks at 50/50 and falls toward the price extremes. The implication for arbitrage is direct. A spread on a contract priced near 50 cents faces the stiffest fee headwind on both venues. A spread on a long-shot priced at 5 or 95 cents pays a fraction of that.
Kalshi taker fee · round-trip cost at 3 price points
Trading near the centre of the price distribution costs roughly twice as much in Kalshi taker fees as trading the tails. Polymarket fees follow the same shape, with category-dependent peak rates.
What slippage costs you on a two-leg execution
Slippage is the difference between the price you expected to fill at and the price you actually filled at. On a single market order it is one-sided. On an arb you take it twice, once on each venue.
Two specific dynamics compound the cost. The first is order-book thinness past the top of book. The 4-cent gap shown on the screen is between the best bid on one venue and the best ask on the other, both good only for the resting size at that level. If 100 contracts sit at 71 on Kalshi but the next 500 are at 72 and 73, a 600-contract sell walks the book and the average fill price drops below 71. Sizing for the smaller of the two top-of-book quantities, not for the price you wish you could trade, is the basic defence.
The second is timing risk between the two legs. A retail trader without paired execution typically hits one venue first and then the other. Between the two clicks, the price on the second venue can move. If the gap was 4 cents at the start of the trade and 3 cents by the time the second leg lands, an entire cent of edge has evaporated to latency. Professional arbitrage desks address this by quoting both legs simultaneously through APIs. Most retail tooling cannot.
How to compute the fee-aware net gap
The pre-trade formula every arb candidate should pass through:
Net edge = (PA − PB) − FeeA − FeeB − Slippage
where PA and PB are the venue prices, FeeA and FeeB use the venue-correct formula and category, and Slippage is a budget for both legs combined, calibrated against resting size and order size. If net edge is zero or negative, the trade is not on. If net edge is positive but small (below 1 cent on a 4-cent apparent gap), a missed slippage estimate by half a cent flips the sign.
The discipline a serious arb stack imposes is to rank candidates on net edge, never on raw spread. Most retail screens display the apparent gap as the headline number. That ranking promotes arbs that look big and are uneconomic, and it buries arbs that look small and survive the costs. The 4-cent gap on the venue UI is rarely the trade. The half-cent net that survives, on a deep book at the right price point, often is.
How this lives in nijinn
The Cross-Venue Arbitrage Surface in nijinn computes net edge live on every cross-venue pair. It pulls both order books, applies the category-correct Polymarket taker fee and the Kalshi 0.07 · p · (1 − p) formula, deducts a slippage estimate sized to the trader’s order against the visible book, and ranks the universe by what is actually left. Apparent spread is displayed alongside, but the sort key is net.
The metric pairs naturally with annualised return ranking, which collapses net edge plus capital lock-up time into a single comparable number, and with P_user versus market price on the directional side. The discipline of subtracting fees before deciding the trade is on extends the same logic from arbitrage to every order placed.
A 4-cent gap on the screen is bait. The half-cent net that survives the costs is the trade.