Clubs
| Club | Seasons | Apps | Goals | Assists |
|---|---|---|---|---|
| Shrewsbury | 2026/27 | 14 | 4 | 0 |
| Tranmere | 2022/23 – 2025/26 | 112 | 16 | 7 |
| Cheltenham | 2025/26 | 16 | 1 | 2 |
| Wimbledon | 2022/23 – 2023/24 | 92 | 18 | 5 |
| Charlton | 2019/20 – 2021/22 | 35 | 6 | 1 |
| Swindon | 2021/22 | 23 | 9 | 2 |
| Forest Green | 2020/21 | 22 | 3 | — |
| Woking | 2020/21 | 14 | 5 | — |
Transfers
| Date | From | To | Type |
|---|---|---|---|
| 19 Jun 2024 | AFC Wimbledon | Tranmere | — |
| 18 Jul 2022 | Charlton | AFC Wimbledon | — |
| 1 Jun 2022 | Swindon Town | Charlton | — |
| 24 Jan 2022 | Charlton | Swindon Town | Loan |
| 1 Jun 2021 | Forest Green | Charlton | — |
| 19 Jan 2021 | Charlton | Forest Green | Loan |
| 23 Oct 2020 | Charlton | Woking | Loan |
| 26 Jan 2026 | Tranmere | Cheltenham | Loan |
| 30 May 2026 | Cheltenham | Tranmere | Return from loan |
| 30 Jun 2026 | Tranmere | Shrewsbury | Free agent |
| 29 Jun 2026 | Tranmere | Shrewsbury | Free agent |
Season by season
| Season | Competition | Club | Apps | Starts | Min | Goals | Assists | Yellow | Red | Rating |
|---|---|---|---|---|---|---|---|---|---|---|
| 2026/27 | League Cup | Shrewsbury | 2 | 2 | 163 | 1 | 0 | 0 | 0 | 6.30 |
| 2026/27 | EFL Trophy | Shrewsbury | 1 | 1 | 73 | 0 | 0 | 0 | 0 | 6.44 |
| 2026/27 | League Two | Shrewsbury | 11 | 9 | 777 | 3 | 0 | 4 | 0 | 6.51 |
| 2025/26 | League Cup | Tranmere | 1 | 0 | 12 | 0 | 0 | 0 | 0 | 5.70 |
| 2025/26 | EFL Trophy | Tranmere | 4 | 3 | 289 | 1 | 0 | 0 | 0 | 6.78 |
| 2025/26 | League Two | Tranmere | 24 | 9 | 981 | 2 | 2 | 2 | 0 | 6.37 |
| 2025/26 | League Two | Cheltenham | 16 | 11 | 860 | 1 | 2 | 2 | 0 | 6.39 |
| 2024/25 | League Two | Tranmere | 39 | 27 | 1265 | 3 | 1 | 4 | 0 | 6.72 |
| 2024/25 | FA Cup | Tranmere | 1 | 0 | 12 | — | 0 | 0 | 0 | 5.70 |
| 2024/25 | League Cup | Tranmere | 2 | 1 | 91 | — | 0 | 0 | 0 | 6.30 |
| 2024/25 | EFL Trophy | Tranmere | 4 | 3 | 239 | 1 | 0 | 1 | 0 | 6.67 |
| 2023/24 | League Two | Wimbledon | 36 | 11 | 1050 | 4 | 1 | 7 | 0 | 6.58 |
| 2023/24 | League Cup | Wimbledon | 2 | 1 | 82 | 0 | — | 0 | 0 | 6.70 |
| 2023/24 | FA Cup | Wimbledon | 3 | 1 | 145 | 1 | — | 0 | 0 | 6.70 |
| 2023/24 | EFL Trophy | Wimbledon | 6 | 6 | 497 | 3 | — | 1 | 0 | 6.93 |
| 2022/23 | League Two | Wimbledon | 37 | 37 | 3208 | 9 | 4 | 7 | 0 | 6.91 |
| 2022/23 | League Two | Tranmere | 37 | 37 | 3207 | 9 | 4 | 6 | 0 | 6.91 |
| 2022/23 | League Cup | Wimbledon | 1 | 0 | 24 | 0 | — | 0 | 0 | 6.70 |
| 2022/23 | EFL Trophy | Wimbledon | 4 | 2 | 198 | 1 | — | 0 | 0 | 6.20 |
| 2022/23 | FA Cup | Wimbledon | 3 | 3 | 270 | 0 | — | 0 | 0 | — |
| 2021/22 | League Two | Swindon | 23 | 23 | 2005 | 9 | 2 | 4 | 0 | 6.85 |
| 2021/22 | League One | Charlton | 15 | 9 | 692 | 2 | 1 | 1 | 0 | 6.68 |
| 2021/22 | FA Cup | Charlton | 3 | 1 | 127 | 1 | — | 0 | 0 | 6.70 |
| 2021/22 | EFL Trophy | Charlton | 4 | 2 | 165 | 2 | — | 0 | 0 | 6.40 |
| 2021/22 | League Cup | Charlton | 1 | 1 | 90 | 0 | — | 0 | 0 | 6.20 |
| 2020/21 | League Two | Forest Green | 22 | 11 | 936 | 3 | — | 1 | 0 | 6.52 |
| 2020/21 | National League | Woking | 11 | 11 | 952 | 3 | — | 2 | 0 | — |
| 2020/21 | FA Cup | Woking | 2 | 2 | 174 | 2 | — | 1 | 0 | — |
| 2020/21 | FA Trophy | Woking | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2020/21 | EFL Trophy | Charlton | 2 | 2 | 180 | 0 | — | 0 | 0 | 6.20 |
| 2019/20 | Championship | Charlton | 9 | 5 | 392 | 1 | — | 0 | 0 | 6.48 |
| 2019/20 | FA Cup | Charlton | 1 | 1 | 90 | 0 | — | 0 | 0 | 6.70 |
Availability history
No injuries or suspensions recorded.
Trophies
No trophies recorded.
