How Kalshi Pricing Works: Bid, Ask, Depth and the Microprice

Kalshi does not set a price. It publishes a queue. Reading that queue properly — and knowing why the midpoint is the wrong answer — is the difference between a fair value and a number that looks like one. This is the method our board runs on.

Kalshi quotes a two-sided order book in whole cents: a best bid, a best ask, and the number of contracts resting at each. The fair price sits between them, but not at the midpoint — the microprice weights each side by the depth on the opposite side, so it leans toward whichever side is thinner.

The book is two stacks

Every contract has one book with two sides. Bids are resting buy orders: what someone will pay, and for how many. Asks are resting sell orders. A quote is four numbers, not two:

bid 49¢×800ask 51¢×200\text{bid } 49\text{¢} \times 800 \quad\big|\quad \text{ask } 51\text{¢} \times 200

Read: 800 contracts are bid at 49¢, 200 offered at 51¢, and the market is 2¢ wide. Prices tick in whole cents from 1 to 99. And because a contract pays $1 or $0, the two sides of the event are one book seen from two ends:

buy NO at 49¢    sell YES at 51¢PNO=1PYES\text{buy NO at } 49\text{¢} \;\equiv\; \text{sell YES at } 51\text{¢} \qquad P_{\text{NO}} = 1 - P_{\text{YES}}

That identity matters when you compare venues. Betfair quotes the same object as decimal back/lay odds; invert to probability first (P=1/dP = 1/d) and it is the same four numbers.

The midpoint is the lazy answer

Nearly every tool prints the midpoint and calls it fair value:

mid=bid+ask2=49+512=50¢\text{mid} = \frac{\text{bid} + \text{ask}}{2} = \frac{49 + 51}{2} = 50\text{¢}

It is cheap, it is symmetric, and it throws away half the information on the screen. Consider two books that a midpoint cannot tell apart:

Book A: 49×800  51×200Book B: 49×200  51×800\text{Book A: } 49 \times 800 \ \big|\ 51 \times 200 \qquad \text{Book B: } 49 \times 200 \ \big|\ 51 \times 800

Both mid at 50¢. But in Book A there are 800 contracts of demand queued against 200 of supply — the offers are about to be eaten, and the next print is far likelier at 51 than at 49. In Book B the pressure runs the other way. Queue imbalance is information, and the midpoint discards all of it.

The microprice

The fix is one line. Weight each side’s price by the depth resting on the opposite side:

microprice=bid×Qask+ask×QbidQbid+Qask\text{microprice} = \frac{\text{bid} \times Q_{\text{ask}} + \text{ask} \times Q_{\text{bid}}}{Q_{\text{bid}} + Q_{\text{ask}}}

where:

The cross-multiplication is the part that surprises people, and it is exactly right. A big QbidQ_{\text{bid}} means a long queue of buyers, which pulls the estimate up toward the ask — the thin side, the side about to get taken. The idea is Stoikov’s: the microprice is an estimator of where the price is going, not an average of where it has been.[1]

Worked example: same midpoint, two different fair values

Book A=0.49×200+0.51×800800+200=98+4081000=0.506    50.6¢\text{Book A} = \frac{0.49 \times 200 + 0.51 \times 800}{800 + 200} = \frac{98 + 408}{1000} = 0.506 \;\Rightarrow\; 50.6\text{¢}
Book B=0.49×800+0.51×200200+800=392+1021000=0.494    49.4¢\text{Book B} = \frac{0.49 \times 800 + 0.51 \times 200}{200 + 800} = \frac{392 + 102}{1000} = 0.494 \;\Rightarrow\; 49.4\text{¢}
A 1.2¢ gap the midpoint cannot see — and 1.2 probability points is larger than most edges anyone claims to find. Equal depth on both sides collapses the formula back to the midpoint exactly, which is the right behaviour: with no imbalance there is no information to add.

Two edges to handle explicitly rather than quietly. If one side is empty, QQ is zero and the weighted average degenerates onto that empty side’s own price — set Qbid=0Q_{\text{bid}} = 0 and the expression collapses to the bid, which is the limit of “lean toward the thinner side” taken to its extreme. It is also moot, because a side with no resting orders has no price to substitute in at all. Either way a one-sided book is not a market, and the shipped code returns no quote rather than a confident number. And a contract locked at 1¢ or 99¢ has nowhere left to tick; the microprice there is a floor artefact, not a probability.

Depth: the screen price is a price for a size

Top of book is a quote for the contracts sitting at top of book. Order more than that and you walk up the stack:

Buying 500 when only 200 are offered at 51¢

200 @ 51¢=$102.00,300 @ 53¢=$159.00    $261.00200 \text{ @ } 51\text{¢} = \$102.00, \qquad 300 \text{ @ } 53\text{¢} = \$159.00 \;\Rightarrow\; \$261.00
average fill=$261.00500=52.2¢\text{average fill} = \frac{\$261.00}{500} = 52.2\text{¢}
fees: 0.07×200×0.51×0.49+0.07×300×0.53×0.47=$3.50+$5.24=$8.74\text{fees: } \lceil 0.07 \times 200 \times 0.51 \times 0.49 \rceil + \lceil 0.07 \times 300 \times 0.53 \times 0.47 \rceil = \$3.50 + \$5.24 = \$8.74
all-in=$269.74500=53.95¢ per contract\text{all-in} = \frac{\$269.74}{500} = 53.95\text{¢ per contract}
The screen said 51¢. Your size paid 53.95¢ — almost three probability points of slippage, none of it visible in the quote. Any edge smaller than the slippage on your own order size is not an edge; it is a rounding error with a plan.

This is why the exchange lane stores (bid,ask,depth)(\text{bid}, \text{ask}, \text{depth}) per side rather than a single price. A feed that records only a midpoint has thrown away the ability to answer “at what size?” forever.

