The Scanner That Cried Arbitrage — Technical Teardown
The version with the receipts. Every claim from the plain-English writeup, with the numbers, the formulas, and the data behind it — so you can check the work, or reproduce it.
- Scanned the full Kalshi universe — ~6,800 events / ~28,900 markets (an event is one question; each holds several Yes/No markets, ~4.2 on average) — for six kinds of price-mechanical arbitrage. Raw flags: 293.
- All 293 fell into four buckets: fee illusions (edge < the fee), non-exhaustive sets (a missing outcome), wide-book mirages (edge vs. an untradeable price), and real-but-undoable (genuine, ~1 contract deep).
- The strict, honest test — every mutually-exclusive event where the Yes-asks actually sum below $1 — returned 3 hits out of 3,098 events, each worth $0–2.
- The survivors that persist are long-dated, so once you annualize the guaranteed profit over months of frozen capital, the yield is ~1–2%/yr — below a savings account.
- Net edge that beats cash, after fees, tails, book width, depth, and settlement lag: zero.
1 · The funnel
The whole pipeline in one table. The first two rows are from the July 2026 full-universe scan; the strict-test rows are the cleanest, most conservative version of the question.
| Stage | Count | What it means |
|---|---|---|
| Open events scanned | ~6,800 | distinct questions (e.g. "Best AI this month?", a temperature ladder); ~3,098 of them are mutually-exclusive — the kind the arb test can apply to. Full live universe, after a coverage bug that had capped it at ~2,000 events was fixed. |
| Open markets scanned | ~28,900 | the individual Yes/No contracts inside those events — ~4.2 per event — every one priced and checked |
| Raw structural flags | 293 | any of the six checks tripped, before honesty filters |
| — minus fee illusions | ↓ | gross-positive, net-negative after the taker fee |
| — minus non-exhaustive sets | ↓ | an outcome (e.g. "8+ bills") wasn't covered |
| — minus wide-book mirages | ↓ | edge measured against a price nobody would trade |
| — minus sub-depth | ↓ | real, but ~1 contract deep |
| Strict sum-violations (of 3,098 ME events) | 3 | Σ(Yes ask) genuinely < $1, exhaustive, real book — each worth $0–2 |
| Net edge that beats a savings account | 0 | after fees, tails, width, depth, and the settlement wait |
Note: I didn't preserve a clean per-category census of all 293 from that run — what's documented is the disposition logic and the representative kills below. The strict test (3 of 3,098) is the number that actually bounds the opportunity.
2 · The six checks
Prices are in integer cents; a Yes and its No on the same market are complements, so a missing No price is recovered as no_ask = 100 − best_yes_bid. For a group of k mutually-exclusive outcomes:
| Strategy | Fires when | What it exploits |
|---|---|---|
| All-No basket | Σ(no_ask) < (k−1)·100 | exactly one wins → k−1 No's pay $1 each |
| All-Yes complete set | Σ(yes_ask) < 100 | exactly one Yes pays $1 (needs an exhaustive set) |
| Favorite synthetic-No | Σ challenger no_ask − (k−1)·100 < fav_yes_ask | rebuild the favorite from rivals' No's, cheaper |
| Same-contract Yes/No | yes_ask + no_ask < 100 | one side always pays $1 |
| Deadline ladder | earlier_no_ask + later_yes_ask < 100 | "by Nov" implies "by Jan" → a locked payoff |
| Ladder monotonicity | earlier_yes_mid > later_yes_mid | impossible ordering → a mispricing flare |
3 · The fee is a hill, and it sits right on top of the edge
Kalshi's taker fee per contract is ceil( 0.07 · p · (1−p) ) in dollars, where p is the price as a probability. It's a parabola: near-zero for long shots and near-certainties, and largest — 1.75¢ — for coin-flips at 50¢. Structural edges are usually 1–2¢, so across the entire middle of the price range the fee alone is bigger than the edge.
4 · The four ways they died, with data
4a · Fee illusion
A representative near-coin-flip edge, before and after the fee:
| Market price p | gross edge | fee 0.07·p·(1−p) | net |
|---|---|---|---|
| 0.50 (coin flip) | 1.5¢ | 1.75¢ | −0.25¢ |
| 0.30 / 0.70 | 1.5¢ | 1.47¢ | +0.03¢ |
| 0.15 / 0.85 | 1.5¢ | 0.89¢ | +0.61¢ |
Only the extreme, illiquid tails survive — which sets up trap 4c and the depth problem.
4b · The list wasn't exhaustive — live data
The real market KXBILLSCOUNT (live on Kalshi ↗), "How many bills will President Trump sign," July 2026 edition — pulled live from Kalshi's public API. Eight buckets, 0 through 7, and no "8 or more."
| Bucket | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8+ |
|---|---|---|---|---|---|---|---|---|---|
| Yes ask | 5¢ | 13¢ | 26¢ | 28¢ | 8¢ | 8¢ | 7¢ | 8¢ | — |
| Sum of the set | 103¢ | no such bucket | |||||||
Today the set sums to 103¢ — above a dollar, so there's no even-superficial "free money" right now. But when the scanner first hit it, the asks summed to about 89¢, which looked like a guaranteed dollar for eighty-nine cents. That 11¢ "discount" wasn't a mistake — it was the market pricing the chance the count lands on 8, the outcome the bucket list omits. If it does, the whole all-Yes basket pays $0. (Some months this series did ship an "8 or above" catch-all; June and July didn't — inconsistency you cannot assume away.)
4c · Wide-book mirage
The favorite-synthetic check flagged a rugby "Tie" — a <1% outcome — as the "favorite," off a single stale ask. The book:
| Outcome | best bid (buy here) | best ask (sell here) | spread | tradeable? |
|---|---|---|---|---|
| Rugby "Tie" | 0¢ | 94¢ | 94¢ | no — 40¢+ wide, no real interest |
| (a healthy market, for scale) | 49¢ | 50¢ | 1¢ | yes |
The scanner "edge" was computed against that 94¢ ask. You could not transact one share near it. Rule added: reject a "favorite" whose book is wider than a set cap.
4d · Real, but one contract deep
The all-No basket that started the project (the "Best AI" market), from the source screenshot. Claude was the runaway favorite, so betting against it (buying No) is cheap at 11¢; the other three are long shots, so betting against them costs almost a full dollar each. Buy all four No's and exactly three must win — a guaranteed 300¢ for a cost of 298¢. Genuinely positive after fees, and about one contract deep.
| Leg (buy No) | No ask | fee/contract |
|---|---|---|
| Claude No | 11¢ | 0.69¢ |
| Gemini No | 93¢ | 0.46¢ |
| ChatGPT No | 95¢ | 0.33¢ |
| Qwen No | 99¢ | 0.07¢ |
| Total cost — the four No asks, summed | 298¢ | = 11+93+95+99 |
| Guaranteed payout — exactly 3 of 4 pay $1 | 300¢ | gross +2¢ |
| Net after fees · executable depth | ≈ +0.44¢ per contract · ≈ 1 contract deep | |
Theoretically ~$0.44 on 100 contracts; in reality the book supported roughly one, so the real take was under a nickel. A genuine edge you cannot size into.
5 · The capital killer: waiting
Even a real, deep, fee-surviving edge is judged on return, which needs two more numbers: capital tied up, and time. Using the all-No example — a guaranteed ~$2 on ~$298, i.e. 0.67% gross (or ~0.15% once you subtract the fee) — here's what the annual rate does as the settlement date moves out. I'll be generous and chart the gross figure:
| Settles in… | 1 day | 1 week | 1 month | 3 months | 6 months |
|---|---|---|---|---|---|
| Annualized return (gross) | ≈245% | ≈35% | ≈8% | ≈2.7% | ≈1.3% |
A savings account pays about 3%. On the generous gross edge, the arb clears that bar only out to ~11 weeks; net of the fee, nearer two.
6 · The clean sweep
The strictest version, run over every mutually-exclusive event on the exchange: does Σ(best Yes ask) < 100 — a genuine, exhaustive, real-book violation of the arithmetic?
| Events scanned | Genuine violations | Value each | Persisted > a few sec |
|---|---|---|---|
| 3,098 | 3 | $0–2 | 0 |
7 · Reproduce it yourself
None of this requires an account or a key — Kalshi's market data is public. The whole thing is checkable in an afternoon:
- Pull open events with nested markets:
GET external-api.kalshi.com/trade-api/v2/events?status=open&with_nested_markets=true, paging the cursor to the end (it's ~6,800 events; mind the ~2,000-per-page trap). - Keep the
mutually_exclusiveevents. For each, read every market'syes_ask_dollars(and recover No sides as1 − yes_bid). - Flag
Σ(yes_ask) < 1.00for the all-Yes check, orΣ(no_ask) < (k−1)for all-No. - Before believing any flag: confirm the set is exhaustive (an open-ended top bucket or a "Field"/"other" outcome), subtract the taker fee
ceil(0.07·p·(1−p))per leg, cap on book width, and cap size at the thinnest leg's depth. - Divide the surviving net by capital, then by days-to-settlement × 365. Compare to a T-bill. Watch it lose.
Sources: the 28,900 / 293 / 3,098→3 figures are from the July 2026 full-universe scan logged in the project's own records; the KXBILLSCOUNT bucket table is live API data pulled while writing this; the fee and annualization figures are direct from the formulas above; the "Best AI" basket is the original source screenshot.