API + MCP live · talk to us

// QUANT STRATEGIES

Market making on prediction markets 101

2026-07-16 · Mithril

Most prediction markets are thin. Thin books mean wide spreads, and wide spreads are an invitation: someone willing to quote both sides gets paid the spread for providing the liquidity everyone else complains is missing. On Kalshi the invitation comes with a sweetener — resting orders generally pay no trading fee on most markets, while takers pay a formula fee — so the economics of being the book are structurally better than the economics of crossing it.

This is the 101: what quoting a binary actually involves, how the money is made, and the two ways it is lost.

The basic loop

You pick a market whose fair probability you can estimate — say you think an event is 40% likely. You post a bid for YES at 38¢ and an offer at 42¢ (equivalently, on a binary, a bid for NO at 58¢). When a buyer lifts your offer and a seller hits your bid, you've bought at 38 and sold at 42: 4¢ of spread captured, no position remaining. Repeat.

The revenue line is simple:

text
gross spread PnL ≈ (half-spread) × (volume you trade)
                 = 2¢ × contracts, in the example above

Everything else in this post is about the costs that line ignores.

Why Kalshi's fee structure favors makers

Kalshi's standard taker fee is 0.07 × contracts × price × (1 − price) (price in dollars), rounded up to the next cent. At 40¢ that's about 1.7¢ per contract. Makers — resting orders that get filled — generally pay no trading fee on most markets.

That asymmetry does two things for you:

  1. Your spread revenue is (mostly) gross-is-net. A taker doing the same round trip pays ~3.4¢ in fees on ~4¢ of edge; you keep the 4¢.
  2. It disciplines your counterparties into paying you. Anyone who wants immediacy must cross your quote and pay the fee, which supports wider equilibrium spreads than fee-free books would show.

Polymarket has no exchange trading fee on most markets, for makers or takers, so the maker edge there is just the spread itself (minus Polygon gas considerations on settlement). Full fee details in Kalshi fees explained and the fee calculator.

Loss channel 1: inventory risk on a binary

You will not alternate neatly between buys and sells. Flow comes in runs, and after a run of sellers you are long a stack of YES contracts at your bid.

On a binary, inventory risk has a particular shape. Your position can't gap-lose more than its cost, but it can jump straight to zero at resolution — there is no gradual stop-out. The standard control is to skew quotes as inventory builds: long 500 contracts you might quote 36 bid / 40 offer instead of 38/42, making it cheaper for the market to take inventory off you and more expensive to give you more. Past a hard inventory cap, you pull the bid entirely.

Two rules of thumb:

  • Size quotes off your inventory limit, not the book. If you never want more than 1,000 contracts of exposure, don't show 500 on the bid at a time when one news headline can fill you three times before you react.
  • Price your skew off your own fair value, not the mid. In a thin book the mid is often just your own quotes reflected back at you.

Inventory that you can't shed becomes a directional bet, and directional bets should be sized like bets — see Kelly sizing on binary contracts.

Loss channel 2: adverse selection

The spread you capture from uninformed flow, you pay back — with leverage — to informed flow. Whoever hits your stale quote after news breaks knows something you don't yet.

Prediction markets concentrate this risk in time, and it gets worse as resolution approaches:

  • Scheduled information events. A CPI market is quiet for weeks, then all of its information arrives in one second at 8:30 AM ET. Quoting through the print at normal width is donating money to whoever parses the release fastest.
  • Resolution endgames. As an event's outcome becomes knowable — votes being counted, a game in its final minutes — the contract behaves like an option in the last hour of expiry: tiny time value, violent moves, and a counterparty pool that is increasingly only informed traders. Uninformed flow dries up precisely when toxicity peaks.

The defenses are boring and effective: widen or pull quotes around scheduled releases, cap quote size near resolution, subscribe to the fastest data you can get for the markets you quote, and treat a fill that instantly goes against you as a signal to re-mark, not to double down.

A useful accounting discipline is to split PnL per fill into spread capture vs post-fill markout (price move over the next N minutes). Consistently negative markouts mean you're being picked off; no amount of volume fixes that.

The napkin economics

Putting it together for a hypothetical Kalshi market you quote at 4¢ wide, 2¢ half-spread, no maker fee:

text
per-contract PnL ≈ half_spread
                  − adverse_selection_cost
                  − inventory_carry (unhedgeable drift while you hold)

breakeven: adverse selection + carry < 2¢/contract

The half-spread is observable up front; the other two terms are only measurable from your own fill data. This is why every serious maker's first project is not a quoting engine but a measurement pipeline — recording quotes, fills, and markouts. Related reading on measuring what your fills actually cost: execution quality on prediction markets.

Practical notes on the venues

  • Kalshi: REST + WebSocket at api.elections.kalshi.com/trade-api/v2; you'll want the WebSocket book and fill channels, and you should read the rate-limit and order-type details before designing a quoting loop — covered in rate limits and order types.
  • Polymarket: orders are EIP-712 signed messages to clob.polymarket.com; metadata from gamma-api.polymarket.com. Cancel-and-replace cycles mean signing throughput matters.
  • Both: you are managing quotes across two ID schemes, two auth models, and two failure modes. If you'd rather quote through one interface, Mithril fronts both venues with a single API, unified market IDs, and server-side risk limits (inventory caps and a kill switch are exactly the controls a quoting bot should not implement only client-side) — details at api.trymithril.com.

Where to start

Pick one or two markets you genuinely understand, quote small at wide spreads, and measure markouts from day one. Widen around news, skew off inventory, and pull quotes in the endgame. Market making on prediction markets is a real edge — but it's an edge in risk management and measurement wearing a trading strategy's clothes.

Fees and market rules change. Details above reflect public documentation as of July 2026 — always confirm against the venues' own docs before trading real money.

One API + MCP for Kalshi and Polymarket

Fee-aware routing, unified market IDs, and hard server-side risk limits — live today, free during beta.