Two timestamps, always

A price without a clock is decoration. Every number on the board carries both:

The gap between those two is the whole story. A tight spread on a market nobody has touched in three hours is not a tight market; it is an abandoned one. The sharpest version we have seen live: a postponed game whose contract stayed open and quietly re-tickered, leaving a book of unrefreshed resting orders that manufactured a phantom 4.7% “arbitrage” on our own board. Stale data does not announce itself. It renders exactly like fresh data.

The failure nobody sees: a silently wrong book

Streaming an order book means holding state and applying deltas, and a dropped message leaves a book that is plausible and wrong — the worst possible outcome for a site whose entire promise is “check our math.” The exchange lane is built around that specific fear:

None of that is clever. It is just the difference between a number you can check and a number that happens to look right.

Quality gates, and the refusal

Before a venue’s price is allowed into a pooled fair value it has to clear gates:

That last one is the same principle as printing the honest $0 when the inputs contain no edge. A confident-looking consensus built on one thin book is a lie with a decimal point in it, and refusing to print it is the only version of this that is honest.

A price is still not an oracle

Even a clean, deep, freshly-updated microprice needs one correction before it is treated as a probability. Exchange prices carry the favorite–longshot bias: a 2026 study of 300,000+ settled Kalshi contracts found prices informative and sharpening toward close, while low-priced contracts won less often than the fee-adjusted break-even required.[2] The correction is the same power transform used to de-vig a sportsbook line, with the exponent fitted against settled markets rather than assumed:

pcal    Pk,k fitted on settled contractsp_{\text{cal}} \;\propto\; P^{\,k}, \qquad k \ \text{fitted on settled contracts}

Then prices from several venues are pooled in log-odds, the way any set of probability estimates should be combined:[3]

zˉ=iwiziiwi,zi=ln ⁣pi1pi    p=ezˉ1+ezˉ\bar{z} = \frac{\sum_i w_i z_i}{\sum_i w_i}, \quad z_i = \ln\!\frac{p_i}{1 - p_i} \;\Rightarrow\; p = \frac{e^{\bar z}}{1 + e^{\bar z}}

The starting weights are a heuristic anyone can reproduce — tighter spreads, deeper books and fresher quotes count for more:

wi=1si2×ln(1+depthi)×eΔti/τw_i = \frac{1}{s_i^{2}} \times \ln(1 + \text{depth}_i) \times e^{-\Delta t_i / \tau}

One rule underneath all of it: sharpness is a property of a market at a moment, not of a venue. No name on this site is hardcoded as trustworthy.

What we publish, and what we keep

The method above is open on purpose — it is the same technique described in how a sharp-consensus fair line is built, and you can run every step by hand. What the board publishes is result-level: the fair probability, its confidence, the agreement between venues, and the number of venues that qualified.

What stays private is narrow and specific: the fitted per-venue weights learned from settled outcomes, and the measured correlation structure between venues. Those are learned from every market that resolves, and they are the one thing here that cannot be forked off a package index. The technique is free. The ledger is the work.

The correlation point is not a detail, incidentally: two venues that arbitrageurs keep within a cent of each other are not two independent opinions, and pooling them as if they were manufactures false confidence. That arithmetic gets its own page.

Open the free prediction market odds converter →Contract price to American, decimal, fractional and implied probability — plus the fee-adjusted break-even.

Sources

  1. Stoikov, S. (2018). “The Micro-Price: A High-Frequency Estimator of Future Prices.” Quantitative Finance 18(12), 1959–1966. — the depth-weighted estimator and why it beats the midpoint.
  2. Burgi, C., Deng, W. & Whelan, K. (2026). “Makers and Takers: The Economics of the Kalshi Prediction Market.” GWU Working Paper 2026-001. PDF. — 300k+ settled contracts: informative prices, favorite–longshot bias after fees.
  3. Genest, C. & Zidek, J. V. (1986). “Combining Probability Distributions: A Critique and an Annotated Bibliography.” Statistical Science 1(1), 114–135. — the logarithmic opinion pool.
  4. Kalshi. “Fee Schedule” (July 2026 revision). — the taker fee used in the depth example.

Every formula here lives on the Formula Sheet for quick reference.

Check your understanding

Three quick questions. Pick an answer to see if it's right, and why.

Frequently asked questions

How does Kalshi price a contract?

It does not. Kalshi publishes an order book — the best bid, the best ask, and the contracts resting at each price — and the price is whatever two traders agree on. The exchange never takes a position; it matches a YES against a NO and charges a fee.

What is the microprice?

The microprice is a depth-weighted fair value: (bid × Q_ask + ask × Q_bid) / (Q_bid + Q_ask), where Q_bid and Q_ask are the contracts resting at the best bid and best ask. Each side is weighted by the size on the opposite side, so the estimate leans toward whichever side is thinner.

Why not just use the midpoint of the bid and the ask?

Because the midpoint throws away the size. A book of 49¢ × 800 against 51¢ × 200 and a book of 49¢ × 200 against 51¢ × 800 share a 50¢ midpoint, but the microprice reads 50.6¢ and 49.4¢. Queue imbalance is information, and the midpoint discards all of it.

Does the top-of-book price apply to any size?

No. A quote is a price for the contracts resting at that level. Buying 500 when only 200 sit at 51¢ and 300 more at 53¢ fills at an average of 52.2¢, and about 53.95¢ per contract once the taker fee is added — nearly three cents worse than the screen price.

What happens when the order book data is not trustworthy?

The board refuses to publish rather than print a confident number. Venues whose spread is too wide or depth too thin are dropped, outliers far from consensus are treated as data errors, and when fewer than two venues qualify no consensus is published at all.