New realtime endpoint: Ohio (AWS us-east-2, next to Kalshi) — Binance from Tokyo at ~64.1 ms one-way line latencyNew endpoint: Ohio · ~64.1 ms one-way line

Configure
Low-Latency Trading Solutions
CART
Prediction markets

Esports Match Markets: Maps, Handicaps and Best-of Series as Labels

LoL, CS2, Dota 2 and Valorant match, map and kill-total contracts with full order books: how best-of series become labels. €1 per series-day, no subscription.

10 min readPublished Oct 22, 2026

Esports markets look like sports markets and settle like them, but the object being priced is layered: a match is a series of maps, each map a game with its own winner, its own kill or round count and its own handicap. The venues price every layer. That makes an esports match the densest source of correlated labels in the prediction-market archive — and the easiest place to leak a backtest by treating those labels as independent. This guide lays out the vocabulary per title and venue, how a best-of series decomposes into labels, which contracts are spreads and totals in disguise, where in the file the information arrives, and how to split the data so that a model trained on one tournament is tested on another.

Everything below runs on the CryptoStruct archive: every message Kalshi, Polymarket and 35+ crypto venues publish — every Level-2 snapshot and update at full depth, every trade, every contract, every day since we added the venue — captured co-located with nanosecond venue and receive timestamps and a gap-audited event-id chain, in one normalized schema. It is the same capture our own trading engine and enterprise feeds run on, sold as €1 day bundles you buy as a guest in the Data Shop with instant download — no subscription, no minimum, no sales call. Free full-day samples let you run every command in this guide before paying.

Match, map, game — the vocabulary per title

In League of Legends a match is a best-of-one, -three or -five of games; Polymarket slugs say game1, game2, game3 (lol-kc-mvk-2026-10-18-game2) and the bare slug (lol-kc-mvk-2026-10-18) is the series winner. In Counter-Strike 2 and Valorant the unit is a map, and a best-of-three has a map-1, map-2 and map-3 winner plus the series winner; Polymarket keeps the game token for maps too (cs2-g2a-66661-2026-10-17-game1). Dota 2 follows the LoL pattern. On Kalshi the layers are separate series: League of Legends Game for the series result, Counter-Strike 2 Map Winner and Valorant Map Winner for individual maps, and total-maps series for the length of a best-of. predict.fun codes name the layer in the description part (lol-rb-mr-2026-10-27_game-3-winner_…).

The contract identifiers are therefore the first feature you parse: title, the two teams as the venue's codes, the event date and the layer. The series pages render that reading next to every identifier in their contract tables, and the same parse tells you which contracts of a day belong to one match.

A best-of series as label structure

A best-of-three yields up to four settled contracts: the series winner and one per map played. Each is a label in the same sense as a game moneyline — the last recorded print at or above 0.97 reads as Yes in our statistics, at or below 0.03 as No, always labelled implied, the venue's official settlement being the authoritative record. But the labels are not independent. The team that wins map one is more likely to win the series; the series contract reprices sharply on each map result; and the map-3 contract exists only if the series goes the distance, so its presence is itself information about the earlier maps.

For training this means the match is the example and the maps are its parts. Count labels per match when you size a dataset — a tournament weekend with forty best-of-threes is forty examples with up to 160 labels, not 160 examples — and never let two maps of one series fall on different sides of a train/test split. The upside is real: a map contract's whole book path from listing to settlement is short (typically a day or less in our 2026-10 measurement of the top-10 sample), so the features per label are compact and the examples accumulate quickly across a season of tournaments.

Map handicaps and kill or round totals

Beyond winners, the venues list two families that mirror traditional sports lines. A map handicap (-game-handicap-away-1pt5, -game1-round-handicap-<team>-6pt5) asks whether a team wins the series or a map by more than a line — a spread. A kill total in LoL or Dota (-game3-kill-over-45pt5) or a round total in CS2 and Valorant asks whether the count clears a number — a total. The 0..1 price, the book and the settlement work exactly as for a moneyline; what changes is the label noise, because a total settles on a count that can land on the line and a handicap on a margin.

