The dataset behind every number on this site
7,794 football (soccer) predictions, every one logged before kick-off, with the fair probability we derived, the price you could have taken, where the market closed, and what actually happened. Free to download and reuse with attribution.
Last rebuilt:
This file is a monthly snapshot, rebuilt on the 1st of each month. The live record (8,372 predictions so far) is updated every few minutes and has its own CSV: Track Record → · Live record (CSV; the value flags are in its value_* columns) ↓
What is in it
One row per prediction. The Pinnacle prices are the ones recorded when the prediction was logged or, if Pinnacle had no price then, the first quoted after logging and before kick-off (sometimes written in after the match). The fair probabilities are the sharp market with the bookmaker margin removed by a power devig. For soft prices before 21 September 2026, see the caveat below. Rows whose match was postponed or never played are marked void rather than silently dropped.
| Columns | What it holds |
|---|---|
kickoff_utc, league, country, home, away |
Kick-off in UTC, competition, country and the two teams. |
fair_prob_home / draw / away |
Margin-free probabilities for home, draw and away, devigged from the sharp market. |
pin_open_* / pin_close_* |
Sharp bookmaker prices at our first snapshot and at the close, per selection. |
best_soft_* / best_soft_book_* |
Best price we found across soft bookmakers when the prediction was logged, and which bookmaker offered it. Caveat: for rows logged before 21 September 2026 it is the highest soft price seen at any time before logging, not necessarily one still available at that moment, so it overstates what was bettable. From 21 September it is the best price live at logging. |
prediction_pick, prediction_odds_taken, prediction_closing_odds, prediction_clv_pct |
The selection we logged, the Pinnacle price recorded for it, the Pinnacle closing odds and the closing line value in percent. This CLV compares two raw Pinnacle prices (margin left in; the margin is usually smaller at the close), so it is not the devigged CLV we use for value flags. |
market_margin_min_pct, market_margin_avg_pct, books_priced |
Measured market margin on that match (lowest and average) and how many bookmakers were priced. |
result, prediction_won, void_reason |
Official 1X2 result, whether the prediction won, and why a row is void when it is. |
record_hash |
Fingerprint of the prediction as recorded: teams, kick-off, our model probabilities, the Pinnacle prices recorded for it (at logging or, if there were none, the first quoted after logging and before kick-off, which can be written in after the match) and the log time. It changes if any of those change, including a rescheduled kick-off. It does not cover closing prices, soft prices, margins or results. |
How to cite
The licence is CC-BY-4.0: use it for anything, including commercially, as long as you credit the source. A link is the credit we ask for.
TipsAudit (2026). TipsAudit Football Prediction Dataset: fair odds, closing line value and bookmaker margins. https://tipsaudit.com/data — CC-BY-4.0.
Frequently asked
Is this football odds dataset really free?
Yes, under CC-BY-4.0. You can use it in research, in a product, or commercially; the only condition is attribution to tipsaudit.com. There is no key, no sign-up and no rate limit on the file itself.
Where do the fair odds come from?
From the sharpest bookmaker prices we track, with the margin removed using a power devig, which strips proportionally more from longshots than a simple normalisation. The same figures drive the public pages, so anything you compute from the file should reproduce what the site shows.
Can I verify the data was not edited after the results were known?
Partly. record_hash fingerprints the values recorded for the prediction, including its kick-off time (a rescheduled kick-off changes it), and the full record is snapshotted daily to a public Git repository and timestamped with OpenTimestamps; timestamped snapshots are never overwritten, so a change to a past row shows up when you compare snapshots. Closing prices and results are added after the match and are not in the hash; check them by comparing snapshots. The repository’s corrections file lists the corrections we announced.