Full Back · Metz · season-by-season, by competition, and every match.
Below his 2022/23 peak but holding a solid level — the platform for a return is there.
The record covers 6 seasons (2020/21–2025/26) across 2 clubs, including a move abroad — 192 appearances with 10 goal contributions from defence.
His best campaign on record is 2022/23 at Birmingham — Season rating 46, 2 goals and 3 assists in 44 games. 2025/26 was the leap — Season rating up 16 points at Metz. Output has held steady across his last 3 full seasons (19 → 27). The gap to his peak is 19 Season points.
Made the jump to a higher division in 2023/24 (Ligue 1) and kept playing — 22 games that season.
| Season | Club | Apps | G | A | Rating | Season |
|---|---|---|---|---|---|---|
| 2025/26 | Metz | 22 | 0 | 0 | 21 | 27 |
| 2024/25 | Metz | 29 | 0 | 0 | 19 | 11 |
| 2023/24 | Metz | 22 | 0 | 0 | 34 | 19 |
| 2022/23 | Birmingham | 44 | 2 | 3 | 43 | 46 |
| 2021/22 | Birmingham | 33 | 1 | 1 | 42 | 37 |
| 2020/21 | Birmingham | 42 | 1 | 2 | 51 | 46 |
| Competition | Apps | Min | G | A | Rating |
|---|---|---|---|---|---|
| Ligue 1 | 22 | 1700 | 0 | 0 | 6.6 |
| Coupe de France | 2 | 121 | 0 | 0 | 6.3 |
| Date | Competition | Opponent | Res | Status | Min | G | A | Rating |
|---|---|---|---|---|---|---|---|---|
| Jul 16 | Friendlies Clubs | H US Mondorf-les-bains | 1-0 | Not in squad | — | |||
| Jul 19 | Friendlies Clubs | H RED Star FC 93 | 4-0 | Not in squad | — | |||
| Jul 26 | Friendlies Clubs | A Lens | 1-2 | Not in squad | — | |||
| Aug 2 | Friendlies Clubs | A Estac Troyes | 1-0 | Not in squad | — | |||
| Aug 9 | Friendlies Clubs | A 1899 Hoffenheim | 0-8 | Not in squad | — | |||
| Aug 17 | Ligue 1 | H Strasbourg | 0-1 | Played | 14 | 6.5 | ||
| Aug 23 | Ligue 1 | A Lyon | 0-3 | Unused sub | 0 | — | ||
| Aug 31 | Ligue 1 | A Paris FC | 2-3 | Unused sub | 0 | — | ||
| Sep 14 | Ligue 1 | H Angers | 1-1 | Unused sub | 0 | — | ||
| Sep 21 | Ligue 1 | A Monaco | 2-5 | Played | 90 | 5.7 | ||
| Sep 28 | Ligue 1 | H Le Havre | 0-0 | Unused sub | 0 | — | ||
| Oct 4 | Ligue 1 | H Marseille | 0-3 | Played | 69 | 5.7 | ||
| Oct 19 | Ligue 1 | A Toulouse | 0-4 | Unused sub | 0 | — | ||
| Oct 26 | Ligue 1 | A Lille | 1-6 | Unused sub | 0 | — | ||
| Oct 29 | Ligue 1 | H Lens | 2-0 | Played | 90 | 7.3 | ||
| Nov 2 | Ligue 1 | A Nantes | 2-0 | Played | 90 | 7.0 | ||
| Nov 9 | Ligue 1 | H Nice | 2-1 | Played | 90 | 6.5 | ||
| Nov 23 | Ligue 1 | A Stade Brestois 29 | 2-3 | Played | 90 | 6.3 | ||
| Nov 28 | Ligue 1 | H Rennes | 0-1 | Played | 90 | 7.0 | ||
| Dec 7 | Ligue 1 | A Auxerre | 1-3 | Played | 90 | 6.6 | ||
| Dec 13 | Ligue 1 | H Paris Saint Germain | 2-3 | Played | 90 | 6.0 | ||
| Dec 20 | Coupe de France | A Biesheim | 3-0 | Played | 90 | 6.3 | ||
| Jan 4 | Ligue 1 | A Lorient | 1-1 | Played | 90 | 6.7 | ||
| Jan 11 | Coupe de France | H Montpellier | 0-4 | Played | 31 | 6.3 | ||
| Jan 18 | Ligue 1 | A Strasbourg | 1-2 | Played | 90 | 6.7 | ||
| Jan 25 | Ligue 1 | H Lyon | 2-5 | Played | 78 | 5.3 | ||
| Feb 1 | Ligue 1 | A Angers | 0-1 | Played | 31 | 7.2 | ||
| Feb 6 | Ligue 1 | H Lille | 0-0 | Unused sub | 0 | — | ||
| Feb 15 | Ligue 1 | H Auxerre | 1-3 | Played | 27 | 6.3 | ||
| Feb 21 | Ligue 1 | A Paris Saint Germain | 0-3 | Unused sub | 0 | — | ||
| Mar 1 | Ligue 1 | H Stade Brestois 29 | 0-1 | Played | 76 | 7.2 | ||
| Mar 8 | Ligue 1 | A Lens | 0-3 | Played | 90 | 6.9 | ||
| Mar 15 | Ligue 1 | H Toulouse | 3-4 | Played | 90 | 6.3 | ||
| Mar 22 | Ligue 1 | A Rennes | 0-0 | Played | 90 | 6.9 | ||
| Apr 5 | Ligue 1 | H Nantes | 0-0 | Played | 63 | 6.9 | ||
| Apr 10 | Ligue 1 | A Marseille | 1-3 | Played | 82 | 6.3 | ||
| Apr 19 | Ligue 1 | H Paris FC | 1-3 | Calf Injury | — | |||
| Apr 26 | Ligue 1 | A Le Havre | 4-4 | Not in squad | — | |||
| May 2 | Ligue 1 | H Monaco | 1-2 | Unused sub | 0 | — | ||
| May 10 | Ligue 1 | H Lorient | 0-4 | Unused sub | 0 | — | ||
| May 17 | Ligue 1 | A Nice | 0-0 | Played | 90 | 7.3 |