LayerPolymarket / predict.fun identifierKalshi seriesMarket type
Series winnerlol-<a>-<b>-<date>, …_<a>-vs-<b>_…KXLOLGAME, KXCS2GAME, KXDOTA2GAME, KXVALORANTGAMEmoneyline
Map / game winner…-game1, …-game2, …_game-3-winner_…KXLOLMAP, KXCS2MAP, KXDOTA2MAP, KXVALORANTMAPmap winner
Map handicap…-game-handicap-away-1pt5, …-round-handicap-<team>-6pt5—spread
Kill / round total…-game3-kill-over-45pt5, …_o-u-4-5-games_…KXCS2TOTALMAPS, KXLOLTOTALMAPStotal

How the venues name the layers of an esports match (identifier forms as recorded, 2026-10).

Between maps: where the book moves

The most informative minutes of an esports series-day are the breaks between maps. A map ends; its contract runs to 0.99 or 0.01 within seconds; the series contract reprices to the new state of the best-of; and the next map's contract, which has been quoted thinly, suddenly carries the market's updated view of both teams. The day file records all three books through that transition with nanosecond timestamps — the depth pulled on one side before the official result is in, the spread widening and collapsing, the taker-buy share of the prints that drove the move. The contract tables on each series page show the open, high, low and close of a map contract on its day; a map that opened at 0.74 and closed at 0.999 spent most of its life somewhere between, and the file is where.

Features that follow from this: time since the previous map's settlement, the series contract's move on that settlement, the next map's book depth and spread at the moment the previous map settled, and the lag between the map result in the market and the venue's listed settlement. In-play features inside a map — kills, objectives — are not in the market data; they are an exogenous join you align by timestamp, exactly as polls are joined to election books in the election-markets guide.

Venue structure

Polymarket lists one family per title — LoL, CS2, Dota 2, Valorant — with every layer of every match inside it; in our 2026-10 window the Polymarket CS2 and LoL families were among the most traded sports families in the archive. predict.fun mirrors that structure with its own codes. Kalshi splits the layers into series — game, map, total maps — so a Kalshi series-day is one layer across every match of the day, and a reader who wants the whole match buys the same day across the sibling series. OG.com lists esports as one family. The esports topic hub groups all of them, and each title has its own hub beneath it.

Labels and leakage

Split by tournament and series, never at random. Maps of one best-of share form, draft and the same crowd; matches of one tournament share the patch, the format and often the venue. A random split over map contracts puts map two of a series in training and map three in test and learns the series result backwards. The honest protocol walks forward over events: train on tournaments that have finished, validate on the next one, purge any series still open at the cut-off, and report per tournament. Patches are regimes — a model trained before a major balance change has not seen the game it is tested on.

Read the favourite hit rate with its caption

Each series page prints how often the side favoured at the opening price finished in the money, over the day's most traded contracts. In esports those are the close matches and the deciding maps, so a figure near 50 % describes the sample, not favourites in general.

Data plan

  1. Pick a title and the layer you can label — series winners first, maps and totals once the match parser groups contracts correctly.
  2. Download the free sample contract of the series page and the full-day samples; parse the identifiers into title, teams, date and layer before anything else.
  3. Buy tournament days as ranges with /shop/bundles?bundle=<series-key>&d=<from>..<to>; on Kalshi, buy the same days across the game, map and total-maps series.
  4. Group contracts into matches, count matches as examples, and build the between-map features from the three books of a transition.
  5. Walk forward over tournaments, purge open series, treat patches as regimes, and report per event.

Coverage

