1,996,154 timestamped tennis odds rows.
Snapshots from our own production collectors: moneyline and games totals, 59 bookmakers, 6,621 ATP and WTA matches in 2026 — with the file of matches and their results.
Choose your option
One purchase, one download: CSV + Parquet and a README documenting every column.
Tennis Line Movements 2026
From Feb 16, 2026 to Sep 22, 2026.
- 1,996,154 odds rows + the 6,621-match file
- Joins the Results & Odds archives on match_id
- CSV + Parquet
Download link valid 72 h, 5 downloads
Buy — €29Study the tennis market
Long format: one row per snapshot, bookmaker and market (moneyline and total on separate rows).
A price path
Every snapshot of one match, in order.
lm = pd.read_parquet("tennis_line_movements_2026.parquet")
lm[lm.match_id == lm.match_id.iloc[0]].sort_values("fetched_at")Compare bookmakers
Best available price per match and snapshot.
lm.groupby(["match_id", "fetched_at"]).odds_p1.max()Link to the result
Join the matches file shipped in the archive.
m = pd.read_parquet("tennis_matches_2026.parquet")
lm.merge(m[["match_id", "result"]], on="match_id")Cleaned: no snapshot dated after the match day.
Three collectors feed this file. One of them kept re-recording, for weeks, the last price of matches whose result never arrived: those repeats (same price, dated after the match) were removed and the collector fixed. Every snapshot is dated on or before the match day (for an evening match, before its scheduled start).
The scheduled start is included when known, and every snapshot says whether it was taken before it (before_scheduled_start column); a scheduled start is not the first serve. Moneyline is present in 75.6% of snapshots, total in 24.3%; 97.1% of matches carry a settled result in the matches file.
What's in the file — and what isn't
Included
- Moneyline and total (games, sometimes sets: total_unit column; handicap rarely offered)
- 59 bookmakers, 3 collectors
- Matches file: players, result, score, tournament
- Snapshots taken by the match day or before the scheduled start
- ProbWin layer, 2,742 matches: Pinnacle fair price without margin (power method), best closing price, its bookmaker and the price age — both for 2,447 matches
Not included
- Actual first-serve time
- Challenger and ITF circuits (almost absent)
- Matches not yet played
- Seasons before 2026
Every column, with its fill rate
Measured on the delivered file. 100% = no missing values.
Snapshot
Match, snapshot time (UTC), before/after scheduled start, collector, bookmaker
Odds
Moneyline, total (unit in total_unit: games or sets), handicap
The file, exactly as you'll get it
Six real rows, main columns. Download 50 free rows with every column to check it fits your pipeline.
| match_id | fetched_at | source | bookmaker | odds_p1 | odds_p2 | total_line | total_over | total_under |
|---|---|---|---|---|---|---|---|---|
| atp_20260305_42971_87512 | 2026-03-05 17:02:54 | multibook | betright | 2.15 | 1.7 | |||
| atp_20260426_27851_52394 | 2026-04-25 22:01:27 | multibook | virginbet | 1.73 | 2.04 | |||
| atp_20260528_47275_52934 | 2026-05-27 22:03:18 | multibook | betclic_fr | 1.01 | 21.0 | |||
| atp_20260531_29372_86691 | 2026-05-30 22:00:58 | multibook | livescorebet | 1.75 | 2.04 | |||
| wta_20260414_52646_54664 | 2026-04-14 12:06:27 | exchange | sxbet | 4.545 | 1.254 | |||
| wta_20260623_32308_43872 | 2026-06-23 06:09:41 | multibook | smarkets | 3.1 | 1.37 |
Before you buy
How do I get the file?
Right after payment a download link appears on screen and is emailed to you. The archive contains CSV and Parquet files plus a README documenting every column.
Can I use it in a commercial product?
Yes for your models, analyses and tools, commercial ones included. Reselling or redistributing the files themselves is not allowed.
A question before buying?
Email [email protected] — the founder answers, usually the same day.