Kalshi Chess Market-Making — Research & Data Capture

kalshi-mm • 2026-06-01

TL;DR

We're exploring market-making chess tournaments on Kalshi. Tonight was research + infrastructure: confirmed the opportunity is real but unproven, settled the one time-critical technical question (orderbook depth is live-only, not recoverable later), and shipped a read-only logger now capturing every open chess market on the VPS. The ultimate target is the Sinquefield Cup (Aug 8-21); live Norway Chess (ends June 5) is our proxy dataset to learn the microstructure first.

The thesis

  • Chess markets on Kalshi are real and recurring (~8-12 series/year + a monthly FIDE-rating market), but tiny - sports is 80%+ of platform volume.
  • That thinness is both the opportunity and the risk: little competition + Kalshi liquidity incentives ($10-$1,000/day per market) on one side; low volume + adverse selection from informed chess bettors on the other.
  • Almost nobody is market-making chess specifically. Generic Kalshi MM is well-trodden (open-source bots, full API), but chess is an open niche.
  • The edge is likely incentive capture, not spread capture - and an early data point supports this: spreads on the Norway favorites are already tight (1c on Carlsen/Firouzja).
  • Research findings

  • Retroactive (pullable anytime): 1-min candlesticks (with bid/ask OHLC), trades, settled-market metadata.
  • Live-only (gone forever if not captured): full orderbook depth + sub-minute book state. This is why we built a logger tonight - the MM edge lives in exactly this data.
  • Auth surprise: read-only market data (including full orderbook depth) works with a plain Bearer token - or even no auth. No RSA-PSS signing needed for reads. We reused the existing SharpLab Kalshi key.
  • Calendar: after Norway Chess there's a June-July lull (ideal build window), then a dense August cluster: Saint Louis Rapid & Blitz (Jul 31-Aug 7), Sinquefield Cup (Aug 8-21), GCT Finals (Aug 21-28).
  • What we built

    A read-only async REST logger (~/code/chess/kalshi-mm), deployed as the kalshi-chess-logger systemd service on the VPS (/opt/kalshi-chess-logger, auto-restart on failure). It:

  • discovers all open chess markets across every series
  • records top-of-book (best bid/ask, volume, OI) every ~8s - cheap, one call per series
  • records full orderbook depth per market (~5s for live Norway, looser for slow futures)
  • writes SQLite: markets, tob, book tables
  • It places zero orders - pure capture. The order path (authenticated, RSA-signed) comes later, only after the strategy is built.

    Live data we're capturing right now

  • 63 open chess markets: Norway Chess (12), World Championship (9), FIDE rating (42)
  • Verified live on the VPS: depth ladders flowing, snapshot lag ~5s, no rate-limit errors
  • Example - Norway men's winner market (latest implied win probabilities + spread):
  • \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1
    \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1
    \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1
    \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1
    \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1
    \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1

    The plan

    1. Now -> June 5: capture Norway Chess as the proxy lab (running).

    2. June-July (the lull): analyze the depth data - real spreads, depth profiles, how books move around games, realistic incentive capture vs. adverse-selection bleed - and build the MM strategy.

    3. Aug 8-21: deploy on the Sinquefield Cup (with an authenticated order path added by then).

    Open questions / risks

  • Does the incentive pool beat the adverse-selection bleed on thin chess books? This is the whole question; the Norway data will size it.
  • Tight spreads observed (1c on favorites) mean little spread-capture room - reinforces that the edge is incentives, not the spread.
  • Adverse selection is the chess-specific killer: strong public engines mean informed traders pick off stale quotes in the seconds after a board event. Sub-minute depth data will let us measure how fast books go toxic.
  • Sinquefield series ticker unconfirmed: KXSINQUEFIELD is dormant (0 markets now). Must verify the exact ticker before Aug 8 so capture auto-starts - it may live under a GCT umbrella.
  • Recommendations (next session)

    1. Let it run - nothing needed now; data is accumulating through June 5.

    2. First analysis pass once a few rounds are captured: spreads, depth profiles, and book toxicity around game start/finish - to start sizing the real edge.

    3. Verify the Sinquefield ticker before August (tracked as a task).