SeriesVenueDaysCoverageSize
League of Legends esportsPolymarket404September 2025 – present90.6 GBBrowse days
Counter-Strike 2 esportsPolymarket398June 2025 – present111 GBBrowse days
Dota 2 esportsPolymarket401September 2025 – present33.9 GBBrowse days
Valorant esportsPolymarket363October 2025 – present36.7 GBBrowse days
League of Legends esportspredict.fun13October 2026 – present223 MBBrowse days
League of Legends GameKalshi235February 2026 – present17.8 GBBrowse days
Counter-Strike 2 Map Winner Kalshi232March 2026 – present26.6 GBBrowse days
Valorant Map WinnerKalshi232March 2026 – present8.08 GBBrowse days

Live archive coverage of the series discussed here (updates daily).

Everything is sold the same way as every other prediction series: €1 per series-day, no subscription, no minimum, no account — a series-day is every contract of the family listed on that UTC day.

Limitations

The statistics on series pages cover the ten most traded contracts per day — the bundle holds every contract, the statistics do not. Measurements quoted here are from 2026-10 and change as the archive grows. Polymarket files between 2025-09-16 and 2026-01-08 are affected by an adapter fault that left about half of them without order-book deltas (trades are complete); those days are sold as-is and marked in the shop. Kalshi trades between 2026-02-26 and 2026-03-10 were recorded twice by the first recorder — de-duplicate on the trade id. All venues have a late start on 2026-06-17. Map and series labels in our statistics are implied from the last recorded print, never the venue's official settlement. In-game events are not part of the market data. Venue APIs expose some historical market and trade data, but not the tick-by-tick book path — check the current docs. Nothing here is betting or investment advice.

Why CryptoStruct

Why buy the data in this guide here

Four things every page on this site is built on — and the reason the numbers above exist at all.

We record everything

The complete public feed of each venue as it was published: every Level-2 snapshot and update at the venue's full book depth, every trade with its aggressor side, every quote, funding, mark-price and liquidation event — for every instrument the venue lists, every UTC day since we added the venue. Nothing sampled, no top-N cut, no on-demand capture.

Institutional grade

Captured co-located at the venue with the exchange timestamp and our receive timestamp in integer nanoseconds, an event-id chain that makes any gap visible, and one normalized schema across 35+ venues — the same capture our own high-frequency trading engine and enterprise feeds run on.

€1 per instrument-day

Any instrument-day is €1, series-day bundles start at €1 — no subscription, no minimum order, no tiers to unlock. Credit packs lower the effective price and never expire, and every venue has free full-day samples to test against first.

Self-service for everyone

Pick the days in the Data Shop, pay by card as a guest and download immediately — no sales call, no enterprise contract, no KYC. Coding agents buy the same files through the MCP server, and the free Agent Skill teaches them the format.

Agents: /llms.txt · MCP server /mcp · every page as markdown via Accept: text/markdown

FAQ

Frequently asked questions

Does Kalshi have League of Legends map markets?

Yes — Kalshi lists LoL game winners, map winners and total-maps series, and the same layers for Counter-Strike 2, Dota 2 and Valorant; each is its own series and its own series-day bundle. Polymarket and predict.fun archive each title as one family with every layer inside.

How are best-of-three series represented in prediction-market data?

As one contract for the series winner plus one per map played, each with its own file, full order book and trade tape. The labels are correlated — treat the match as the example and its maps as parts, and never split one series across train and test.

Can I get CS2 match odds history with order-book depth?

Yes — the Polymarket, predict.fun and Kalshi CS2 series are recorded day by day with every trade and the complete Level-2 book per contract, nanosecond-stamped. €1 per series-day, no subscription, no minimum, no account.

Which esports titles are archived?

League of Legends, Counter-Strike 2, Dota 2 and Valorant on Polymarket and predict.fun, the Kalshi game, map and total-maps series for the same titles, and OG.com's esports family; the esports topic hub lists every live series and the coverage table above the ones discussed here.

CryptoStruct Research Team · Market data & trading infrastructure

The team that records tick data co-located at 36+ venues and runs the low-latency trading stack behind it, as part of the SSW Group.