
Denis Odoi
Value picture
Where the market, the likely price and the model estimates sit.
The model rates Denis Odoi's performance-implied value at EUR 0.1M-0.3M, above the estimated acquisition range of EUR 0.0M-0.2M. Its 24-month market value projection is EUR 0.1M-0.2M. Confidence is medium: no event-level data (xG, progressive actions) is available from the current free source, and injury history is unavailable.
Acquisition note: Contract end date unavailable: range widened by 15% each side.
Bargain Index: not assigned
What drives the score. Not a black box: each component and its level.
Market value below EUR 250k (outside validated pool)
| Performance | Average | 44.6th pct among DEF peers (age-neutral) |
| Age | Unfavorable | 38.1 years |
| Acquisition cost | Very favorable | est. €89k vs market €150k |
| Expected appreciation | Low | -15% over ~2 years (model) |
| Value gap | Very large | weak predictor on its own |
| Development | Low | |
| League translation | Uncertain | league coefficient 0.43 |
| Tactical fit | Not evaluated | Requires event/role data not available from the current free source. |
| Risk | Very High | |
| Data confidence | Medium |
Bargain Index = percentile (among all evaluated players) of expected 2-year value relative to estimated cost. See methodology and backtests.
Market value history
Market value ≠ transfer fee ≠ acquisition cost.
Profile vs positional peers
Percentiles among 1268 evaluated DEF players with 900+ minutes.
Performance (last season, league)
- Minutes
- 1513 (49% of available)
- Goals + assists / 90
- 0.00
- Context-adjusted G+A / 90
- 0.04
- xG, xA, progression
- Data unavailable
- Defensive actions
- Data unavailable
- Performance percentile
- 45 (Average)
Adjusted = shrunk toward positional baseline for small samples, corrected for team dominance over opponents, expressed relative to positional peers in the same league.
Context
- League strength
- 0.43 (rank 15)
- Team strength (Elo)
- 1118
- Opponent strength
- 1306
- Possession, role
- Data unavailable
League strength 1.00 = average club of the big-five leagues. Elo includes continental matches.
Potential
- Development
- Low
- Trajectory
- declining
- Breakout probability
- Age > 23
- Resale range (24m)
- €93k – €150k
Trajectory drivers: changed club; team strength down (-324 Elo); league level down (-91 Elo); role change DM -> CB; relative output down 54% vs positional peers.
Historical comparables (8): median 2-year value change +0% (IQR +0% to +0%).
Risk profile
Overall: Very High
- ▲Age 38: resale value typically declines.
- ⚠Limited sample: 1513 league minutes last season.
- ⚠League level coefficient 0.43 (1.00 = big-five average): output may not translate.
- ⚠No continental-competition minutes last season.
- ⚠Declining trajectory versus previous season.
- ⓘContract end date unavailable (or stale in source).
- ⓘInjury history unavailable from current data source.
League translation
What happened to players who moved from this league to the big-five leagues (observed, not a forecast).
- Historical movers
- 82 (DEF)
- Relative output kept
- 65%–166%
- Held a regular role (900+ min)
- 78%
- Confidence
- Medium
Output is relative to positional peers in each league. Movers are a selected group (clubs buy players who fit), so treat this as context, not a guarantee.
Season-by-season (domestic league)
Context-adjusted values are model outputs.
| Season | Club | League | Pos | Apps | Min | Min share | G | A | G+A/90 | Adj. G+A/90 | Opp. Elo | Team Elo | League str. |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2025/26 | NAC Breda | Eredivisie | CB | 19 | 1513 | 49% | 0 | 0 | 0.00 | 0.04 | 1306 | 1118 | 0.43 |
| 2024/25 | Royal Antwerp FC | Jupiler Pro League | DM | 18 | 1439 | 53% | 1 | 2 | 0.19 | 0.14 | 1398 | 1442 | 0.63 |
| 2023/24 | Club Brugge KV | Jupiler Pro League | RB | 17 | 568 | 21% | 1 | 0 | 0.16 | 0.10 | 1415 | 1541 | 0.63 |
| 2022/23 | Club Brugge KV | Jupiler Pro League | CB | 25 | 1890 | 62% | 0 | 0 | 0.00 | 0.02 | 1299 | 1491 | 0.58 |
| 2021/22 | Club Brugge KV | Jupiler Pro League | DM | 8 | 634 | 21% | 1 | 1 | 0.28 | 0.13 | 1336 | 1512 | 0.49 |
| 2020/21 | Fulham FC | Premier League | CB | 3 | 270 | 8% | 0 | 0 | 0.00 | 0.07 | 1472 | 1352 | 1.19 |
| 2018/19 | Fulham FC | Premier League | CB | 31 | 2594 | 76% | 0 | 1 | 0.03 | 0.07 | 1548 | 1350 | 1.22 |
| 2015/16 | KSC Lokeren (- 2020) | Jupiler Pro League | LB | 30 | 2693 | 100% | 1 | 2 | 0.10 | 0.10 | 1338 | 1331 | 0.57 |
| 2014/15 | KSC Lokeren (- 2020) | Jupiler Pro League | LB | 29 | 2610 | 97% | 0 | 3 | 0.10 | 0.09 | 1307 | 1382 | 0.54 |
| 2013/14 | KSC Lokeren (- 2020) | Jupiler Pro League | LB | 27 | 2380 | 88% | 0 | 0 | 0.00 | 0.03 | 1341 | 1398 | 0.49 |
| 2012/13 | RSC Anderlecht | Jupiler Pro League | CB | 10 | 617 | 23% | 0 | 3 | 0.44 | 0.14 | 1360 | 1554 | 0.56 |
Cups & continental competitions
| Season | Competition | Club | Apps | Min | G | A | Avg opp. Elo |
|---|---|---|---|---|---|---|---|
| 2023/24 | Uefa Conference League Qualifying | Club Brugge KV | 4 | 110 | 0 | 0 | 1388 |
| 2022/23 | Uefa Champions League | Club Brugge KV | 7 | 524 | 0 | 0 | 1673 |
| 2022/23 | Volkswagen Supercup | Club Brugge KV | 1 | 31 | 0 | 0 | 1420 |
| 2021/22 | Fa Cup | Fulham FC | 1 | 120 | 0 | 0 | — |
| 2020/21 | Fa Cup | Fulham FC | 2 | 37 | 0 | 0 | — |
| 2018/19 | Fa Cup | Fulham FC | 1 | 90 | 1 | 0 | — |
| 2014/15 | Uefa Europa League | KSC Lokeren (- 2020) | 6 | 540 | 0 | 0 | 1473 |
| 2014/15 | Uefa Europa League Qualifying | KSC Lokeren (- 2020) | 2 | 180 | 0 | 0 | 1436 |
| 2014/15 | Volkswagen Supercup | KSC Lokeren (- 2020) | 1 | 90 | 0 | 1 | 1440 |
| 2012/13 | Uefa Champions League Qualifying | RSC Anderlecht | 4 | 350 | 0 | 2 | 1402 |
| 2012/13 | Volkswagen Supercup | RSC Anderlecht | 1 | 90 | 0 | 1 | 1365 |
Small continental samples are shown for context only and are not over-weighted.
Historical comparables
Most similar profiles 2+ years ago (same position group) and what happened next. Chosen by similarity only — failures included.
| Player (then) | Age | Value then | ~2y later | Outcome |
|---|---|---|---|---|
| Bruno Alves Super League 1 · 2022 | 41 | €100k | €100k | flat |
| Paul Quasten Eredivisie · 2021 | 36 | €125k | €125k | flat |
| Egor Filipenko Premier Liga · 2024 | 36 | €150k | €150k | flat |
| Anton Ferdinand Scottish Premiership · 2019 | 34 | €300k | €300k | flat |
| Alan Maybury Scottish Premiership · 2014 | 36 | €150k | €75k | fell |
| Loukas Vyntra Super League 1 · 2020 | 39 | €100k | €100k | flat |
| Rubén Pulido Super League 1 · 2014 | 35 | €200k | €200k | flat |
| Ali Turan Super Lig · 2020 | 37 | €75k | €75k | flat |
Transfer history
Fees as reported by the source; undisclosed fees shown as unknown, never estimated.
| Date | From | To | Fee | MV at time |
|---|---|---|---|---|
| 1 Jul 2026 | NAC Breda | Without Club | Unknown | €150k |
| 24 Nov 2025 | Without Club | NAC Breda | Unknown | €200k |
| 1 Jul 2025 | Royal Antwerp | Without Club | Unknown | €250k |
| 1 Jul 2024 | Club Brugge | Royal Antwerp | Free / loan | €300k |
| 31 Jan 2022 | Fulham | Club Brugge | €700k | €500k |
| 14 Jul 2016 | KSC Lokeren | Fulham | €1.0M | €1.5M |
| 1 Jul 2013 | RSC Anderlecht | KSC Lokeren | Unknown | €1.3M |
| 1 Jul 2011 | Sint-Truiden | RSC Anderlecht | €1.5M | €1.5M |
| 1 Jul 2009 | OH Leuven | Sint-Truiden | Unknown | €200k |
| 1 Jul 2006 | OH Leuven U19 | OH Leuven | Unknown | Data unavailable |
| 1 Jul 2005 | KRC Genk U17 | OH Leuven U19 | Free / loan | Data unavailable |
| 1 Jul 2004 | Anderlecht U17 | KRC Genk U17 | Free / loan | Data unavailable |
| 1 Jul 2003 | Anderlecht Yth. | Anderlecht U17 | Unknown | Data unavailable |
MoneyballAI identifies statistical opportunities from available data. A player flagged as a potential bargain is not guaranteed to succeed, to transfer, to rise in value, or to generate resale profit. Market values, fees and contracts come from third-party sources; ranges are model estimates with stated confidence.