Last 5 Matches
| Performance | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Date | Day | Comp | Round | Venue | Result | Squad | Opponent | Start | Pos | Min | Gls | Ast | PK | PKatt | Sh | SoT | CrdY | CrdR | Fls | Fld | Off | Crs | TklW | Int | OG | PKwon | PKcon | Match Report |
| 2026-04-29 | Wed | Premiership | Matchweek 13 | Away | W 1–0 | Mamelodi Sundowns | Polokwane City | N | 29 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 2 | 1 | 0 | 0 | 0 | 0 | 0 | Match Report | |||
| 2026-04-26 | Sun | Premiership | Matchweek 26 | Away | D 0–0 | Mamelodi Sundowns | Richards Bay FC | N | 22 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | Match Report | |||
| 2026-03-01 | Sun | Premiership | Matchweek 19 | Home | W 3–1 | Mamelodi Sundowns | Sekhukhune United FC | N | 11 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | Match Report | |||
| 2026-02-24 | Tue | Premiership | Matchweek 18 | Away | W 1–0 | Mamelodi Sundowns | AmaZulu | N | 15 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | Match Report | |||
| 2026-02-18 | Wed | Premiership | Matchweek 17 | Away | W 2–1 | Mamelodi Sundowns | Orlando Pirates | N | 12 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | Match Report | |||
| Playing Time | Performance | Per 90 Minutes | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Country | Comp | MP | Starts | Min | 90s | Gls | Ast | G+A | G-PK | PK | PKatt | CrdY | CrdR | Matches | |||||
| 2016-2017 | 20 | Lille | fr FRA | 1. Ligue 1 | 0 | 0 | Matches | |||||||||||||||
| 2016-2017 | 20 | Valenciennes | fr FRA | 2. Ligue 2 | 9 | 7 | 686 | 7.6 | 2 | 0 | 2 | 2 | 0 | 0 | 0 | 0 | 0.26 | 0.00 | 0.26 | 0.26 | 0.26 | Matches |
| 2017-2018 | 21 | Valenciennes | fr FRA | Coupe de France | 1 | 1 | 120 | 1.3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | Matches |
| 2017-2018 | 21 | Valenciennes | fr FRA | 1. Coupe de la Ligue | 3 | 0 | 101 | 1.1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0.89 | 0.00 | 0.89 | 0.00 | 0.00 | Matches |
| 2017-2018 | 21 | Lille | fr FRA | 1. Ligue 1 | 14 | 14 | 1,184 | 13.2 | 5 | 0 | 5 | 5 | 0 | 0 | 1 | 0 | 0.38 | 0.00 | 0.38 | 0.38 | 0.38 | Matches |
| 2017-2018 | 21 | Valenciennes | fr FRA | 2. Ligue 2 | 20 | 19 | 1,512 | 16.8 | 8 | 2 | 10 | 8 | 0 | 1 | 2 | 0 | 0.48 | 0.12 | 0.60 | 0.48 | 0.60 | Matches |
| 2018-2019 | 22 | Strasbourg | fr FRA | Coupe de France | 1 | 1 | 75 | 0.8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | Matches |
| 2018-2019 | 22 | Strasbourg | fr FRA | 1. Coupe de la Ligue | 3 | 2 | 202 | 2.2 | 2 | 0 | 2 | 2 | 0 | 0 | 0 | 0 | 0.89 | 0.00 | 0.89 | 0.89 | 0.89 | Matches |
| 2018-2019 | 22 | Strasbourg | fr FRA | 1. Ligue 1 | 32 | 18 | 1,771 | 19.7 | 9 | 2 | 11 | 8 | 1 | 1 | 3 | 0 | 0.46 | 0.10 | 0.56 | 0.41 | 0.51 | Matches |
| 2018-2019 | 22 | Lille | fr FRA | 1. Ligue 1 | 3 | 3 | 253 | 2.8 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0.36 | 0.00 | 0.36 | 0.36 | 0.36 | Matches |
| 2019-2020 | 23 | Strasbourg | fr FRA | 1. Coupe de la Ligue | 0 | 0 | Matches | |||||||||||||||
| 2019-2020 | 23 | Strasbourg | fr FRA | 1. Ligue 1 | 21 | 12 | 1,047 | 11.6 | 3 | 3 | 6 | 3 | 0 | 0 | 0 | 0 | 0.26 | 0.26 | 0.52 | 0.26 | 0.52 | Matches |
| 2021-2022 | 25 | Strasbourg | fr FRA | Coupe de France | 1 | 0 | 15 | 0.2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | Matches |
| 2021-2022 | 25 | Troyes | fr FRA | 1. Ligue 1 | 13 | 5 | 522 | 5.8 | 2 | 0 | 2 | 1 | 1 | 1 | 1 | 0 | 0.34 | 0.00 | 0.34 | 0.17 | 0.17 | Matches |
| 2021-2022 | 25 | Strasbourg | fr FRA | 1. Ligue 1 | 1 | 0 | 1 | 0.0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | Matches |
| 2022-2023 | 26 | Strasbourg | fr FRA | Coupe de France | 1 | 0 | 50 | 0.6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | Matches |
| 2022-2023 | 26 | Strasbourg | fr FRA | 1. Ligue 1 | 19 | 3 | 435 | 4.8 | 3 | 0 | 3 | 3 | 0 | 0 | 0 | 0 | 0.62 | 0.00 | 0.62 | 0.62 | 0.62 | Matches |
| 2023-2024 | 27 | Strasbourg | fr FRA | 1. Ligue 1 | 15 | 5 | 617 | 6.9 | 3 | 0 | 3 | 3 | 0 | 0 | 0 | 0 | 0.44 | 0.00 | 0.44 | 0.44 | 0.44 | Matches |
| 2025 | 29 | Mamelodi Sundowns | 1. Club World Cup | 2 | 0 | 28 | 0.3 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 3.21 | 0.00 | 3.21 | 3.21 | 3.21 | Matches | |
| 2025-2026 | 29 | Mamelodi Sundowns | za RSA | 1. Premiership | 11 | 1 | 241 | 2.7 | 1 | 1 | 2 | 1 | 0 | 1 | 0 | 0 | 0.37 | 0.37 | 0.75 | 0.37 | 0.75 | Matches |
| 8 Seasons | 5 Clubs | 6 Leagues | 170 | 91 | 8,860 | 98.4 | 41 | 8 | 49 | 38 | 3 | 5 | 7 | 0 | 0.42 | 0.08 | 0.50 | 0.39 | 0.47 | |||
| Country | Comp | MP | Starts | Min | 90s | Gls | Ast | G+A | G-PK | PK | PKatt | CrdY | CrdR | Matches | ||||||||
| Strasbourg (5 Seasons) | 3 Leagues | 94 | 41 | 4,213 | 46.8 | 20 | 5 | 25 | 19 | 1 | 1 | 3 | 0 | 0.43 | 0.11 | 0.53 | 0.41 | 0.51 | ||||
| Lille (3 Seasons) | 1 League | 17 | 17 | 1,437 | 16.0 | 6 | 0 | 6 | 6 | 0 | 0 | 1 | 0 | 0.38 | 0.00 | 0.38 | 0.38 | 0.38 | ||||
| Valenciennes (2 Seasons) | 3 Leagues | 33 | 27 | 2,419 | 26.9 | 11 | 2 | 13 | 10 | 1 | 2 | 2 | 0 | 0.41 | 0.07 | 0.48 | 0.37 | 0.45 | ||||
| Troyes (1 Season) | 1 League | 13 | 5 | 522 | 5.8 | 2 | 0 | 2 | 1 | 1 | 1 | 1 | 0 | 0.34 | 0.00 | 0.34 | 0.17 | 0.17 | ||||
| Mamelodi Sundowns (1 Season) | 2 Leagues | 13 | 1 | 269 | 3.0 | 2 | 1 | 3 | 2 | 0 | 1 | 0 | 0 | 0.67 | 0.33 | 1.00 | 0.67 | 1.00 | ||||
| Ligue 1 (7 Seasons) | 118 | 60 | 5,830 | 64.8 | 26 | 5 | 31 | 24 | 2 | 2 | 5 | 0 | 0.40 | 0.08 | 0.48 | 0.37 | 0.45 | |||||
| Coupe de France (4 Seasons) | 4 | 2 | 260 | 2.9 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | |||||
| Coupe de la Ligue (3 Seasons) | 6 | 2 | 303 | 3.4 | 3 | 0 | 3 | 2 | 1 | 1 | 0 | 0 | 0.89 | 0.00 | 0.89 | 0.59 | 0.59 | |||||
| Ligue 2 (2 Seasons) | 29 | 26 | 2,198 | 24.4 | 10 | 2 | 12 | 10 | 0 | 1 | 2 | 0 | 0.41 | 0.08 | 0.49 | 0.41 | 0.49 | |||||
| Premiership (1 Season) | 11 | 1 | 241 | 2.7 | 1 | 1 | 2 | 1 | 0 | 1 | 0 | 0 | 0.37 | 0.37 | 0.75 | 0.37 | 0.75 | |||||
| Club World Cup (1 Season) | 2 | 0 | 28 | 0.3 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 3.21 | 0.00 | 3.21 | 3.21 | 3.21 | |||||
| Playing Time | Performance | Per 90 Minutes | |||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Comp | MP | Starts | Min | 90s | Gls | Ast | G+A | G-PK | PK | PKatt | CrdY | CrdR | Matches | |||||
| 2016-2017 | 20 | Valenciennes | 1 League | 9 | 7 | 686 | 7.6 | 2 | 0 | 2 | 2 | 0 | 0 | 0 | 0 | 0.26 | 0.00 | 0.26 | 0.26 | 0.26 | |
| 2016-2017 | 20 | Lille | 1 League | 0 | 0 | ||||||||||||||||
| 2017-2018 | 21 | Valenciennes | 3 Leagues | 24 | 20 | 1,733 | 19.3 | 9 | 2 | 11 | 8 | 1 | 2 | 2 | 0 | 0.47 | 0.10 | 0.57 | 0.42 | 0.52 | |
| 2017-2018 | 21 | Lille | 1 League | 14 | 14 | 1,184 | 13.2 | 5 | 0 | 5 | 5 | 0 | 0 | 1 | 0 | 0.38 | 0.00 | 0.38 | 0.38 | 0.38 | |
| 2018-2019 | 22 | Lille | 1 League | 3 | 3 | 253 | 2.8 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0.36 | 0.00 | 0.36 | 0.36 | 0.36 | |
| 2018-2019 | 22 | Strasbourg | 3 Leagues | 36 | 21 | 2,048 | 22.8 | 11 | 2 | 13 | 10 | 1 | 1 | 3 | 0 | 0.48 | 0.09 | 0.57 | 0.44 | 0.53 | |
| 2019-2020 | 23 | Strasbourg | 2 Leagues | 21 | 12 | 1,047 | 11.6 | 3 | 3 | 6 | 3 | 0 | 0 | 0 | 0 | 0.26 | 0.26 | 0.52 | 0.26 | 0.52 | |
| 2021-2022 | 25 | Troyes | 1 League | 13 | 5 | 522 | 5.8 | 2 | 0 | 2 | 1 | 1 | 1 | 1 | 0 | 0.34 | 0.00 | 0.34 | 0.17 | 0.17 | |
| 2021-2022 | 25 | Strasbourg | 2 Leagues | 2 | 0 | 16 | 0.2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | |
| 2022-2023 | 26 | Strasbourg | 2 Leagues | 20 | 3 | 485 | 5.4 | 3 | 0 | 3 | 3 | 0 | 0 | 0 | 0 | 0.56 | 0.00 | 0.56 | 0.56 | 0.56 | |
| 2023-2024 | 27 | Strasbourg | 1 League | 15 | 5 | 617 | 6.9 | 3 | 0 | 3 | 3 | 0 | 0 | 0 | 0 | 0.44 | 0.00 | 0.44 | 0.44 | 0.44 | |
| 2025 | 29 | Mamelodi Sundowns | 1 League | 2 | 0 | 28 | 0.3 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 3.21 | 0.00 | 3.21 | 3.21 | 3.21 | |
| 2025-2026 | 29 | Mamelodi Sundowns | 1 League | 11 | 1 | 241 | 2.7 | 1 | 1 | 2 | 1 | 0 | 1 | 0 | 0 | 0.37 | 0.37 | 0.75 | 0.37 | 0.75 | |
| 8 Seasons | 5 Clubs | 6 Leagues | 170 | 91 | 8,860 | 98.4 | 41 | 8 | 49 | 38 | 3 | 5 | 7 | 0 | 0.42 | 0.08 | 0.50 | 0.39 | 0.47 | ||
| Comp | MP | Starts | Min | 90s | Gls | Ast | G+A | G-PK | PK | PKatt | CrdY | CrdR | Matches | ||||||||
| Strasbourg (5 Seasons) | 3 Leagues | 94 | 41 | 4,213 | 46.8 | 20 | 5 | 25 | 19 | 1 | 1 | 3 | 0 | 0.43 | 0.11 | 0.53 | 0.41 | 0.51 | |||
| Lille (3 Seasons) | 1 League | 17 | 17 | 1,437 | 16.0 | 6 | 0 | 6 | 6 | 0 | 0 | 1 | 0 | 0.38 | 0.00 | 0.38 | 0.38 | 0.38 | |||
| Valenciennes (2 Seasons) | 3 Leagues | 33 | 27 | 2,419 | 26.9 | 11 | 2 | 13 | 10 | 1 | 2 | 2 | 0 | 0.41 | 0.07 | 0.48 | 0.37 | 0.45 | |||
| Troyes (1 Season) | 1 League | 13 | 5 | 522 | 5.8 | 2 | 0 | 2 | 1 | 1 | 1 | 1 | 0 | 0.34 | 0.00 | 0.34 | 0.17 | 0.17 | |||
| Mamelodi Sundowns (1 Season) | 2 Leagues | 13 | 1 | 269 | 3.0 | 2 | 1 | 3 | 2 | 0 | 1 | 0 | 0 | 0.67 | 0.33 | 1.00 | 0.67 | 1.00 | |||
| Ligue 1 (7 Seasons) | 118 | 60 | 5,830 | 64.8 | 26 | 5 | 31 | 24 | 2 | 2 | 5 | 0 | 0.40 | 0.08 | 0.48 | 0.37 | 0.45 | ||||
| Coupe de France (4 Seasons) | 4 | 2 | 260 | 2.9 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | ||||
| Coupe de la Ligue (3 Seasons) | 6 | 2 | 303 | 3.4 | 3 | 0 | 3 | 2 | 1 | 1 | 0 | 0 | 0.89 | 0.00 | 0.89 | 0.59 | 0.59 | ||||
| Ligue 2 (2 Seasons) | 29 | 26 | 2,198 | 24.4 | 10 | 2 | 12 | 10 | 0 | 1 | 2 | 0 | 0.41 | 0.08 | 0.49 | 0.41 | 0.49 | ||||
| Premiership (1 Season) | 11 | 1 | 241 | 2.7 | 1 | 1 | 2 | 1 | 0 | 1 | 0 | 0 | 0.37 | 0.37 | 0.75 | 0.37 | 0.75 | ||||
| Club World Cup (1 Season) | 2 | 0 | 28 | 0.3 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 3.21 | 0.00 | 3.21 | 3.21 | 3.21 | ||||
| Playing Time | Performance | Per 90 Minutes | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Country | Comp | LgRank | MP | Starts | Min | 90s | Gls | Ast | G+A | G-PK | PK | PKatt | CrdY | CrdR | Matches | |||||
| 2016-2017 | 20 | Valenciennes | fr FRA | 2. Ligue 2 | 13th | 9 | 7 | 686 | 7.6 | 2 | 0 | 2 | 2 | 0 | 0 | 0 | 0 | 0.26 | 0.00 | 0.26 | 0.26 | 0.26 | Matches |
| 2016-2017 | 20 | Lille | fr FRA | 1. Ligue 1 | 11th | 0 | 0 | Matches | |||||||||||||||
| 2017-2018 | 21 | Valenciennes | fr FRA | 2. Ligue 2 | 13th | 20 | 19 | 1,512 | 16.8 | 8 | 2 | 10 | 8 | 0 | 1 | 2 | 0 | 0.48 | 0.12 | 0.60 | 0.48 | 0.60 | Matches |
| 2017-2018 | 21 | Lille | fr FRA | 1. Ligue 1 | 17th | 14 | 14 | 1,184 | 13.2 | 5 | 0 | 5 | 5 | 0 | 0 | 1 | 0 | 0.38 | 0.00 | 0.38 | 0.38 | 0.38 | Matches |
| 2018-2019 | 22 | Lille | fr FRA | 1. Ligue 1 | 2nd | 3 | 3 | 253 | 2.8 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0.36 | 0.00 | 0.36 | 0.36 | 0.36 | Matches |
| 2018-2019 | 22 | Strasbourg | fr FRA | 1. Ligue 1 | 11th | 32 | 18 | 1,771 | 19.7 | 9 | 2 | 11 | 8 | 1 | 1 | 3 | 0 | 0.46 | 0.10 | 0.56 | 0.41 | 0.51 | Matches |
| 2019-2020 | 23 | Strasbourg | fr FRA | 1. Ligue 1 | 10th | 21 | 12 | 1,047 | 11.6 | 3 | 3 | 6 | 3 | 0 | 0 | 0 | 0 | 0.26 | 0.26 | 0.52 | 0.26 | 0.52 | Matches |
| 2021-2022 | 25 | Troyes | fr FRA | 1. Ligue 1 | 15th | 13 | 5 | 522 | 5.8 | 2 | 0 | 2 | 1 | 1 | 1 | 1 | 0 | 0.34 | 0.00 | 0.34 | 0.17 | 0.17 | Matches |
| 2021-2022 | 25 | Strasbourg | fr FRA | 1. Ligue 1 | 6th | 1 | 0 | 1 | 0.0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | Matches |
| 2022-2023 | 26 | Strasbourg | fr FRA | 1. Ligue 1 | 15th | 19 | 3 | 435 | 4.8 | 3 | 0 | 3 | 3 | 0 | 0 | 0 | 0 | 0.62 | 0.00 | 0.62 | 0.62 | 0.62 | Matches |
| 2023-2024 | 27 | Strasbourg | fr FRA | 1. Ligue 1 | 13th | 15 | 5 | 617 | 6.9 | 3 | 0 | 3 | 3 | 0 | 0 | 0 | 0 | 0.44 | 0.00 | 0.44 | 0.44 | 0.44 | Matches |
| 2025-2026 | 29 | Mamelodi Sundowns | za RSA | 1. Premiership | 2nd | 11 | 1 | 241 | 2.7 | 1 | 1 | 2 | 1 | 0 | 1 | 0 | 0 | 0.37 | 0.37 | 0.75 | 0.37 | 0.75 | Matches |
| 8 Seasons | 5 Clubs | 3 Leagues | 158 | 87 | 8,269 | 91.9 | 37 | 8 | 45 | 35 | 2 | 4 | 7 | 0 | 0.40 | 0.09 | 0.49 | 0.38 | 0.47 | ||||
| Country | Comp | LgRank | MP | Starts | Min | 90s | Gls | Ast | G+A | G-PK | PK | PKatt | CrdY | CrdR | Matches | ||||||||
| Strasbourg (5 Seasons) | 1 League | 88 | 38 | 3,871 | 43.0 | 18 | 5 | 23 | 17 | 1 | 1 | 3 | 0 | 0.42 | 0.12 | 0.53 | 0.40 | 0.51 | |||||
| Lille (3 Seasons) | 1 League | 17 | 17 | 1,437 | 16.0 | 6 | 0 | 6 | 6 | 0 | 0 | 1 | 0 | 0.38 | 0.00 | 0.38 | 0.38 | 0.38 | |||||
| Valenciennes (2 Seasons) | 1 League | 29 | 26 | 2,198 | 24.4 | 10 | 2 | 12 | 10 | 0 | 1 | 2 | 0 | 0.41 | 0.08 | 0.49 | 0.41 | 0.49 | |||||
| Troyes (1 Season) | 1 League | 13 | 5 | 522 | 5.8 | 2 | 0 | 2 | 1 | 1 | 1 | 1 | 0 | 0.34 | 0.00 | 0.34 | 0.17 | 0.17 | |||||
| Mamelodi Sundowns (1 Season) | 1 League | 11 | 1 | 241 | 2.7 | 1 | 1 | 2 | 1 | 0 | 1 | 0 | 0 | 0.37 | 0.37 | 0.75 | 0.37 | 0.75 | |||||
| Ligue 1 (7 Seasons) | 118 | 60 | 5,830 | 64.8 | 26 | 5 | 31 | 24 | 2 | 2 | 5 | 0 | 0.40 | 0.08 | 0.48 | 0.37 | 0.45 | ||||||
| Ligue 2 (2 Seasons) | 29 | 26 | 2,198 | 24.4 | 10 | 2 | 12 | 10 | 0 | 1 | 2 | 0 | 0.41 | 0.08 | 0.49 | 0.41 | 0.49 | ||||||
| Premiership (1 Season) | 11 | 1 | 241 | 2.7 | 1 | 1 | 2 | 1 | 0 | 1 | 0 | 0 | 0.37 | 0.37 | 0.75 | 0.37 | 0.75 | ||||||
| Playing Time | Performance | Per 90 Minutes | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Country | Comp | LgRank | MP | Starts | Min | 90s | Gls | Ast | G+A | G-PK | PK | PKatt | CrdY | CrdR | Matches | |||||
| 2017-2018 | 21 | Valenciennes | fr FRA | Coupe de France | 33rd | 1 | 1 | 120 | 1.3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | Matches |
| 2017-2018 | 21 | Valenciennes | fr FRA | 1. Coupe de la Ligue | 17th | 3 | 0 | 101 | 1.1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0.89 | 0.00 | 0.89 | 0.00 | 0.00 | Matches |
| 2018-2019 | 22 | Strasbourg | fr FRA | Coupe de France | 17th | 1 | 1 | 75 | 0.8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | Matches |
| 2018-2019 | 22 | Strasbourg | fr FRA | 1. Coupe de la Ligue | 1st | 3 | 2 | 202 | 2.2 | 2 | 0 | 2 | 2 | 0 | 0 | 0 | 0 | 0.89 | 0.00 | 0.89 | 0.89 | 0.89 | Matches |
| 2019-2020 | 23 | Strasbourg | fr FRA | 1. Coupe de la Ligue | 5th | 0 | 0 | Matches | |||||||||||||||
| 2021-2022 | 25 | Strasbourg | fr FRA | Coupe de France | R32 | 1 | 0 | 15 | 0.2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | Matches |
| 2022-2023 | 26 | Strasbourg | fr FRA | Coupe de France | R64 | 1 | 0 | 50 | 0.6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | Matches |
| 5 Seasons | 2 Clubs | 2 Leagues | 10 | 4 | 563 | 6.3 | 3 | 0 | 3 | 2 | 1 | 1 | 0 | 0 | 0.48 | 0.00 | 0.48 | 0.32 | 0.32 | ||||
| Country | Comp | LgRank | MP | Starts | Min | 90s | Gls | Ast | G+A | G-PK | PK | PKatt | CrdY | CrdR | Matches | ||||||||
| Strasbourg (4 Seasons) | 2 Leagues | 6 | 3 | 342 | 3.8 | 2 | 0 | 2 | 2 | 0 | 0 | 0 | 0 | 0.53 | 0.00 | 0.53 | 0.53 | 0.53 | |||||
| Valenciennes (1 Season) | 2 Leagues | 4 | 1 | 221 | 2.5 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0.41 | 0.00 | 0.41 | 0.00 | 0.00 | |||||
| Coupe de France (4 Seasons) | 4 | 2 | 260 | 2.9 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | ||||||
| Coupe de la Ligue (3 Seasons) | 6 | 2 | 303 | 3.4 | 3 | 0 | 3 | 2 | 1 | 1 | 0 | 0 | 0.89 | 0.00 | 0.89 | 0.59 | 0.59 | ||||||
| Playing Time | Performance | Per 90 Minutes | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Comp | LgRank | MP | Starts | Min | 90s | Gls | Ast | G+A | G-PK | PK | PKatt | CrdY | CrdR | Matches | |||||
| 2025 | 29 | Mamelodi Sundowns | 1. Club World Cup | GR | 2 | 0 | 28 | 0.3 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 3.21 | 0.00 | 3.21 | 3.21 | 3.21 | Matches |
| 1 Season | 1 Club | 1 League | 2 | 0 | 28 | 0.3 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 3.21 | 0.00 | 3.21 | 3.21 | 3.21 | |||
| Playing Time | Performance | Per 90 Minutes | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Comp | LgRank | MP | Starts | Min | 90s | Gls | Ast | G+A | G-PK | PK | PKatt | CrdY | CrdR | Matches | |||||
| 2018 | 22 | za South Africa | WCQ | 0 | 0 | Matches | ||||||||||||||||
| 2018 | 22 | za South Africa | Friendlies (M) | 3 | 2 | 166 | 1.8 | 2 | 0 | 2 | 2 | 0 | 0 | 0 | 0 | 1.08 | 0.00 | 1.08 | 1.08 | 1.08 | Matches | |
| 2019 | 23 | za South Africa | Africa Cup of Nations | QF | 5 | 5 | 418 | 4.6 | 0 | 1 | 1 | 0 | 0 | 0 | 2 | 0 | 0.00 | 0.22 | 0.22 | 0.00 | 0.22 | Matches |
| 2019 | 23 | za South Africa | Africa Cup of Nations qualification | 4 | 4 | 360 | 4.0 | 2 | 1 | 3 | 2 | 0 | 0 | 0 | 0 | 0.50 | 0.25 | 0.75 | 0.50 | 0.75 | Matches | |
| 2021 | 25 | za South Africa | Africa Cup of Nations qualification | 2 | 1 | 97 | 1.1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | Matches | |
| 2023 | 27 | za South Africa | Friendlies (M) | 2 | 1 | 135 | 1.5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | Matches | |
| 4 Seasons | 1 Club | 4 Leagues | 16 | 13 | 1,176 | 13.1 | 4 | 2 | 6 | 4 | 0 | 0 | 2 | 0 | 0.31 | 0.15 | 0.46 | 0.31 | 0.46 | |||
| Africa Cup of Nations qualification (2 Seasons) | 6 | 5 | 457 | 5.1 | 2 | 1 | 3 | 2 | 0 | 0 | 0 | 0 | 0.39 | 0.20 | 0.59 | 0.39 | 0.59 | |||||
| Friendlies (M) (2 Seasons) | 5 | 3 | 301 | 3.3 | 2 | 0 | 2 | 2 | 0 | 0 | 0 | 0 | 0.60 | 0.00 | 0.60 | 0.60 | 0.60 | |||||
| Africa Cup of Nations (1 Season) | 5 | 5 | 418 | 4.6 | 0 | 1 | 1 | 0 | 0 | 0 | 2 | 0 | 0.00 | 0.22 | 0.22 | 0.00 | 0.22 | |||||
| WCQ (1 Season) | 0 | 0 | ||||||||||||||||||||
| Standard | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Country | Comp | 90s | Gls | Sh | SoT | PK | PKatt | Matches | |||||
| 2016-2017 | 20 | Valenciennes | fr FRA | 2. Ligue 2 | 7.6 | 2 | 0 | 7 | 0.00 | 0.92 | 0.29 | 0 | 0 | Matches | ||
| 2017-2018 | 21 | Valenciennes | fr FRA | Coupe de France | 1.3 | 0 | 0 | 0 | Matches | |||||||
| 2017-2018 | 21 | Valenciennes | fr FRA | 1. Coupe de la Ligue | 1.1 | 1 | 1 | 1 | Matches | |||||||
| 2017-2018 | 21 | Lille | fr FRA | 1. Ligue 1 | 13.2 | 5 | 22 | 11 | 50.0 | 1.67 | 0.84 | 0.23 | 0.45 | 0 | 0 | Matches |
| 2017-2018 | 21 | Valenciennes | fr FRA | 2. Ligue 2 | 16.8 | 8 | 0 | 18 | 0.00 | 1.07 | 0.44 | 0 | 1 | Matches | ||
| 2018-2019 | 22 | Strasbourg | fr FRA | Coupe de France | 0.8 | 0 | 0 | 0 | 0.00 | 0.00 | 0 | 0 | Matches | |||
| 2018-2019 | 22 | Strasbourg | fr FRA | 1. Coupe de la Ligue | 2.2 | 2 | 0 | 0 | Matches | |||||||
| 2018-2019 | 22 | Strasbourg | fr FRA | 1. Ligue 1 | 19.7 | 9 | 35 | 19 | 54.3 | 1.78 | 0.97 | 0.23 | 0.42 | 1 | 1 | Matches |
| 2018-2019 | 22 | Lille | fr FRA | 1. Ligue 1 | 2.8 | 1 | 2 | 2 | 100.0 | 0.71 | 0.71 | 0.50 | 0.50 | 0 | 0 | Matches |
| 2019-2020 | 23 | Strasbourg | fr FRA | 1. Ligue 1 | 11.6 | 3 | 28 | 11 | 39.3 | 2.41 | 0.95 | 0.11 | 0.27 | 0 | 0 | Matches |
| 2021-2022 | 25 | Strasbourg | fr FRA | Coupe de France | 0.2 | 0 | 0 | 0 | 0.00 | 0.00 | 0 | 0 | Matches | |||
| 2021-2022 | 25 | Troyes | fr FRA | 1. Ligue 1 | 5.8 | 2 | 6 | 3 | 50.0 | 1.03 | 0.52 | 0.17 | 0.33 | 1 | 1 | Matches |
| 2021-2022 | 25 | Strasbourg | fr FRA | 1. Ligue 1 | 0.0 | 0 | 0 | 0 | 0.00 | 0.00 | 0 | 0 | Matches | |||
| 2022-2023 | 26 | Strasbourg | fr FRA | Coupe de France | 0.6 | 0 | 1 | 0 | 0.0 | 1.80 | 0.00 | 0.00 | 0 | 0 | Matches | |
| 2022-2023 | 26 | Strasbourg | fr FRA | 1. Ligue 1 | 4.8 | 3 | 9 | 5 | 55.6 | 1.86 | 1.03 | 0.33 | 0.60 | 0 | 0 | Matches |
| 2023-2024 | 27 | Strasbourg | fr FRA | 1. Ligue 1 | 6.9 | 3 | 16 | 7 | 43.8 | 2.33 | 1.02 | 0.19 | 0.43 | 0 | 0 | Matches |
| 2025 | 29 | Mamelodi Sundowns | 1. Club World Cup | 0.3 | 1 | 2 | 1 | 50.0 | 6.43 | 3.21 | 0.50 | 1.00 | 0 | 0 | Matches | |
| 2025-2026 | 29 | Mamelodi Sundowns | za RSA | 1. Premiership | 2.7 | 1 | 6 | 3 | 50.0 | 2.24 | 1.12 | 0.17 | 0.33 | 0 | 1 | Matches |
| 8 Seasons | 5 Clubs | 6 Leagues | 98.4 | 41 | 127 | 87 | 68.5 | 1.35 | 0.93 | 0.28 | 0.41 | 3 | 5 | |||
| Country | Comp | 90s | Gls | Sh | SoT | PK | PKatt | Matches | ||||||||
| Strasbourg (5 Seasons) | 3 Leagues | 46.8 | 20 | 89 | 42 | 47.2 | 2.00 | 0.94 | 0.19 | 0.40 | 1 | 1 | ||||
| Lille (3 Seasons) | 1 League | 16.0 | 6 | 24 | 13 | 54.2 | 1.50 | 0.81 | 0.25 | 0.46 | 0 | 0 | ||||
| Valenciennes (2 Seasons) | 3 Leagues | 26.9 | 11 | 0 | 25 | 0.00 | 1.02 | 0.40 | 1 | 2 | ||||||
| Troyes (1 Season) | 1 League | 5.8 | 2 | 6 | 3 | 50.0 | 1.03 | 0.52 | 0.17 | 0.33 | 1 | 1 | ||||
| Mamelodi Sundowns (1 Season) | 2 Leagues | 3.0 | 2 | 8 | 4 | 50.0 | 2.68 | 1.34 | 0.25 | 0.50 | 0 | 1 | ||||
| Ligue 1 (7 Seasons) | 64.8 | 26 | 118 | 58 | 49.2 | 1.82 | 0.90 | 0.20 | 0.41 | 2 | 2 | |||||
| Coupe de France (4 Seasons) | 2.9 | 0 | 1 | 0 | 0.0 | 0.64 | 0.00 | 0.00 | 0 | 0 | ||||||
| Coupe de la Ligue (3 Seasons) | 3.4 | 3 | 1 | 1 | ||||||||||||
| Ligue 2 (2 Seasons) | 24.4 | 10 | 0 | 25 | 0.00 | 1.02 | 0.40 | 0 | 1 | |||||||
| Premiership (1 Season) | 2.7 | 1 | 6 | 3 | 50.0 | 2.24 | 1.12 | 0.17 | 0.33 | 0 | 1 | |||||
| Club World Cup (1 Season) | 0.3 | 1 | 2 | 1 | 50.0 | 6.43 | 3.21 | 0.50 | 1.00 | 0 | 0 | |||||
| Standard | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Comp | 90s | Gls | Sh | SoT | PK | PKatt | Matches | |||||
| 2016-2017 | 20 | Valenciennes | 1 League | 7.6 | 2 | 0 | 7 | 0.00 | 0.92 | 0.29 | 0 | 0 | |||
| 2017-2018 | 21 | Valenciennes | 3 Leagues | 19.3 | 9 | 0 | 18 | 0.00 | 1.07 | 0.44 | 1 | 2 | |||
| 2017-2018 | 21 | Lille | 1 League | 13.2 | 5 | 22 | 11 | 50.0 | 1.67 | 0.84 | 0.23 | 0.45 | 0 | 0 | |
| 2018-2019 | 22 | Lille | 1 League | 2.8 | 1 | 2 | 2 | 100.0 | 0.71 | 0.71 | 0.50 | 0.50 | 0 | 0 | |
| 2018-2019 | 22 | Strasbourg | 3 Leagues | 22.8 | 11 | 35 | 19 | 54.3 | 1.71 | 0.93 | 0.23 | 0.42 | 1 | 1 | |
| 2019-2020 | 23 | Strasbourg | 2 Leagues | 11.6 | 3 | 28 | 11 | 39.3 | 2.41 | 0.95 | 0.11 | 0.27 | 0 | 0 | |
| 2021-2022 | 25 | Troyes | 1 League | 5.8 | 2 | 6 | 3 | 50.0 | 1.03 | 0.52 | 0.17 | 0.33 | 1 | 1 | |
| 2021-2022 | 25 | Strasbourg | 2 Leagues | 0.2 | 0 | 0 | 0 | 0.00 | 0.00 | 0 | 0 | ||||
| 2022-2023 | 26 | Strasbourg | 2 Leagues | 5.4 | 3 | 10 | 5 | 50.0 | 1.86 | 0.93 | 0.30 | 0.60 | 0 | 0 | |
| 2023-2024 | 27 | Strasbourg | 1 League | 6.9 | 3 | 16 | 7 | 43.8 | 2.33 | 1.02 | 0.19 | 0.43 | 0 | 0 | |
| 2025 | 29 | Mamelodi Sundowns | 1 League | 0.3 | 1 | 2 | 1 | 50.0 | 6.43 | 3.21 | 0.50 | 1.00 | 0 | 0 | |
| 2025-2026 | 29 | Mamelodi Sundowns | 1 League | 2.7 | 1 | 6 | 3 | 50.0 | 2.24 | 1.12 | 0.17 | 0.33 | 0 | 1 | |
| 8 Seasons | 5 Clubs | 6 Leagues | 98.4 | 41 | 127 | 87 | 68.5 | 1.35 | 0.93 | 0.28 | 0.41 | 3 | 5 | ||
| Comp | 90s | Gls | Sh | SoT | PK | PKatt | Matches | ||||||||
| Strasbourg (5 Seasons) | 3 Leagues | 46.8 | 20 | 89 | 42 | 47.2 | 2.00 | 0.94 | 0.19 | 0.40 | 1 | 1 | |||
| Lille (3 Seasons) | 1 League | 16.0 | 6 | 24 | 13 | 54.2 | 1.50 | 0.81 | 0.25 | 0.46 | 0 | 0 | |||
| Valenciennes (2 Seasons) | 3 Leagues | 26.9 | 11 | 0 | 25 | 0.00 | 1.02 | 0.40 | 1 | 2 | |||||
| Troyes (1 Season) | 1 League | 5.8 | 2 | 6 | 3 | 50.0 | 1.03 | 0.52 | 0.17 | 0.33 | 1 | 1 | |||
| Mamelodi Sundowns (1 Season) | 2 Leagues | 3.0 | 2 | 8 | 4 | 50.0 | 2.68 | 1.34 | 0.25 | 0.50 | 0 | 1 | |||
| Ligue 1 (7 Seasons) | 64.8 | 26 | 118 | 58 | 49.2 | 1.82 | 0.90 | 0.20 | 0.41 | 2 | 2 | ||||
| Coupe de France (4 Seasons) | 2.9 | 0 | 1 | 0 | 0.0 | 0.64 | 0.00 | 0.00 | 0 | 0 | |||||
| Coupe de la Ligue (3 Seasons) | 3.4 | 3 | 1 | 1 | |||||||||||
| Ligue 2 (2 Seasons) | 24.4 | 10 | 0 | 25 | 0.00 | 1.02 | 0.40 | 0 | 1 | ||||||
| Premiership (1 Season) | 2.7 | 1 | 6 | 3 | 50.0 | 2.24 | 1.12 | 0.17 | 0.33 | 0 | 1 | ||||
| Club World Cup (1 Season) | 0.3 | 1 | 2 | 1 | 50.0 | 6.43 | 3.21 | 0.50 | 1.00 | 0 | 0 | ||||
| Standard | |||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Country | Comp | LgRank | 90s | Gls | Sh | SoT | PK | PKatt | Matches | |||||
| 2016-2017 | 20 | Valenciennes | fr FRA | 2. Ligue 2 | 13th | 7.6 | 2 | 0 | 7 | 0.00 | 0.92 | 0.29 | 0 | 0 | Matches | ||
| 2017-2018 | 21 | Valenciennes | fr FRA | 2. Ligue 2 | 13th | 16.8 | 8 | 0 | 18 | 0.00 | 1.07 | 0.44 | 0 | 1 | Matches | ||
| 2017-2018 | 21 | Lille | fr FRA | 1. Ligue 1 | 17th | 13.2 | 5 | 22 | 11 | 50.0 | 1.67 | 0.84 | 0.23 | 0.45 | 0 | 0 | Matches |
| 2018-2019 | 22 | Lille | fr FRA | 1. Ligue 1 | 2nd | 2.8 | 1 | 2 | 2 | 100.0 | 0.71 | 0.71 | 0.50 | 0.50 | 0 | 0 | Matches |
| 2018-2019 | 22 | Strasbourg | fr FRA | 1. Ligue 1 | 11th | 19.7 | 9 | 35 | 19 | 54.3 | 1.78 | 0.97 | 0.23 | 0.42 | 1 | 1 | Matches |
| 2019-2020 | 23 | Strasbourg | fr FRA | 1. Ligue 1 | 10th | 11.6 | 3 | 28 | 11 | 39.3 | 2.41 | 0.95 | 0.11 | 0.27 | 0 | 0 | Matches |
| 2021-2022 | 25 | Troyes | fr FRA | 1. Ligue 1 | 15th | 5.8 | 2 | 6 | 3 | 50.0 | 1.03 | 0.52 | 0.17 | 0.33 | 1 | 1 | Matches |
| 2021-2022 | 25 | Strasbourg | fr FRA | 1. Ligue 1 | 6th | 0.0 | 0 | 0 | 0 | 0.00 | 0.00 | 0 | 0 | Matches | |||
| 2022-2023 | 26 | Strasbourg | fr FRA | 1. Ligue 1 | 15th | 4.8 | 3 | 9 | 5 | 55.6 | 1.86 | 1.03 | 0.33 | 0.60 | 0 | 0 | Matches |
| 2023-2024 | 27 | Strasbourg | fr FRA | 1. Ligue 1 | 13th | 6.9 | 3 | 16 | 7 | 43.8 | 2.33 | 1.02 | 0.19 | 0.43 | 0 | 0 | Matches |
| 2025-2026 | 29 | Mamelodi Sundowns | za RSA | 1. Premiership | 2nd | 2.7 | 1 | 6 | 3 | 50.0 | 2.24 | 1.12 | 0.17 | 0.33 | 0 | 1 | Matches |
| 8 Seasons | 5 Clubs | 3 Leagues | 91.9 | 37 | 124 | 86 | 69.4 | 1.35 | 0.94 | 0.28 | 0.41 | 2 | 4 | ||||
| Country | Comp | LgRank | 90s | Gls | Sh | SoT | PK | PKatt | Matches | ||||||||
| Strasbourg (5 Seasons) | 1 League | 43.0 | 18 | 88 | 42 | 47.7 | 2.05 | 0.98 | 0.19 | 0.40 | 1 | 1 | |||||
| Lille (3 Seasons) | 1 League | 16.0 | 6 | 24 | 13 | 54.2 | 1.50 | 0.81 | 0.25 | 0.46 | 0 | 0 | |||||
| Valenciennes (2 Seasons) | 1 League | 24.4 | 10 | 0 | 25 | 0.00 | 1.02 | 0.40 | 0 | 1 | |||||||
| Troyes (1 Season) | 1 League | 5.8 | 2 | 6 | 3 | 50.0 | 1.03 | 0.52 | 0.17 | 0.33 | 1 | 1 | |||||
| Mamelodi Sundowns (1 Season) | 1 League | 2.7 | 1 | 6 | 3 | 50.0 | 2.24 | 1.12 | 0.17 | 0.33 | 0 | 1 | |||||
| Ligue 1 (7 Seasons) | 64.8 | 26 | 118 | 58 | 49.2 | 1.82 | 0.90 | 0.20 | 0.41 | 2 | 2 | ||||||
| Ligue 2 (2 Seasons) | 24.4 | 10 | 0 | 25 | 0.00 | 1.02 | 0.40 | 0 | 1 | ||||||||
| Premiership (1 Season) | 2.7 | 1 | 6 | 3 | 50.0 | 2.24 | 1.12 | 0.17 | 0.33 | 0 | 1 | ||||||
| Standard | |||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Country | Comp | LgRank | 90s | Gls | Sh | SoT | PK | PKatt | Matches | |||||
| 2017-2018 | 21 | Valenciennes | fr FRA | Coupe de France | 33rd | 1.3 | 0 | 0 | 0 | Matches | |||||||
| 2017-2018 | 21 | Valenciennes | fr FRA | 1. Coupe de la Ligue | 17th | 1.1 | 1 | 1 | 1 | Matches | |||||||
| 2018-2019 | 22 | Strasbourg | fr FRA | Coupe de France | 17th | 0.8 | 0 | 0 | 0 | 0.00 | 0.00 | 0 | 0 | Matches | |||
| 2018-2019 | 22 | Strasbourg | fr FRA | 1. Coupe de la Ligue | 1st | 2.2 | 2 | 0 | 0 | Matches | |||||||
| 2021-2022 | 25 | Strasbourg | fr FRA | Coupe de France | R32 | 0.2 | 0 | 0 | 0 | 0.00 | 0.00 | 0 | 0 | Matches | |||
| 2022-2023 | 26 | Strasbourg | fr FRA | Coupe de France | R64 | 0.6 | 0 | 1 | 0 | 0.0 | 1.80 | 0.00 | 0.00 | 0 | 0 | Matches | |
| 5 Seasons | 2 Clubs | 2 Leagues | 6.3 | 3 | 1 | 0 | 0.0 | 0.64 | 0.00 | 0.00 | 1 | 1 | |||||
| Country | Comp | LgRank | 90s | Gls | Sh | SoT | PK | PKatt | Matches | ||||||||
| Strasbourg (4 Seasons) | 2 Leagues | 3.8 | 2 | 1 | 0 | 0.0 | 0.64 | 0.00 | 0.00 | 0 | 0 | ||||||
| Valenciennes (1 Season) | 2 Leagues | 2.5 | 1 | 1 | 1 | ||||||||||||
| Coupe de France (4 Seasons) | 2.9 | 0 | 1 | 0 | 0.0 | 0.64 | 0.00 | 0.00 | 0 | 0 | |||||||
| Coupe de la Ligue (3 Seasons) | 3.4 | 3 | 1 | 1 | |||||||||||||
| Standard | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Comp | LgRank | 90s | Gls | Sh | SoT | PK | PKatt | Matches | |||||
| 2025 | 29 | Mamelodi Sundowns | 1. Club World Cup | GR | 0.3 | 1 | 2 | 1 | 50.0 | 6.43 | 3.21 | 0.50 | 1.00 | 0 | 0 | Matches |
| 1 Season | 1 Club | 1 League | 0.3 | 1 | 2 | 1 | 50.0 | 6.43 | 3.21 | 0.50 | 1.00 | 0 | 0 | |||
| Standard | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Comp | LgRank | 90s | Gls | Sh | SoT | PK | PKatt | Matches | |||||
| 2018 | 22 | za South Africa | Friendlies (M) | 1.8 | 2 | 0 | 0 | Matches | ||||||||
| 2019 | 23 | za South Africa | Africa Cup of Nations | QF | 4.6 | 0 | 5 | 1 | 20.0 | 1.08 | 0.22 | 0.00 | 0.00 | 0 | 0 | Matches |
| 2019 | 23 | za South Africa | Africa Cup of Nations qualification | 4.0 | 2 | 0 | 0 | Matches | ||||||||
| 2021 | 25 | za South Africa | Africa Cup of Nations qualification | 1.1 | 0 | 0 | 0 | Matches | ||||||||
| 2023 | 27 | za South Africa | Friendlies (M) | 1.5 | 0 | 0 | 0 | Matches | ||||||||
| 4 Seasons | 1 Club | 4 Leagues | 13.1 | 4 | 5 | 1 | 20.0 | 1.08 | 0.22 | 0.00 | 0.00 | 0 | 0 | |||
| Africa Cup of Nations qualification (2 Seasons) | 5.1 | 2 | 0 | 0 | ||||||||||||
| Friendlies (M) (2 Seasons) | 3.3 | 2 | 0 | 0 | ||||||||||||
| Africa Cup of Nations (1 Season) | 4.6 | 0 | 5 | 1 | 20.0 | 1.08 | 0.22 | 0.00 | 0.00 | 0 | 0 | |||||
| WCQ (1 Season) | ||||||||||||||||
| Playing Time | Starts | Subs | Team Success | |||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Country | Comp | MP | Min | 90s | Starts | Compl | Subs | unSub | onG | onGA | +/- | Matches | |||||||
| 2016-2017 | 20 | Lille | fr FRA | 1. Ligue 1 | 0 | 0 | 0 | 0 | 1 | Matches | ||||||||||||
| 2016-2017 | 20 | Valenciennes | fr FRA | 2. Ligue 2 | 9 | 686 | 76 | 20.1 | 7.6 | 7 | 5 | 2 | 0 | 1.22 | 5 | 5 | 0 | 0.00 | 0.00 | Matches | ||
| 2017-2018 | 21 | Valenciennes | fr FRA | Coupe de France | 1 | 120 | 120 | 40.0 | 1.3 | 1 | 120 | 1 | 0 | 0 | 0.00 | 0 | 1 | -1 | -0.75 | -3.25 | Matches | |
| 2017-2018 | 21 | Valenciennes | fr FRA | 1. Coupe de la Ligue | 3 | 101 | 34 | 33.7 | 1.1 | 0 | 0 | 3 | 33 | 0 | 2.33 | 1 | 2 | -1 | -0.89 | -3.60 | Matches | |
| 2017-2018 | 21 | Lille | fr FRA | 1. Ligue 1 | 14 | 1,184 | 85 | 34.6 | 13.2 | 14 | 85 | 8 | 0 | 0 | 0.93 | 17 | 29 | -12 | -0.91 | -0.35 | Matches | |
| 2017-2018 | 21 | Valenciennes | fr FRA | 2. Ligue 2 | 20 | 1,512 | 76 | 44.2 | 16.8 | 19 | 9 | 1 | 0 | 1.15 | 25 | 26 | -1 | -0.06 | +0.55 | Matches | ||
| 2018-2019 | 22 | Strasbourg | fr FRA | Coupe de France | 1 | 75 | 75 | 35.7 | 0.8 | 1 | 75 | 0 | 0 | 0 | 0.00 | 0 | 1 | -1 | -1.20 | -1.20 | Matches | |
| 2018-2019 | 22 | Strasbourg | fr FRA | 1. Coupe de la Ligue | 3 | 202 | 67 | 39.6 | 2.2 | 2 | 79 | 0 | 1 | 44 | 1 | 3.00 | 3 | 2 | +1 | +0.45 | -0.43 | Matches |
| 2018-2019 | 22 | Strasbourg | fr FRA | 1. Ligue 1 | 32 | 1,771 | 55 | 51.8 | 19.7 | 18 | 82 | 8 | 14 | 21 | 2 | 1.19 | 34 | 26 | +8 | +0.41 | +0.30 | Matches |
| 2018-2019 | 22 | Lille | fr FRA | 1. Ligue 1 | 3 | 253 | 84 | 7.4 | 2.8 | 3 | 84 | 1 | 0 | 0 | 2.33 | 6 | 1 | +5 | +1.78 | +0.93 | Matches | |
| 2019-2020 | 23 | Strasbourg | fr FRA | 1. Coupe de la Ligue | 0 | 0 | 0 | 0 | 1 | Matches | ||||||||||||
| 2019-2020 | 23 | Strasbourg | fr FRA | 1. Ligue 1 | 21 | 1,047 | 50 | 43.1 | 11.6 | 12 | 76 | 3 | 9 | 15 | 1 | 1.33 | 17 | 21 | -4 | -0.34 | -0.60 | Matches |
| 2021-2022 | 25 | Strasbourg | fr FRA | Coupe de France | 1 | 15 | 15 | 8.3 | 0.2 | 0 | 0 | 1 | 15 | 0 | 0.00 | 0 | 0 | 0 | 0.00 | 0.00 | Matches | |
| 2021-2022 | 25 | Troyes | fr FRA | 1. Ligue 1 | 13 | 522 | 40 | 15.3 | 5.8 | 5 | 61 | 0 | 8 | 27 | 0 | 1.15 | 6 | 5 | +1 | +0.17 | +0.70 | Matches |
| 2021-2022 | 25 | Strasbourg | fr FRA | 1. Ligue 1 | 1 | 1 | 1 | 0.0 | 0.0 | 0 | 0 | 1 | 1 | 2 | 3.00 | 0 | 0 | 0 | 0.00 | -0.45 | Matches | |
| 2022-2023 | 26 | Strasbourg | fr FRA | Coupe de France | 1 | 50 | 50 | 41.7 | 0.6 | 0 | 0 | 1 | 50 | 0 | 1.00 | 0 | 0 | 0 | 0.00 | 0.00 | Matches | |
| 2022-2023 | 26 | Strasbourg | fr FRA | 1. Ligue 1 | 19 | 435 | 23 | 12.7 | 4.8 | 3 | 65 | 0 | 16 | 15 | 14 | 1.21 | 11 | 9 | +2 | +0.41 | +0.72 | Matches |
| 2023-2024 | 27 | Strasbourg | fr FRA | 1. Ligue 1 | 15 | 617 | 41 | 20.2 | 6.9 | 5 | 78 | 2 | 10 | 23 | 1 | 1.33 | 11 | 8 | +3 | +0.44 | +0.99 | Matches |
| 2025 | 29 | Mamelodi Sundowns | 1. Club World Cup | 2 | 28 | 14 | 10.4 | 0.3 | 0 | 0 | 2 | 14 | 0 | 1.50 | 1 | 0 | +1 | +3.21 | +3.59 | Matches | ||
| 2025-2026 | 29 | Mamelodi Sundowns | za RSA | 1. Premiership | 11 | 241 | 22 | 8.9 | 2.7 | 1 | 45 | 0 | 10 | 20 | 8 | 2.00 | 7 | 0 | +7 | +2.61 | +1.55 | Matches |
| 8 Seasons | 5 Clubs | 6 Leagues | 170 | 8,860 | 52 | 21.6 | 98.4 | 91 | 79 | 37 | 79 | 20 | 31 | 1.31 | 144 | 136 | +8 | +0.08 | 0.00 | |||
| Country | Comp | MP | Min | 90s | Starts | Compl | Subs | unSub | onG | onGA | +/- | Matches | ||||||||||
| Strasbourg (5 Seasons) | 3 Leagues | 94 | 4,213 | 45 | 24.8 | 46.8 | 41 | 78 | 13 | 53 | 19 | 22 | 1.30 | 76 | 67 | +9 | +0.19 | +0.19 | ||||
| Lille (3 Seasons) | 1 League | 17 | 1,437 | 85 | 14.0 | 16.0 | 17 | 85 | 9 | 0 | 1 | 1.18 | 23 | 30 | -7 | -0.44 | -0.70 | |||||
| Valenciennes (2 Seasons) | 3 Leagues | 33 | 2,419 | 73 | 32.5 | 26.9 | 27 | 123 | 15 | 6 | 33 | 0 | 1.24 | 31 | 34 | -3 | -0.11 | -0.08 | ||||
| Troyes (1 Season) | 1 League | 13 | 522 | 40 | 15.3 | 5.8 | 5 | 61 | 0 | 8 | 27 | 0 | 1.15 | 6 | 5 | +1 | +0.17 | +0.70 | ||||
| Mamelodi Sundowns (1 Season) | 2 Leagues | 13 | 269 | 21 | 9.1 | 3.0 | 1 | 45 | 0 | 12 | 19 | 8 | 1.92 | 8 | 0 | +8 | +2.68 | +1.74 | ||||
| Ligue 1 (7 Seasons) | 118 | 5,830 | 49 | 19.8 | 64.8 | 60 | 79 | 22 | 58 | 19 | 21 | 1.25 | 102 | 99 | +3 | +0.05 | +0.06 | |||||
| Coupe de France (4 Seasons) | 4 | 260 | 65 | 32.1 | 2.9 | 2 | 98 | 1 | 2 | 33 | 0 | 0.25 | 0 | 2 | -2 | -0.69 | -1.51 | |||||
| Coupe de la Ligue (3 Seasons) | 6 | 303 | 51 | 29.7 | 3.4 | 2 | 81 | 0 | 4 | 36 | 2 | 2.67 | 4 | 4 | 0 | 0.00 | -1.60 | |||||
| Ligue 2 (2 Seasons) | 29 | 2,198 | 76 | 32.1 | 24.4 | 26 | 14 | 3 | 0 | 1.17 | 30 | 31 | -1 | -0.04 | +0.21 | |||||||
| Premiership (1 Season) | 11 | 241 | 22 | 8.9 | 2.7 | 1 | 45 | 0 | 10 | 20 | 8 | 2.00 | 7 | 0 | +7 | +2.61 | +1.55 | |||||
| Club World Cup (1 Season) | 2 | 28 | 14 | 10.4 | 0.3 | 0 | 0 | 2 | 14 | 0 | 1.50 | 1 | 0 | +1 | +3.21 | +3.59 | ||||||
| Playing Time | Starts | Subs | Team Success | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Comp | MP | Min | 90s | Starts | Compl | Subs | unSub | onG | onGA | +/- | Matches | |||||||
| 2016-2017 | 20 | Valenciennes | 1 League | 9 | 686 | 76 | 20.1 | 7.6 | 7 | 5 | 2 | 0 | 1.22 | 5 | 5 | 0 | 0.00 | 0.00 | |||
| 2016-2017 | 20 | Lille | 1 League | 0 | 0 | 0 | 0 | 1 | |||||||||||||
| 2017-2018 | 21 | Valenciennes | 3 Leagues | 24 | 1,733 | 72 | 43.1 | 19.3 | 20 | 123 | 10 | 4 | 33 | 0 | 1.25 | 26 | 29 | -3 | -0.16 | -0.08 | |
| 2017-2018 | 21 | Lille | 1 League | 14 | 1,184 | 85 | 34.6 | 13.2 | 14 | 85 | 8 | 0 | 0 | 0.93 | 17 | 29 | -12 | -0.91 | -0.35 | ||
| 2018-2019 | 22 | Lille | 1 League | 3 | 253 | 84 | 7.4 | 2.8 | 3 | 84 | 1 | 0 | 0 | 2.33 | 6 | 1 | +5 | +1.78 | +0.93 | ||
| 2018-2019 | 22 | Strasbourg | 3 Leagues | 36 | 2,048 | 57 | 49.5 | 22.8 | 21 | 81 | 8 | 15 | 23 | 3 | 1.31 | 37 | 29 | +8 | +0.35 | +0.14 | |
| 2019-2020 | 23 | Strasbourg | 2 Leagues | 21 | 1,047 | 50 | 39.7 | 11.6 | 12 | 76 | 3 | 9 | 15 | 2 | 1.33 | 17 | 21 | -4 | -0.34 | -0.60 | |
| 2021-2022 | 25 | Troyes | 1 League | 13 | 522 | 40 | 15.3 | 5.8 | 5 | 61 | 0 | 8 | 27 | 0 | 1.15 | 6 | 5 | +1 | +0.17 | +0.70 | |
| 2021-2022 | 25 | Strasbourg | 2 Leagues | 2 | 16 | 8 | 0.4 | 0.2 | 0 | 0 | 2 | 8 | 2 | 1.50 | 0 | 0 | 0 | 0.00 | -0.43 | ||
| 2022-2023 | 26 | Strasbourg | 2 Leagues | 20 | 485 | 24 | 13.7 | 5.4 | 3 | 65 | 0 | 17 | 17 | 14 | 1.20 | 11 | 9 | +2 | +0.37 | +0.67 | |
| 2023-2024 | 27 | Strasbourg | 1 League | 15 | 617 | 41 | 20.2 | 6.9 | 5 | 78 | 2 | 10 | 23 | 1 | 1.33 | 11 | 8 | +3 | +0.44 | +0.99 | |
| 2025 | 29 | Mamelodi Sundowns | 1 League | 2 | 28 | 14 | 10.4 | 0.3 | 0 | 0 | 2 | 14 | 0 | 1.50 | 1 | 0 | +1 | +3.21 | +3.59 | ||
| 2025-2026 | 29 | Mamelodi Sundowns | 1 League | 11 | 241 | 22 | 8.9 | 2.7 | 1 | 45 | 0 | 10 | 20 | 8 | 2.00 | 7 | 0 | +7 | +2.61 | +1.55 | |
| 8 Seasons | 5 Clubs | 6 Leagues | 170 | 8,860 | 52 | 21.6 | 98.4 | 91 | 79 | 37 | 79 | 20 | 31 | 1.31 | 144 | 136 | +8 | +0.08 | 0.00 | ||
| Comp | MP | Min | 90s | Starts | Compl | Subs | unSub | onG | onGA | +/- | Matches | ||||||||||
| Strasbourg (5 Seasons) | 3 Leagues | 94 | 4,213 | 45 | 24.8 | 46.8 | 41 | 78 | 13 | 53 | 19 | 22 | 1.30 | 76 | 67 | +9 | +0.19 | +0.19 | |||
| Lille (3 Seasons) | 1 League | 17 | 1,437 | 85 | 14.0 | 16.0 | 17 | 85 | 9 | 0 | 1 | 1.18 | 23 | 30 | -7 | -0.44 | -0.70 | ||||
| Valenciennes (2 Seasons) | 3 Leagues | 33 | 2,419 | 73 | 32.5 | 26.9 | 27 | 123 | 15 | 6 | 33 | 0 | 1.24 | 31 | 34 | -3 | -0.11 | -0.08 | |||
| Troyes (1 Season) | 1 League | 13 | 522 | 40 | 15.3 | 5.8 | 5 | 61 | 0 | 8 | 27 | 0 | 1.15 | 6 | 5 | +1 | +0.17 | +0.70 | |||
| Mamelodi Sundowns (1 Season) | 2 Leagues | 13 | 269 | 21 | 9.1 | 3.0 | 1 | 45 | 0 | 12 | 19 | 8 | 1.92 | 8 | 0 | +8 | +2.68 | +1.74 | |||
| Ligue 1 (7 Seasons) | 118 | 5,830 | 49 | 19.8 | 64.8 | 60 | 79 | 22 | 58 | 19 | 21 | 1.25 | 102 | 99 | +3 | +0.05 | +0.06 | ||||
| Coupe de France (4 Seasons) | 4 | 260 | 65 | 32.1 | 2.9 | 2 | 98 | 1 | 2 | 33 | 0 | 0.25 | 0 | 2 | -2 | -0.69 | -1.51 | ||||
| Coupe de la Ligue (3 Seasons) | 6 | 303 | 51 | 29.7 | 3.4 | 2 | 81 | 0 | 4 | 36 | 2 | 2.67 | 4 | 4 | 0 | 0.00 | -1.60 | ||||
| Ligue 2 (2 Seasons) | 29 | 2,198 | 76 | 32.1 | 24.4 | 26 | 14 | 3 | 0 | 1.17 | 30 | 31 | -1 | -0.04 | +0.21 | ||||||
| Premiership (1 Season) | 11 | 241 | 22 | 8.9 | 2.7 | 1 | 45 | 0 | 10 | 20 | 8 | 2.00 | 7 | 0 | +7 | +2.61 | +1.55 | ||||
| Club World Cup (1 Season) | 2 | 28 | 14 | 10.4 | 0.3 | 0 | 0 | 2 | 14 | 0 | 1.50 | 1 | 0 | +1 | +3.21 | +3.59 | |||||
| Playing Time | Starts | Subs | Team Success | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Country | Comp | LgRank | MP | Min | 90s | Starts | Compl | Subs | unSub | onG | onGA | +/- | Matches | |||||||
| 2016-2017 | 20 | Valenciennes | fr FRA | 2. Ligue 2 | 13th | 9 | 686 | 76 | 20.1 | 7.6 | 7 | 5 | 2 | 0 | 1.22 | 5 | 5 | 0 | 0.00 | 0.00 | Matches | ||
| 2016-2017 | 20 | Lille | fr FRA | 1. Ligue 1 | 11th | 0 | 0 | 0 | 0 | 1 | Matches | ||||||||||||
| 2017-2018 | 21 | Valenciennes | fr FRA | 2. Ligue 2 | 13th | 20 | 1,512 | 76 | 44.2 | 16.8 | 19 | 9 | 1 | 0 | 1.15 | 25 | 26 | -1 | -0.06 | +0.55 | Matches | ||
| 2017-2018 | 21 | Lille | fr FRA | 1. Ligue 1 | 17th | 14 | 1,184 | 85 | 34.6 | 13.2 | 14 | 85 | 8 | 0 | 0 | 0.93 | 17 | 29 | -12 | -0.91 | -0.35 | Matches | |
| 2018-2019 | 22 | Lille | fr FRA | 1. Ligue 1 | 2nd | 3 | 253 | 84 | 7.4 | 2.8 | 3 | 84 | 1 | 0 | 0 | 2.33 | 6 | 1 | +5 | +1.78 | +0.93 | Matches | |
| 2018-2019 | 22 | Strasbourg | fr FRA | 1. Ligue 1 | 11th | 32 | 1,771 | 55 | 51.8 | 19.7 | 18 | 82 | 8 | 14 | 21 | 2 | 1.19 | 34 | 26 | +8 | +0.41 | +0.30 | Matches |
| 2019-2020 | 23 | Strasbourg | fr FRA | 1. Ligue 1 | 10th | 21 | 1,047 | 50 | 43.1 | 11.6 | 12 | 76 | 3 | 9 | 15 | 1 | 1.33 | 17 | 21 | -4 | -0.34 | -0.60 | Matches |
| 2021-2022 | 25 | Troyes | fr FRA | 1. Ligue 1 | 15th | 13 | 522 | 40 | 15.3 | 5.8 | 5 | 61 | 0 | 8 | 27 | 0 | 1.15 | 6 | 5 | +1 | +0.17 | +0.70 | Matches |
| 2021-2022 | 25 | Strasbourg | fr FRA | 1. Ligue 1 | 6th | 1 | 1 | 1 | 0.0 | 0.0 | 0 | 0 | 1 | 1 | 2 | 3.00 | 0 | 0 | 0 | 0.00 | -0.45 | Matches | |
| 2022-2023 | 26 | Strasbourg | fr FRA | 1. Ligue 1 | 15th | 19 | 435 | 23 | 12.7 | 4.8 | 3 | 65 | 0 | 16 | 15 | 14 | 1.21 | 11 | 9 | +2 | +0.41 | +0.72 | Matches |
| 2023-2024 | 27 | Strasbourg | fr FRA | 1. Ligue 1 | 13th | 15 | 617 | 41 | 20.2 | 6.9 | 5 | 78 | 2 | 10 | 23 | 1 | 1.33 | 11 | 8 | +3 | +0.44 | +0.99 | Matches |
| 2025-2026 | 29 | Mamelodi Sundowns | za RSA | 1. Premiership | 2nd | 11 | 241 | 22 | 8.9 | 2.7 | 1 | 45 | 0 | 10 | 20 | 8 | 2.00 | 7 | 0 | +7 | +2.61 | +1.55 | Matches |
| 8 Seasons | 5 Clubs | 3 Leagues | 158 | 8,269 | 52 | 21.2 | 91.9 | 87 | 78 | 36 | 71 | 19 | 29 | 1.28 | 139 | 130 | +9 | +0.10 | +0.06 | ||||
| Country | Comp | LgRank | MP | Min | 90s | Starts | Compl | Subs | unSub | onG | onGA | +/- | Matches | ||||||||||
| Strasbourg (5 Seasons) | 1 League | 88 | 3,871 | 44 | 24.6 | 43.0 | 38 | 78 | 13 | 50 | 18 | 20 | 1.27 | 73 | 64 | +9 | +0.21 | +0.22 | |||||
| Lille (3 Seasons) | 1 League | 17 | 1,437 | 85 | 14.0 | 16.0 | 17 | 85 | 9 | 0 | 1 | 1.18 | 23 | 30 | -7 | -0.44 | -0.70 | ||||||
| Valenciennes (2 Seasons) | 1 League | 29 | 2,198 | 76 | 32.1 | 24.4 | 26 | 14 | 3 | 0 | 1.17 | 30 | 31 | -1 | -0.04 | +0.21 | |||||||
| Troyes (1 Season) | 1 League | 13 | 522 | 40 | 15.3 | 5.8 | 5 | 61 | 0 | 8 | 27 | 0 | 1.15 | 6 | 5 | +1 | +0.17 | +0.70 | |||||
| Mamelodi Sundowns (1 Season) | 1 League | 11 | 241 | 22 | 8.9 | 2.7 | 1 | 45 | 0 | 10 | 20 | 8 | 2.00 | 7 | 0 | +7 | +2.61 | +1.55 | |||||
| Ligue 1 (7 Seasons) | 118 | 5,830 | 49 | 19.8 | 64.8 | 60 | 79 | 22 | 58 | 19 | 21 | 1.25 | 102 | 99 | +3 | +0.05 | +0.06 | ||||||
| Ligue 2 (2 Seasons) | 29 | 2,198 | 76 | 32.1 | 24.4 | 26 | 14 | 3 | 0 | 1.17 | 30 | 31 | -1 | -0.04 | +0.21 | ||||||||
| Premiership (1 Season) | 11 | 241 | 22 | 8.9 | 2.7 | 1 | 45 | 0 | 10 | 20 | 8 | 2.00 | 7 | 0 | +7 | +2.61 | +1.55 | ||||||
| Playing Time | Starts | Subs | Team Success | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Country | Comp | LgRank | MP | Min | 90s | Starts | Compl | Subs | unSub | onG | onGA | +/- | Matches | |||||||
| 2017-2018 | 21 | Valenciennes | fr FRA | Coupe de France | 33rd | 1 | 120 | 120 | 40.0 | 1.3 | 1 | 120 | 1 | 0 | 0 | 0.00 | 0 | 1 | -1 | -0.75 | -3.25 | Matches | |
| 2017-2018 | 21 | Valenciennes | fr FRA | 1. Coupe de la Ligue | 17th | 3 | 101 | 34 | 33.7 | 1.1 | 0 | 0 | 3 | 33 | 0 | 2.33 | 1 | 2 | -1 | -0.89 | -3.60 | Matches | |
| 2018-2019 | 22 | Strasbourg | fr FRA | Coupe de France | 17th | 1 | 75 | 75 | 35.7 | 0.8 | 1 | 75 | 0 | 0 | 0 | 0.00 | 0 | 1 | -1 | -1.20 | -1.20 | Matches | |
| 2018-2019 | 22 | Strasbourg | fr FRA | 1. Coupe de la Ligue | 1st | 3 | 202 | 67 | 39.6 | 2.2 | 2 | 79 | 0 | 1 | 44 | 1 | 3.00 | 3 | 2 | +1 | +0.45 | -0.43 | Matches |
| 2019-2020 | 23 | Strasbourg | fr FRA | 1. Coupe de la Ligue | 5th | 0 | 0 | 0 | 0 | 1 | Matches | ||||||||||||
| 2021-2022 | 25 | Strasbourg | fr FRA | Coupe de France | R32 | 1 | 15 | 15 | 8.3 | 0.2 | 0 | 0 | 1 | 15 | 0 | 0.00 | 0 | 0 | 0 | 0.00 | 0.00 | Matches | |
| 2022-2023 | 26 | Strasbourg | fr FRA | Coupe de France | R64 | 1 | 50 | 50 | 41.7 | 0.6 | 0 | 0 | 1 | 50 | 0 | 1.00 | 0 | 0 | 0 | 0.00 | 0.00 | Matches | |
| 5 Seasons | 2 Clubs | 2 Leagues | 10 | 563 | 56 | 30.8 | 6.3 | 4 | 89 | 1 | 6 | 35 | 2 | 1.70 | 4 | 6 | -2 | -0.32 | -1.51 | ||||
| Country | Comp | LgRank | MP | Min | 90s | Starts | Compl | Subs | unSub | onG | onGA | +/- | Matches | ||||||||||
| Strasbourg (4 Seasons) | 2 Leagues | 6 | 342 | 57 | 27.8 | 3.8 | 3 | 78 | 0 | 3 | 36 | 2 | 1.67 | 3 | 3 | 0 | 0.00 | -0.40 | |||||
| Valenciennes (1 Season) | 2 Leagues | 4 | 221 | 55 | 36.8 | 2.5 | 1 | 123 | 1 | 3 | 33 | 0 | 1.75 | 1 | 3 | -2 | -0.81 | -3.43 | |||||
| Coupe de France (4 Seasons) | 4 | 260 | 65 | 32.1 | 2.9 | 2 | 98 | 1 | 2 | 33 | 0 | 0.25 | 0 | 2 | -2 | -0.69 | -1.51 | ||||||
| Coupe de la Ligue (3 Seasons) | 6 | 303 | 51 | 29.7 | 3.4 | 2 | 81 | 0 | 4 | 36 | 2 | 2.67 | 4 | 4 | 0 | 0.00 | -1.60 | ||||||
| Playing Time | Starts | Subs | Team Success | |||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Comp | LgRank | MP | Min | 90s | Starts | Compl | Subs | unSub | onG | onGA | +/- | Matches | |||||||
| 2025 | 29 | Mamelodi Sundowns | 1. Club World Cup | GR | 2 | 28 | 14 | 10.4 | 0.3 | 0 | 0 | 2 | 14 | 0 | 1.50 | 1 | 0 | +1 | +3.21 | +3.59 | Matches | |
| 1 Season | 1 Club | 1 League | 2 | 28 | 14 | 10.4 | 0.3 | 0 | 0 | 2 | 14 | 0 | 1.50 | 1 | 0 | +1 | +3.21 | +3.59 | ||||
| Playing Time | Starts | Subs | Team Success | |||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Comp | LgRank | MP | Min | 90s | Starts | Compl | Subs | unSub | onG | onGA | +/- | Matches | |||||||
| 2018 | 22 | za South Africa | WCQ | 0 | 0 | 0 | 0 | 1 | Matches | |||||||||||||
| 2018 | 22 | za South Africa | Friendlies (M) | 3 | 166 | 55 | 55.3 | 1.8 | 2 | 83 | 1 | 1 | 0 | 0 | 1.33 | 2 | 2 | 0 | 0.00 | -1.34 | Matches | |
| 2019 | 23 | za South Africa | Africa Cup of Nations | QF | 5 | 418 | 84 | 92.9 | 4.6 | 5 | 84 | 2 | 0 | 0 | 1.20 | 3 | 2 | +1 | +0.22 | +5.84 | Matches | |
| 2019 | 23 | za South Africa | Africa Cup of Nations qualification | 4 | 360 | 90 | 66.7 | 4.0 | 4 | 90 | 4 | 0 | 0 | 2.00 | 9 | 2 | +7 | +1.75 | +0.75 | Matches | ||
| 2021 | 25 | za South Africa | Africa Cup of Nations qualification | 2 | 97 | 49 | 18.0 | 1.1 | 1 | 70 | 0 | 1 | 27 | 0 | 1.50 | 1 | 1 | 0 | 0.00 | -0.20 | Matches | |
| 2023 | 27 | za South Africa | Friendlies (M) | 2 | 135 | 68 | 50.0 | 1.5 | 1 | 90 | 1 | 1 | 45 | 1 | 1.00 | 1 | 1 | 0 | 0.00 | -0.67 | Matches | |
| 4 Seasons | 1 Club | 4 Leagues | 16 | 1,176 | 74 | 41.7 | 13.1 | 13 | 85 | 8 | 3 | 24 | 2 | 1.44 | 16 | 8 | +8 | +0.61 | +0.22 | |||
| Africa Cup of Nations qualification (2 Seasons) | 6 | 457 | 76 | 42.3 | 5.1 | 5 | 86 | 4 | 1 | 27 | 0 | 1.83 | 10 | 3 | +7 | +1.38 | +0.95 | |||||
| Friendlies (M) (2 Seasons) | 5 | 301 | 60 | 52.8 | 3.3 | 3 | 85 | 2 | 2 | 23 | 1 | 1.20 | 3 | 3 | 0 | 0.00 | -1.00 | |||||
| Africa Cup of Nations (1 Season) | 5 | 418 | 84 | 92.9 | 4.6 | 5 | 84 | 2 | 0 | 0 | 1.20 | 3 | 2 | +1 | +0.22 | +5.84 | ||||||
| WCQ (1 Season) | 0 | 0 | 0 | 0 | 1 | |||||||||||||||||
| Performance | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Country | Comp | 90s | CrdY | CrdR | 2CrdY | Fls | Fld | Off | Crs | Int | TklW | PKwon | PKcon | OG | Matches |
| 2016-2017 | 20 | Valenciennes | fr FRA | 2. Ligue 2 | 7.6 | 0 | 0 | 0 | 10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Matches |
| 2017-2018 | 21 | Valenciennes | fr FRA | Coupe de France | 1.3 | 0 | 0 | 0 | 0 | Matches | ||||||||
| 2017-2018 | 21 | Valenciennes | fr FRA | 1. Coupe de la Ligue | 1.1 | 0 | 0 | 0 | 0 | Matches | ||||||||
| 2017-2018 | 21 | Lille | fr FRA | 1. Ligue 1 | 13.2 | 1 | 0 | 0 | 22 | 18 | 9 | 2 | 2 | 6 | 0 | 0 | 0 | Matches |
| 2017-2018 | 21 | Valenciennes | fr FRA | 2. Ligue 2 | 16.8 | 2 | 0 | 0 | 24 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Matches |
| 2018-2019 | 22 | Strasbourg | fr FRA | Coupe de France | 0.8 | 0 | 0 | 0 | 2 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | Matches |
| 2018-2019 | 22 | Strasbourg | fr FRA | 1. Coupe de la Ligue | 2.2 | 0 | 0 | 0 | 0 | Matches | ||||||||
| 2018-2019 | 22 | Strasbourg | fr FRA | 1. Ligue 1 | 19.7 | 3 | 0 | 0 | 50 | 26 | 9 | 10 | 1 | 9 | 2 | 0 | 0 | Matches |
| 2018-2019 | 22 | Lille | fr FRA | 1. Ligue 1 | 2.8 | 0 | 0 | 0 | 9 | 1 | 2 | 1 | 0 | 1 | 0 | 0 | 0 | Matches |
| 2019-2020 | 23 | Strasbourg | fr FRA | 1. Ligue 1 | 11.6 | 0 | 0 | 0 | 25 | 7 | 7 | 12 | 3 | 4 | 0 | Matches | ||
| 2021-2022 | 25 | Strasbourg | fr FRA | Coupe de France | 0.2 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | Matches | ||
| 2021-2022 | 25 | Troyes | fr FRA | 1. Ligue 1 | 5.8 | 1 | 0 | 0 | 10 | 16 | 4 | 1 | 2 | 3 | 0 | Matches | ||
| 2021-2022 | 25 | Strasbourg | fr FRA | 1. Ligue 1 | 0.0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | Matches | ||
| 2022-2023 | 26 | Strasbourg | fr FRA | Coupe de France | 0.6 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | Matches | ||
| 2022-2023 | 26 | Strasbourg | fr FRA | 1. Ligue 1 | 4.8 | 0 | 0 | 0 | 12 | 12 | 0 | 4 | 0 | 0 | 0 | Matches | ||
| 2023-2024 | 27 | Strasbourg | fr FRA | 1. Ligue 1 | 6.9 | 0 | 0 | 0 | 13 | 11 | 4 | 1 | 0 | 2 | 0 | Matches | ||
| 2025 | 29 | Mamelodi Sundowns | 1. Club World Cup | 0.3 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | Matches | |||
| 2025-2026 | 29 | Mamelodi Sundowns | za RSA | 1. Premiership | 2.7 | 0 | 0 | 0 | 11 | 3 | 3 | 0 | 1 | 1 | 0 | Matches | ||
| 8 Seasons | 5 Clubs | 6 Leagues | 98.4 | 7 | 0 | 0 | 190 | 97 | 38 | 32 | 10 | 26 | 2 | 0 | 0 | |||
| Country | Comp | 90s | CrdY | CrdR | 2CrdY | Fls | Fld | Off | Crs | Int | TklW | PKwon | PKcon | OG | Matches | |||
| Strasbourg (5 Seasons) | 3 Leagues | 46.8 | 3 | 0 | 0 | 104 | 57 | 20 | 28 | 5 | 15 | 2 | 0 | 0 | ||||
| Lille (3 Seasons) | 1 League | 16.0 | 1 | 0 | 0 | 31 | 19 | 11 | 3 | 2 | 7 | 0 | 0 | 0 | ||||
| Valenciennes (2 Seasons) | 3 Leagues | 26.9 | 2 | 0 | 0 | 34 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||||
| Troyes (1 Season) | 1 League | 5.8 | 1 | 0 | 0 | 10 | 16 | 4 | 1 | 2 | 3 | 0 | ||||||
| Mamelodi Sundowns (1 Season) | 2 Leagues | 3.0 | 0 | 0 | 0 | 11 | 5 | 3 | 0 | 1 | 1 | 0 | ||||||
| Ligue 1 (7 Seasons) | 64.8 | 5 | 0 | 0 | 142 | 91 | 35 | 31 | 8 | 25 | 2 | 0 | 0 | |||||
| Coupe de France (4 Seasons) | 2.9 | 0 | 0 | 0 | 3 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | |||||
| Coupe de la Ligue (3 Seasons) | 3.4 | 0 | 0 | 0 | 0 | |||||||||||||
| Ligue 2 (2 Seasons) | 24.4 | 2 | 0 | 0 | 34 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |||||
| Premiership (1 Season) | 2.7 | 0 | 0 | 0 | 11 | 3 | 3 | 0 | 1 | 1 | 0 | |||||||
| Club World Cup (1 Season) | 0.3 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | |||||||
| Performance | |||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Comp | 90s | CrdY | CrdR | 2CrdY | Fls | Fld | Off | Crs | Int | TklW | PKwon | PKcon | OG | Matches |
| 2016-2017 | 20 | Valenciennes | 1 League | 7.6 | 0 | 0 | 0 | 10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
| 2017-2018 | 21 | Valenciennes | 3 Leagues | 19.3 | 2 | 0 | 0 | 24 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
| 2017-2018 | 21 | Lille | 1 League | 13.2 | 1 | 0 | 0 | 22 | 18 | 9 | 2 | 2 | 6 | 0 | 0 | 0 | |
| 2018-2019 | 22 | Lille | 1 League | 2.8 | 0 | 0 | 0 | 9 | 1 | 2 | 1 | 0 | 1 | 0 | 0 | 0 | |
| 2018-2019 | 22 | Strasbourg | 3 Leagues | 22.8 | 3 | 0 | 0 | 52 | 27 | 9 | 10 | 2 | 9 | 2 | 0 | 0 | |
| 2019-2020 | 23 | Strasbourg | 2 Leagues | 11.6 | 0 | 0 | 0 | 25 | 7 | 7 | 12 | 3 | 4 | 0 | |||
| 2021-2022 | 25 | Troyes | 1 League | 5.8 | 1 | 0 | 0 | 10 | 16 | 4 | 1 | 2 | 3 | 0 | |||
| 2021-2022 | 25 | Strasbourg | 2 Leagues | 0.2 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | |||
| 2022-2023 | 26 | Strasbourg | 2 Leagues | 5.4 | 0 | 0 | 0 | 12 | 12 | 0 | 5 | 0 | 0 | 0 | |||
| 2023-2024 | 27 | Strasbourg | 1 League | 6.9 | 0 | 0 | 0 | 13 | 11 | 4 | 1 | 0 | 2 | 0 | |||
| 2025 | 29 | Mamelodi Sundowns | 1 League | 0.3 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | |||
| 2025-2026 | 29 | Mamelodi Sundowns | 1 League | 2.7 | 0 | 0 | 0 | 11 | 3 | 3 | 0 | 1 | 1 | 0 | |||
| 8 Seasons | 5 Clubs | 6 Leagues | 98.4 | 7 | 0 | 0 | 190 | 97 | 38 | 32 | 10 | 26 | 2 | 0 | 0 | ||
| Comp | 90s | CrdY | CrdR | 2CrdY | Fls | Fld | Off | Crs | Int | TklW | PKwon | PKcon | OG | Matches | |||
| Strasbourg (5 Seasons) | 3 Leagues | 46.8 | 3 | 0 | 0 | 104 | 57 | 20 | 28 | 5 | 15 | 2 | 0 | 0 | |||
| Lille (3 Seasons) | 1 League | 16.0 | 1 | 0 | 0 | 31 | 19 | 11 | 3 | 2 | 7 | 0 | 0 | 0 | |||
| Valenciennes (2 Seasons) | 3 Leagues | 26.9 | 2 | 0 | 0 | 34 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |||
| Troyes (1 Season) | 1 League | 5.8 | 1 | 0 | 0 | 10 | 16 | 4 | 1 | 2 | 3 | 0 | |||||
| Mamelodi Sundowns (1 Season) | 2 Leagues | 3.0 | 0 | 0 | 0 | 11 | 5 | 3 | 0 | 1 | 1 | 0 | |||||
| Ligue 1 (7 Seasons) | 64.8 | 5 | 0 | 0 | 142 | 91 | 35 | 31 | 8 | 25 | 2 | 0 | 0 | ||||
| Coupe de France (4 Seasons) | 2.9 | 0 | 0 | 0 | 3 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | ||||
| Coupe de la Ligue (3 Seasons) | 3.4 | 0 | 0 | 0 | 0 | ||||||||||||
| Ligue 2 (2 Seasons) | 24.4 | 2 | 0 | 0 | 34 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||||
| Premiership (1 Season) | 2.7 | 0 | 0 | 0 | 11 | 3 | 3 | 0 | 1 | 1 | 0 | ||||||
| Club World Cup (1 Season) | 0.3 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | ||||||
| Performance | |||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Country | Comp | LgRank | 90s | CrdY | CrdR | 2CrdY | Fls | Fld | Off | Crs | Int | TklW | PKwon | PKcon | OG | Matches |
| 2016-2017 | 20 | Valenciennes | fr FRA | 2. Ligue 2 | 13th | 7.6 | 0 | 0 | 0 | 10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Matches |
| 2017-2018 | 21 | Valenciennes | fr FRA | 2. Ligue 2 | 13th | 16.8 | 2 | 0 | 0 | 24 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Matches |
| 2017-2018 | 21 | Lille | fr FRA | 1. Ligue 1 | 17th | 13.2 | 1 | 0 | 0 | 22 | 18 | 9 | 2 | 2 | 6 | 0 | 0 | 0 | Matches |
| 2018-2019 | 22 | Lille | fr FRA | 1. Ligue 1 | 2nd | 2.8 | 0 | 0 | 0 | 9 | 1 | 2 | 1 | 0 | 1 | 0 | 0 | 0 | Matches |
| 2018-2019 | 22 | Strasbourg | fr FRA | 1. Ligue 1 | 11th | 19.7 | 3 | 0 | 0 | 50 | 26 | 9 | 10 | 1 | 9 | 2 | 0 | 0 | Matches |
| 2019-2020 | 23 | Strasbourg | fr FRA | 1. Ligue 1 | 10th | 11.6 | 0 | 0 | 0 | 25 | 7 | 7 | 12 | 3 | 4 | 0 | Matches | ||
| 2021-2022 | 25 | Troyes | fr FRA | 1. Ligue 1 | 15th | 5.8 | 1 | 0 | 0 | 10 | 16 | 4 | 1 | 2 | 3 | 0 | Matches | ||
| 2021-2022 | 25 | Strasbourg | fr FRA | 1. Ligue 1 | 6th | 0.0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | Matches | ||
| 2022-2023 | 26 | Strasbourg | fr FRA | 1. Ligue 1 | 15th | 4.8 | 0 | 0 | 0 | 12 | 12 | 0 | 4 | 0 | 0 | 0 | Matches | ||
| 2023-2024 | 27 | Strasbourg | fr FRA | 1. Ligue 1 | 13th | 6.9 | 0 | 0 | 0 | 13 | 11 | 4 | 1 | 0 | 2 | 0 | Matches | ||
| 2025-2026 | 29 | Mamelodi Sundowns | za RSA | 1. Premiership | 2nd | 2.7 | 0 | 0 | 0 | 11 | 3 | 3 | 0 | 1 | 1 | 0 | Matches | ||
| 8 Seasons | 5 Clubs | 3 Leagues | 91.9 | 7 | 0 | 0 | 187 | 94 | 38 | 31 | 9 | 26 | 2 | 0 | 0 | ||||
| Country | Comp | LgRank | 90s | CrdY | CrdR | 2CrdY | Fls | Fld | Off | Crs | Int | TklW | PKwon | PKcon | OG | Matches | |||
| Strasbourg (5 Seasons) | 1 League | 43.0 | 3 | 0 | 0 | 101 | 56 | 20 | 27 | 4 | 15 | 2 | 0 | 0 | |||||
| Lille (3 Seasons) | 1 League | 16.0 | 1 | 0 | 0 | 31 | 19 | 11 | 3 | 2 | 7 | 0 | 0 | 0 | |||||
| Valenciennes (2 Seasons) | 1 League | 24.4 | 2 | 0 | 0 | 34 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |||||
| Troyes (1 Season) | 1 League | 5.8 | 1 | 0 | 0 | 10 | 16 | 4 | 1 | 2 | 3 | 0 | |||||||
| Mamelodi Sundowns (1 Season) | 1 League | 2.7 | 0 | 0 | 0 | 11 | 3 | 3 | 0 | 1 | 1 | 0 | |||||||
| Ligue 1 (7 Seasons) | 64.8 | 5 | 0 | 0 | 142 | 91 | 35 | 31 | 8 | 25 | 2 | 0 | 0 | ||||||
| Ligue 2 (2 Seasons) | 24.4 | 2 | 0 | 0 | 34 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||||||
| Premiership (1 Season) | 2.7 | 0 | 0 | 0 | 11 | 3 | 3 | 0 | 1 | 1 | 0 | ||||||||
| Performance | |||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Country | Comp | LgRank | 90s | CrdY | CrdR | 2CrdY | Fls | Fld | Off | Crs | Int | TklW | PKwon | PKcon | OG | Matches |
| 2017-2018 | 21 | Valenciennes | fr FRA | Coupe de France | 33rd | 1.3 | 0 | 0 | 0 | 0 | Matches | ||||||||
| 2017-2018 | 21 | Valenciennes | fr FRA | 1. Coupe de la Ligue | 17th | 1.1 | 0 | 0 | 0 | 0 | Matches | ||||||||
| 2018-2019 | 22 | Strasbourg | fr FRA | Coupe de France | 17th | 0.8 | 0 | 0 | 0 | 2 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | Matches |
| 2018-2019 | 22 | Strasbourg | fr FRA | 1. Coupe de la Ligue | 1st | 2.2 | 0 | 0 | 0 | 0 | Matches | ||||||||
| 2021-2022 | 25 | Strasbourg | fr FRA | Coupe de France | R32 | 0.2 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | Matches | ||
| 2022-2023 | 26 | Strasbourg | fr FRA | Coupe de France | R64 | 0.6 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | Matches | ||
| 5 Seasons | 2 Clubs | 2 Leagues | 6.3 | 0 | 0 | 0 | 3 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | ||||
| Country | Comp | LgRank | 90s | CrdY | CrdR | 2CrdY | Fls | Fld | Off | Crs | Int | TklW | PKwon | PKcon | OG | Matches | |||
| Strasbourg (4 Seasons) | 2 Leagues | 3.8 | 0 | 0 | 0 | 3 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | |||||
| Valenciennes (1 Season) | 2 Leagues | 2.5 | 0 | 0 | 0 | 0 | |||||||||||||
| Coupe de France (4 Seasons) | 2.9 | 0 | 0 | 0 | 3 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | ||||||
| Coupe de la Ligue (3 Seasons) | 3.4 | 0 | 0 | 0 | 0 | ||||||||||||||
| Performance | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Comp | LgRank | 90s | CrdY | CrdR | 2CrdY | Fls | Fld | Off | Crs | Int | TklW | PKwon | PKcon | OG | Matches |
| 2025 | 29 | Mamelodi Sundowns | 1. Club World Cup | GR | 0.3 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | Matches | ||
| 1 Season | 1 Club | 1 League | 0.3 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | |||||
| Performance | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Season | Age | Squad | Comp | LgRank | 90s | CrdY | CrdR | 2CrdY | Fls | Fld | Off | Crs | Int | TklW | PKwon | PKcon | OG | Matches |
| 2018 | 22 | za South Africa | Friendlies (M) | 1.8 | 0 | 0 | 0 | 0 | Matches | |||||||||
| 2019 | 23 | za South Africa | Africa Cup of Nations | QF | 4.6 | 2 | 0 | 0 | 24 | 13 | 0 | 1 | 0 | 0 | 0 | Matches | ||
| 2019 | 23 | za South Africa | Africa Cup of Nations qualification | 4.0 | 0 | 0 | 0 | 0 | Matches | |||||||||
| 2021 | 25 | za South Africa | Africa Cup of Nations qualification | 1.1 | 0 | 0 | 0 | 0 | Matches | |||||||||
| 2023 | 27 | za South Africa | Friendlies (M) | 1.5 | 0 | 0 | 0 | 0 | Matches | |||||||||
| 4 Seasons | 1 Club | 4 Leagues | 13.1 | 2 | 0 | 0 | 24 | 13 | 0 | 1 | 0 | 0 | 0 | |||||
| Africa Cup of Nations qualification (2 Seasons) | 5.1 | 0 | 0 | 0 | 0 | |||||||||||||
| Friendlies (M) (2 Seasons) | 3.3 | 0 | 0 | 0 | 0 | |||||||||||||
| Africa Cup of Nations (1 Season) | 4.6 | 2 | 0 | 0 | 24 | 13 | 0 | 1 | 0 | 0 | 0 | |||||||
| WCQ (1 Season) | ||||||||||||||||||
About FBref.com
FBref.com launched (June 13, 2018) with domestic league coverage for England, France, Germany, Italy, Spain, and United States. Since then we have been steadily expanding our coverage to include domestic leagues from over 40 countries as well as domestic cup, super cup and youth leagues from top European countries. We have also added coverage for major international cups such as the UEFA Champions League and Copa Libertadores.
FBref is the most complete sources for women's football data on the internet. This includes the entire history of the FIFA Women's World Cup as well as recent domestic league seasons from nine countries.
Note that player records are likely not complete for their careers. Players may come from or move to leagues we don't currently cover. This issue will go down over time, as we add new leagues and seasons.
You can sign up to receive an e-mail when new countries and features launch.
For more information, see our Launch Blog Post, the overall leagues/competition page with details on leagues and seasons we include, or our About Page. Let us know if you find an issue or have a suggestion.
FBref is one of seven Sports-Reference.com sites.

Player Club Summary