If you scrape Kalshi for a list of "mispriced markets" and trade the top of that list, you are almost certainly trading noise. We ran a read-only scanner over Kalshi's live, public order book — no API key, no authentication, just the same /events feed anyone can hit — to separate what is actually tradeable from what only looks like an opportunity. The results are a useful reality check before you point a bot at anything.

Updated May 2026. Extended with a repricing reality check (Mirage #4) after we ran a read-only movement scan on the same public feed — what the data actually showed, not a pitch for a "market movers" product.

This is a companion to our guide to Kalshi trading strategies and a deliberate counterweight to our signals catalog. Knowing what to watch is necessary; it is not sufficient. The book has to actually let you in.

And once a market does clear these filters, the next question is how much to stake — that is position sizing with the Kelly criterion, not a gut call.

How we measured "tradeable"

For every real market we took the YES bid, the YES ask, the size resting on each, and the volume. Two numbers decide whether a market is worth a bot's attention:

  • Spread = YES ask − YES bid. A 1–5¢ spread is a market you can round-trip; a 40¢ spread is a price, not a market.
  • Honest two-sided depth = min(YES bid size, YES ask size). Kalshi only quotes a size on the YES leg, so the most you can honestly claim is the thinner of the two sides. Quoting the bid size alone is how scrapers manufacture "deep" markets that you cannot actually exit.

We call a market tradeable only when spread ≤ 5¢ and depth ≥ 50 contracts. Everything below is why that gate is not conservative — it is the bare minimum.

Mirage #1: most of the "market list" is auto-generated

The first trap is upstream of any signal. Kalshi's unfiltered /markets endpoint returns on the order of fourteen thousand entries, and essentially all of them are auto-generated parlay combinations — "Team A wins and Team B wins and total > 210." The real, single-outcome markets a human would recognize only come from /events?with_nested_markets. A scraper that proudly "monitors 14,000 Kalshi markets" is monitoring ~14,000 mostly-synthetic combos with no independent liquidity. Classifying single vs. parlay is the entire difference between a usable universe and noise.

Mirage #2: single-market arbitrage is structurally impossible here

A whole genre of prediction-market content tells you to "buy YES and NO for less than a dollar and lock a profit." On Kalshi, that trade does not exist. NO is the mirror of YES by construction — the NO book is mechanically derived so that YES + NO ≈ 100¢ at all times. There is no book-sum gap to harvest on a single market, ever. If a tool reports single-market lock arbitrage on Kalshi, it has a bug, not an edge.

The only real structural arbitrage is field-sum: on a mutually-exclusive event (exactly one outcome can resolve YES), the YES prices across all outcomes should sum to ~100¢. Kalshi exposes a mutually-exclusive flag, which is the entire game. A naive field-sum scan flagged 25 "arbitrage" events; gating to genuinely mutually-exclusive events cut that to roughly 14 real candidates with zero false positives — and every surviving candidate was thin and longshot. That is the expected result: no free money sits unclaimed on a regulated venue. The discipline of the gate is the deliverable, not the 14 markets.

Mirage #3: the book is mostly wide and thin

This is the big one and the reason the first two matter. Run the spread-and-depth gate across the real single-market universe and the dominant finding is blunt: most markets are simultaneously wide and thin. A market can show a tantalizing 12¢ "edge" versus your model and be completely untradeable because the spread is 30¢ and there are nine contracts resting. Your signal was real; the market was a mirage.

This is why every honest scanner has to gate hard before ranking anything. Sort markets by raw model disagreement and the top of the list is wide, thin, longshot contracts — the exact markets where the "edge" is an artifact of an untradeable quote. Sort only the markets that clear spread ≤ 5¢ and depth ≥ 50, and the list gets short, boring, and real. Short-boring-real is the goal.

Mirage #4: a price "move" is not a reprice

A whole category of tools sells you a live "market movers" or "biggest movers" feed: this contract is up 18¢ in an hour, follow the money. The number is real arithmetic — current mid versus the venue's previous quote — but on a wide book it is almost entirely a wide-book illusion. A market quoting 2¢ bid / 95¢ ask has a meaningless 48¢ "mid"; the same book a minute later quoting 2¢ / 60¢ prints a 17¢ "move" that is the spread breathing, not information arriving. We ran the repricing scan over the same public /events feed: without a spread gate the headline list is dominated by exactly these illusions, and the spike-detector tools that sell movement as a signal quietly fade the very markets they surface.

The fix is the discipline of this whole page: gate on spread before you believe the move. A reprice that survives a tight spread gate is a genuinely different quote on a market you could actually trade — but it is still only a quote delta, not a validated signal. It says the market changed its mind; it does not say the market is wrong, and it is not a reason to trade by itself. Surface the move, size it to the depth that actually exists, and make it earn its place against a rule you defined in advance — the same gate that survives Mirages #1–#3.

What actually survives the filter

Not a scraped signal. What survives is a rule you define, sized for the depth that actually exists, and verified before you risk real money:

  • Gate first, rank second. Spread and depth are entry conditions, not tiebreakers. A bot that ranks first and gates never gets to the gate — it has already sized into a mirage.
  • Size to the thin side. Your max position is a fraction of min(bid size, ask size), not the headline volume. Volume is yesterday; resting size is now.
  • Respect the structure. Single-market lock arbitrage is not real on Kalshi; field-sum only on mutually-exclusive events. Build the platform's mechanics into the strategy instead of importing generic prediction-market folklore. Our arbitrage guide and market-making guide go deeper on each.
  • Prove it in paper mode. A strategy that looks profitable on scraped quotes and dies on real fills is the single most common failure we see — closely related to the accounting trap in why your bot's P&L is probably wrong. Paper-trade against the live book until the fills match the theory.

The uncomfortable summary: the edge is never in the list of markets. It is in the discipline you apply before the list. Most of what looks like opportunity on Kalshi is auto-generated, structurally impossible, or too thin to enter at size — and a scanner that does not say so out loud is selling you the mirage.

Build on the real book, not the mirage

Our bot builder gates every strategy on live spread and depth, sizes to the book that actually exists, and runs in paper mode against real Kalshi prices before a cent is at risk.

Build a Bot →

Frequently Asked Questions

Quick answers to common questions about Why Most Kalshi “Signals” Are Noise: A Real Order-Book Reality Check.

Can you arbitrage YES and NO on a single Kalshi market?

No. On Kalshi the NO book is mechanically derived from YES so that YES + NO is always approximately 100 cents. There is no single-market book-sum gap to capture. The only real structural arbitrage is field-sum across the outcomes of a mutually-exclusive event, and Kalshi exposes a flag for exactly that.

Why do my Kalshi signals look profitable but lose money live?

Usually because the signal was real but the market was untradeable. Most Kalshi markets are simultaneously wide (large spread) and thin (little resting size), so a model 'edge' evaporates the moment you try to fill at size. Gate every candidate on spread and depth before ranking, and size to the thinner of the bid and ask.

How many real markets does Kalshi actually have?

Far fewer than the raw /markets endpoint suggests. That endpoint is dominated by auto-generated parlay combinations. The real single-outcome markets come from /events with nested markets, which is the universe a bot should actually scan.

What spread and depth make a Kalshi market tradeable?

As a working floor, a spread of 5 cents or tighter and at least 50 contracts of honest two-sided depth, where depth is the minimum of the YES bid size and YES ask size. Markets that fail this gate should be excluded before any edge ranking, not traded on the strength of a model signal alone.

Should I trade Kalshi 'market movers' or biggest-mover feeds?

Treat them like any scraped signal. A 'move' is just current mid versus the previous quote, and on a wide book the mid is meaningless, so most headline movement is the spread breathing rather than information. Gate on spread first; a move that survives is a real quote change on a tradeable market, but it is still only a quote delta, not a validated signal, and not a reason to trade on its own.

MR

Marcus Rivera

Head of Quantitative Strategy

Marcus Rivera is Head of Quantitative Strategy at Bot for Kalshi. A former prop trader with a background in financial engineering, he now focuses exclusively on prediction market alpha. He's traded over $2M in prediction market volume across Kalshi and legacy futures exchanges.