We sell a $9, two-day tryout of the MLB Matched Book archive — 28 dated games across 2026-06-21 and 2026-06-22, Polymarket and Kalshi quotes sampled together. We wrote a script that computes every number below, and a second script that checks this post against the first script's output line by line. Nothing here is a trading signal, an entry/exit rule, or a backtest of any strategy — it's a description of what's actually in the file you'd be paying for.
Download the exact script we ran: first_insight_mlb_matched_tryout.py. Point it at your own copy of the ZIP and you'll get the same output.
What's actually in the ZIP
- 25,914 rows — matches the manifest's declared row count exactly.
- 28 dated
(date, game)keys — 15 games on 2026-06-21, 13 on 2026-06-22, matching the manifest exactly. - 26 games carry a final
won/winnerlabel; 2 do not (2026-06-21:CHC/TORand2026-06-22:CHC/NYM). - Every shipped file's SHA-256 matches the manifest.
- Coverage window: 2026-06-21T00:00:27Z through 2026-06-23T11:59:58Z — capture continues into the small hours of the next UTC day for evening games.
- Known gaps, straight from the shipped docs: doubleheaders are excluded outright; only one Polymarket outcome side is independently captured per game (the "other side" is a derived
1 - p, not a second observed book); sample cadence is ~30s, no bid/ask size, no in-play score field; the window can include post-final and even postponed-game quotes.
Columns: ts, date, game, team, poly_bid, poly_ask, poly_mid, kalshi_yes_bid, kalshi_yes_ask, kalshi_mid, xvenue_spread, winner, won, settled. There is no trade-print table, no order-book depth, and no score-synced field in this product.
Insight 1 — cross-venue quote spread (Polymarket vs. Kalshi)
xvenue_spread = poly_mid - kalshi_mid, computed on every one of the 25,914 rows:
| Stat | Value |
|---|---|
| Mean | -0.0011 (Polymarket mid runs about a tenth of a cent below Kalshi mid, on average) |
| Median | 0.0000 |
| 5th / 95th percentile | -0.0155 / +0.0150 |
| Mean absolute spread | 0.0067 (≈0.67c on a $1 contract) |
Splitting each game's window into four equal time buckets and averaging the absolute spread:
| Window quartile | Mean |spread| |
|---|---|
| Q1 (earliest samples) | 0.46c |
| Q4 (latest samples) | 0.76c |
Read: the two venues track each other closely — median spread is exactly zero, and 90% of rows sit within about ±1.5 cents. But the gap doesn't shrink toward the end of the window the way you'd expect if it were converging on a settled price; it's mildly wider late (0.76c vs 0.46c). That's consistent with the window extending well past game finality — once a game is decided, occasional stale or thin late-window quotes on one venue can widen the gap again. This describes what two captured quote streams did on 28 games; it's not a signal, and 28 games says nothing about any other day.
Data quality — manifest, hashes, book integrity, cadence
| Check | Result |
|---|---|
| Rows match manifest | yes (25,914 = 25,914) |
| Crossed Polymarket / Kalshi book | 0 rows each |
| Exact duplicate rows | 0 |
| Median inter-sample gap | 30.6 seconds |
| Games with a gap over 300s | 15 of 28 |
| Largest single gap | 11.66 hours |
The file is internally consistent with its own manifest, and the two book-sanity checks (crossed quotes, duplicates) come back completely clean. But more than half the games have at least one gap over 5 minutes. Pulling each game's own largest-gap boundary shows the 11.66-hour gap is not per-game at all — it's a single shared, day-wide capture-pipeline gap from 2026-06-21T01:31:55Z to 2026-06-21T13:10:44Z, identical to the second across 14 of 15 of that day's games. 2026-06-22 has zero gaps over 300s. This looks like a one-off capture outage on the tryout's first day, not routine per-game pregame quietness — check the shipped per_game_cadence.csv for your exact game before relying on continuous coverage.
Settlement-label check — the last row is post-game, not a prediction
Read this caveat first. The capture window for each dated game runs from 00:00 UTC through just before 12:00 UTC the next day — well past any MLB game's actual final out. So for settled games, the last captured row is almost always sampled after the game ended, when the market has already collapsed to near 0 or near 1. Checking "does the last row's mid agree with the won label" is a data-quality / label-integrity check, not a prediction — a model that "predicts" the winner from a post-result quote is not measuring skill, it's measuring that markets converge to the truth once the truth is known. This is the same near-terminal-price tautology behind our retracted CLV whitepaper; see that history if you want the longer version.
With that read in mind: taking the last-captured row per settled game (26 games), the recorded won label agrees with which side of 0.50 the quote sat on 100.0% of the time on both poly_mid and kalshi_mid — a check on the data, not a forecast of anything.
What we are not claiming
- No trading signal, no entry/exit rule, no edge, no back-test — see the settlement-label caveat especially.
- No claim this 2-day, 28-game sample generalizes to any other date. n=26 settled games is below the ≈30-observation floor this operation requires before drawing any conclusion.
- No depth/size, score-sync, or trade-print analysis — those fields don't exist in this product.
How this guide was checked
Every number above was produced by first_insight_mlb_matched_tryout.py running against a clean, freshly-extracted copy of the ZIP, then verified with a second script that asserts every figure appears verbatim in this text.
Try it yourself: download the script, then get the $9 two-day tryout.
As always: this is research and backtest data, not a trading signal.