# Example: Sports replay

The same game trades on **Kalshi** and **Polymarket US** at once, and the two prices should match. The sports replay plays back real recorded games and shows the moments they don't: when both sides could be bought for under $1 after both venues' fees, and which venue reacted to a play first.

<p><a class="docs-cta" href="/sports/replay">Open the replay →</a></p>

<video src="/videos/docs/sports-replay.mp4" poster="/videos/docs/sports-replay.jpg" autoplay muted loop playsinline controls preload="metadata" aria-label="The sports replay: Miami vs Notre Dame on Nov 7, both venues' prices on one clock with green dots for arbitrage gaps. A gap at 7:36 PM ET is opened: Kalshi drops on a play, Polymarket US follows, and the cost of both sides dips under $1.00 for 71 ms."></video>

*Miami vs Notre Dame, Nov 7. At 7:36 PM ET Kalshi dropped on a play before Polymarket US did, and for 71 ms both sides cost 98.6¢ a contract, fees in.*

## What it shows

- **The game chart.** Both venues' price for one team to win, for the whole game, on one clock. Blue is Kalshi, orange is Polymarket US.
- **Green dots: arbitrage gaps.** Moments when buying one team on one venue and the other team on the other cost under the $1 a contract that pays out, after both venues' taker fees, at the depth on the books.
- **Inside a gap.** Click a dot to zoom into the milliseconds around it: one venue moves first, the other a beat behind, and the cost of both sides dips under $1.00.
- **Play.** Replays a whole game in about 2 minutes.

## What we found

38 games on the night of Nov 7, 2026, mostly college football, game winners only:

| | |
|---|---|
| Times a gap opened, after fees | 303 |
| How long a gap stayed open (median) | 63 ms |
| Gaps before a game started | 0: they only happened during play |
| Big price moves where Kalshi moved first | 858 |
| Time for Polymarket US to follow (median) | 209 ms |

The gaps are real but brief. Kalshi usually reacts to a play first, and Polymarket US catches up in a fraction of a second. A bot only gets to act on one if it sees every price change as it happens.

## Is the data real?

Yes. Layer's recorders save every order-book change on both venues, around the clock, and nothing here is simulated. Two things are worked out rather than observed:

- **Profits are on paper.** No trades were placed. A dollar figure means the books showed that much at those prices, after fees. Whether an order would have filled is unknown.
- **Times are when Layer received each change.** The two recorders' clocks can differ by 20–100 ms.

## How it was made

1. **Record.** Layer's recorders save every order-book change from Kalshi and Polymarket US.
2. **Replay.** For one night of games, both venues' books are rebuilt for every game Layer has matched across them. At every change, the replay checks whether both sides can be bought for under $1 after fees, for how many contracts and for how long, and which venue moved first.
3. **Show.** The results are small files the page reads and draws in your browser. There's no server behind it.

## Build on it

- [`GET /v0/sports/spreads`](https://uselayer.sh/docs/api.md#get-v0-sports-spreads): the spread on every NBA, NFL, NHL and college football game that's live or starts in the next 24 hours, priced after both venues' fees.
- [Layer Sports](https://uselayer.sh/sports): the live spreads and who leads whom.
- [Example bot: Spread](https://uselayer.sh/docs/spread.md): a bot you can clone that compares venues and scans for gaps.
