Clubs
| Club | Seasons | Apps | Goals | Assists |
|---|---|---|---|---|
| Shrewsbury | 2025/26 – 2026/27 | 45 | 2 | 2 |
| Bradford | 2022/23 – 2024/25 | 55 | 2 | 2 |
| Cheltenham | 2024/25 | 46 | 2 | 2 |
| Exeter | 2020/21 – 2022/23 | 29 | 2 | — |
| Middlesbrough | 2018/19 – 2020/21 | 0 | 0 | — |
| Fleetwood | 2020/21 | 9 | 1 | — |
| Den Haag | 2019/20 | 8 | 0 | — |
| Hamilton Academical | 2019/20 | 20 | 0 | — |
| Notts County | 2018/19 | 17 | 0 | — |
| Middlesbrough U21 | 2018 | 3 | 0 | — |
| Wigan | 2016/17 – 2017/18 | 2 | 0 | — |
| AFC Fylde | 2017/18 | 7 | 0 | — |
| Crewe | 2017/18 | 8 | 0 | — |
Transfers
| Date | From | To | Type |
|---|---|---|---|
| 23 Aug 2024 | Bradford | Cheltenham | Loan |
| 31 Jan 2023 | Exeter City | Bradford | Free |
| 21 Jan 2021 | Fleetwood Town | Exeter City | Free |
| 9 Sept 2020 | Middlesbrough | Fleetwood Town | — |
| 1 Jul 2020 | ADO Den Haag | Middlesbrough | — |
| 31 Jan 2019 | Middlesbrough | Notts County | Loan |
| 1 Jul 2018 | Wigan | Middlesbrough | Free |
| 5 Jan 2018 | Wigan | AFC Fylde | Loan |
| 29 Aug 2017 | Wigan | Crewe | Loan |
| 1 Jul 2025 | Cheltenham | Bradford | — |
| 1 Jul 2025 | Bradford | Shrewsbury | Free Transfer |
Season by season
| Season | Competition | Club | Apps | Starts | Min | Goals | Assists | Yellow | Red | Rating |
|---|---|---|---|---|---|---|---|---|---|---|
| 2026/27 | League Cup | Shrewsbury | 1 | 1 | 73 | 0 | 0 | 1 | 0 | 6.30 |
| 2026/27 | EFL Trophy | Shrewsbury | 2 | 2 | 113 | 0 | 0 | 0 | 0 | 6.32 |
| 2026/27 | League Two | Shrewsbury | 9 | 8 | 727 | 0 | 0 | 1 | 0 | 6.89 |
| 2025/26 | EFL Trophy | Shrewsbury | 2 | 2 | 90 | 0 | 0 | 0 | 0 | 6.30 |
| 2025/26 | FA Cup | Shrewsbury | 2 | 2 | 172 | 0 | 0 | 1 | 0 | 6.45 |
| 2025/26 | League Two | Shrewsbury | 29 | 28 | 2504 | 2 | 2 | 6 | 0 | 6.89 |
| 2024/25 | League Two | Cheltenham | 41 | 41 | 3690 | 2 | 2 | 5 | 0 | 7.21 |
| 2024/25 | EFL Trophy | Cheltenham | 3 | 3 | 254 | 0 | 0 | 1 | 0 | 7.20 |
| 2024/25 | FA Cup | Cheltenham | 2 | 2 | 180 | 0 | — | 1 | 0 | — |
| 2023/24 | League Two | Bradford | 26 | 22 | 1966 | 0 | — | 5 | 0 | 7.03 |
| 2023/24 | League Cup | Bradford | 3 | 3 | 270 | 0 | — | 1 | 0 | 7.13 |
| 2023/24 | EFL Trophy | Bradford | 4 | 3 | 270 | 1 | — | 0 | 0 | 7.60 |
| 2023/24 | FA Cup | Bradford | 1 | 1 | 90 | 0 | — | 1 | 0 | — |
| 2022/23 | League Two | Bradford | 21 | 21 | 1920 | 1 | — | 5 | 0 | 7.10 |
| 2022/23 | League One | Exeter | 2 | 2 | 155 | 0 | — | 1 | 0 | 7.35 |
| 2022/23 | League Cup | Exeter | 2 | 2 | 180 | 0 | — | 1 | 0 | 7.15 |
| 2021/22 | League Two | Exeter | 22 | 21 | 1797 | 2 | — | 3 | 0 | 6.97 |
| 2021/22 | EFL Trophy | Exeter | 2 | 2 | 136 | 0 | — | 0 | 0 | 6.90 |
| 2021/22 | FA Cup | Exeter | 1 | 1 | 69 | 0 | — | 0 | 0 | — |
| 2020/21 | League One | Fleetwood | 5 | 5 | 388 | 1 | — | 0 | 0 | 6.80 |
| 2020/21 | League Cup | Fleetwood | 2 | 2 | 136 | 0 | — | 0 | 0 | 6.25 |
| 2020/21 | EFL Trophy | Fleetwood | 2 | 2 | 180 | 0 | — | 0 | 0 | 7.80 |
| 2019/20 | Eredivisie | Den Haag | 8 | 8 | 720 | 0 | — | 1 | 0 | 6.96 |
| 2019/20 | Premiership | Hamilton Academical | 19 | 19 | 1649 | 0 | — | 4 | 1 | 6.86 |
| 2019/20 | League Cup | Hamilton Academical | 1 | 1 | 120 | 0 | — | 0 | 0 | — |
| 2018/19 | League Two | Notts County | 17 | 17 | 1530 | 0 | — | 2 | 0 | — |
| 2018 | EFL Trophy | Middlesbrough U21 | 3 | 3 | 270 | 0 | — | 0 | 0 | — |
| 2017/18 | National League | AFC Fylde | 7 | 6 | 543 | 0 | — | 1 | 0 | — |
| 2017/18 | League Two | Crewe | 5 | 3 | 326 | 0 | — | 1 | 0 | — |
| 2017/18 | EFL Trophy | Crewe | 2 | 2 | 180 | 0 | — | 1 | 0 | — |
| 2017/18 | FA Cup | Crewe | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2017/18 | League Cup | Wigan | 1 | 0 | 25 | 0 | — | 0 | 0 | — |
| 2017/18 | Club Friendlies | Wigan | 1 | 0 | 44 | 0 | — | 0 | 0 | — |
Availability history
No injuries or suspensions recorded.
Trophies
| Competition | Season | Place |
|---|---|---|
| League Two (England) | 2021/2022 | 2nd Place |
