Football Odds Comparison & Line Movement
Pricing
from $2.00 / 1,000 market signals
Football Odds Comparison & Line Movement
Compare football odds across 9+ bookmakers for 22 European leagues. Best available price per outcome, best-price overround, average bookmaker margin, how much line shopping saves you, and open-to-close line movement.
Pricing
from $2.00 / 1,000 market signals
Rating
0.0
(0)
Developer
Titouan MARTY
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Compare football odds across 9+ bookmakers for 22 European leagues. For every match you get the best available price on each outcome, the real cost of that market once you shop every line, how much shopping actually saves you, and how far each bookmaker moved its prices between opening and closing.
This is a football odds API for anyone who cares about price rather than prediction: bettors comparing lines, modellers checking whether their edge survives the margin, and analysts studying how information reaches a market.
The number this Actor exists to produce
I measured the 2025/26 season across the big five leagues:
| What you pay | Average margin |
|---|---|
| A typical single bookmaker | 4.90% |
| The best available line, every outcome | 0.40% |
Shopping every line instead of accepting one bookmaker's prices cuts the cost of the same bet by roughly twelve times. On 1,000 bets that is the difference between paying 49 units of stake and paying 4.
That gap is not an edge and it is not a prediction. It is arithmetic, and it is the single largest controllable number in most people's betting P&L.
What you get
One dataset item per match:
| Group | Fields |
|---|---|
| Match | date, kick-off, home, away, status, league details |
| Best odds | the best available price per outcome across every quoting bookmaker, with obvious feed errors filtered out |
| Best-price overround | the implied-probability sum using those best prices. Negative means backing every outcome returns more than it costs |
| Average margin | what a typical bookmaker charges on the same match |
| Line-shopping gain | the difference between the two: your saving from comparing lines |
| Line movement | the largest open-to-close change, with the bookmaker and the outcome it happened on, plus whether the price shortened or drifted |
| Signal | a single ranked descriptor of what makes the match interesting |
Sample output
Real row, Ligue 1, Monaco vs Marseille. Trimmed to the interesting parts:
{"date": "2026-08-30","home": "Monaco","away": "Marseille","leagueInfo": { "code": "F1", "name": "Ligue 1", "country": "France", "tier": 1 },"status": "finished","market": {"bestPrice": { "home": 2.32, "draw": 3.80, "away": 3.40 },"bookmakerCount": 9,"closingAvailable": true,"impliedProbability":{ "home": 0.4309, "draw": 0.2684, "away": 0.3007 },"averageMargin": 0.0463,"fairPrice": { "home": 2.321, "draw": 3.726, "away": 3.326 },"lineMovement": {"B365.home": -0.2, "B365.draw": -0.2, "B365.away": 0.45,"Avg.home": -0.18, "Avg.draw": -0.18, "Avg.away": 0.47,"Max.home": -0.25, "Max.away": 0.45}},"signal": {"bookmakerCount": 9,"averageMargin": 0.0463,"closingAvailable": true,"bestOdds": { "home": 2.32, "draw": 3.80, "away": 3.40 },"bestPriceOverround": -0.0117,"isArbitrage": false,"shoppingGain": 0.058,"biggestMovement": { "book": "Avg", "side": "away", "change": 0.47, "direction": "drifted" },"absMovement": 0.47},"opportunity": { "kind": "shopping-gain", "score": 0.058, "label": "best line saves 5.80 pts vs average book" },"source": { "provider": "football-data.co.uk", "league": "F1", "season": "2627", "url": "https://www.football-data.co.uk/mmz4281/2627/F1.csv" }}
Read it as: the average book charged 4.63%, the best available line left −1.17%, so line shopping was worth 5.80 points on this match — and the away price drifted +0.47 from open to close.
Why the "best price" is filtered
A raw maximum across ten bookmakers is not trustworthy. On Mallorca vs Barcelona the unfiltered best prices produced a 58% arbitrage — impossible in a top division, and in reality one bookmaker's feed had gone stale on a long shot.
Any price more than 1.6× the median for that outcome is therefore discarded as a feed error. After filtering, the same match shows −0.38%, which is plausible. Filters that make a product look less exciting but more correct are the right trade.
Usage
Compare the big five leagues
{ "leagues": ["big-five"], "seasonsBack": 1 }
Only genuine arbitrage
{ "leagues": ["all"], "onlyArbitrage": true, "arbitrageThreshold": -0.02, "minBookmakers": 6 }
Where the money moved
{ "leagues": ["england"], "onlyMovement": true, "minMovement": 0.5 }
Upcoming fixtures and their current prices
{ "leagues": ["big-five"], "includeFixtures": true, "seasonsBack": 1 }
Leagues
E0 E1 E2 E3 EC (England) · SC0–SC3 (Scotland) · D1 D2 (Germany) · I1 I2 (Italy) · SP1 SP2 (Spain) · F1 F2 (France) · N1 (Netherlands) · B1 (Belgium) · P1 (Portugal) · T1 (Turkey) · G1 (Greece)
Presets: big-five · big-five-plus-second · france · england · all
Pricing
| Event | Charged | Covers |
|---|---|---|
market-signal | once per match returned | best odds, overround, margin, shopping gain, movement |
line-movement | once per match that actually moved | the movement detail |
minBookmakers (default 4) and maxItems both protect your budget. Tighten either to spend less.
Reliability
Built on the same engine as the Football Data API Actor, which means:
- The source is a downloadable CSV, not a web page. No browser, no proxy, no selectors to break.
- Tested against 1,482 real matches before release: median best-price overround 0.56%, median line-shopping gain 4.28 points.
- Every row carries its source URL.
Notes and limits
- A negative overround is not free money. Getting the best price on all three outcomes needs accounts at many bookmakers; the odds are snapshots rather than simultaneous quotes; and exchange prices carry commission this figure does not account for. Measured across 1,522 matches, the median best-price overround is +0.40% and roughly 7% of matches fall below −0.5%. That is why the default arbitrage threshold sits at −2%, not zero.
- Opening lines only for fixtures. A closing price does not exist before the market settles, so
closingAvailableisfalsefor upcoming matches. - Bookmaker coverage varies by division.
bookmakerCounttells you exactly how many fed each row. - This Actor provides market data only. It is not betting advice and it does not predict outcomes.
Related
From the same publisher, on the same engine and the same 22 leagues:
- Football Data API — the underlying match dataset: scores, statistics, opening and closing odds, Elo and form
- Football Stats & Elo Ratings — one row per club: Elo, record, home and away splits, form and scoring profile
Want to add location or social context to a fixture? Google Maps Scraper and Instagram Scraper pair well with this.
Support
Report a broken row or a missing bookmaker in the Issues tab of this Actor.