Clubs
| Club | Seasons | Apps | Goals | Assists |
|---|---|---|---|---|
| Rochdale | 2026/27 | 7 | 1 | 0 |
| Wigan | 2023/24 – 2025/26 | 77 | 8 | 8 |
| Gillingham | 2025/26 | 10 | 1 | 0 |
| Burton | 2020/21 – 2022/23 | 89 | 12 | 10 |
| Swindon | 2020/21 | 20 | 2 | 4 |
| Tranmere | 2018/19 – 2019/20 | 41 | 6 | — |
| Oldham | 2019/20 | 32 | 11 | 7 |
| AFC Fylde | 2017/18 | 50 | 10 | — |
| Cheltenham | 2016/17 | 9 | 0 | — |
| Bristol City | 2016/17 | 0 | 0 | — |
| Wrexham | 2015/16 | 2 | 0 | — |
Transfers
| Date | From | To | Type |
|---|---|---|---|
| 1 Jul 2023 | Burton Albion | Wigan | Free |
| 29 Jan 2021 | Bristol City | Burton Albion | Free |
| 29 Aug 2020 | Bristol City | Swindon Town | Loan |
| 1 Jul 2020 | Oldham | Bristol City | — |
| 2 Sept 2019 | Bristol City | Oldham | Loan |
| 9 Jul 2018 | Bristol City | Tranmere | Loan |
| 4 Aug 2017 | Bristol City | AFC Fylde | Loan |
| 3 Jan 2017 | Cheltenham | Bristol City | — |
| 19 Aug 2016 | Bristol City | Cheltenham | Loan |
| 1 Jul 2016 | Wrexham | Bristol City | Free |
| 1 Sept 2025 | Wigan | Gillingham | Loan |
| 30 May 2026 | Gillingham | Wigan | Return from loan |
| 3 Aug 2026 | Wigan | Rochdale | Free agent |
| 2 Aug 2026 | Wigan | Rochdale | Free agent |
Season by season
| Season | Competition | Club | Apps | Starts | Min | Goals | Assists | Yellow | Red | Rating |
|---|---|---|---|---|---|---|---|---|---|---|
| 2026/27 | League Two | Rochdale | 7 | 3 | 192 | 1 | 0 | 0 | 0 | 6.67 |
| 2025/26 | League Cup | Wigan | 1 | 1 | 63 | 0 | 0 | 0 | 0 | 7.20 |
| 2025/26 | EFL Trophy | Gillingham | 1 | 1 | 45 | 0 | 0 | 0 | 0 | 6.60 |
| 2025/26 | League One | Wigan | 1 | 0 | 8 | 0 | 0 | 0 | 0 | 6.60 |
| 2025/26 | League Two | Gillingham | 9 | 5 | 356 | 1 | 0 | 0 | 0 | 6.56 |
| 2024/25 | League One | Wigan | 36 | 30 | 1767 | 3 | 5 | 0 | 0 | 6.93 |
| 2024/25 | FA Cup | Wigan | 1 | 1 | 70 | 1 | 0 | 0 | 0 | 6.90 |
| 2024/25 | EFL Trophy | Wigan | 2 | 1 | 103 | 0 | 0 | 0 | 0 | 7.00 |
| 2023/24 | League One | Wigan | 30 | 21 | 1180 | 3 | 2 | 1 | 0 | 6.86 |
| 2023/24 | FA Cup | Wigan | 2 | 0 | 12 | 0 | — | 0 | 0 | 6.70 |
| 2023/24 | EFL Trophy | Wigan | 4 | 4 | 279 | 1 | 1 | 0 | 0 | 7.23 |
| 2022/23 | League One | Burton | 35 | 30 | 1895 | 3 | 2 | 1 | 1 | 6.61 |
| 2022/23 | League Cup | Burton | 1 | 1 | 81 | 0 | — | 0 | 0 | 6.70 |
| 2022/23 | EFL Trophy | Burton | 2 | 1 | 88 | 1 | — | 0 | 0 | — |
| 2022/23 | FA Cup | Burton | 3 | 3 | 252 | 1 | — | 0 | 0 | 7.30 |
| 2021/22 | League One | Burton | 29 | 23 | 1902 | 4 | 4 | 1 | 1 | 6.70 |
| 2021/22 | League Cup | Burton | 1 | 1 | 78 | 0 | — | 0 | 0 | 6.70 |
| 2021/22 | FA Cup | Burton | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2021/22 | EFL Trophy | Burton | 1 | 0 | 18 | 1 | — | 0 | 0 | 7.30 |
| 2020/21 | League One | Burton | 16 | 13 | 1185 | 2 | 4 | 2 | 0 | 6.89 |
| 2020/21 | League One | Swindon | 16 | 13 | 1038 | 1 | 4 | 1 | 0 | 6.89 |
| 2020/21 | EFL Trophy | Swindon | 3 | 2 | 206 | 0 | — | 0 | 0 | 7.00 |
| 2020/21 | League Cup | Swindon | 1 | 0 | 40 | 1 | — | 0 | 0 | 7.30 |
| 2019/20 | League Two | Oldham | 28 | 25 | 2276 | 9 | 7 | 1 | 0 | 7.31 |
| 2019/20 | EFL Trophy | Oldham | 2 | 2 | 164 | 1 | — | 0 | 0 | — |
| 2019/20 | FA Cup | Oldham | 2 | 2 | 180 | 1 | — | 0 | 0 | — |
| 2018/19 | League Two | Tranmere | 36 | 21 | 1729 | 4 | — | 0 | 0 | — |
| 2018/19 | League Cup | Tranmere | 1 | 0 | 27 | 0 | — | 0 | 0 | — |
| 2018/19 | EFL Trophy | Tranmere | 1 | 1 | 61 | 0 | — | 0 | 0 | — |
| 2018/19 | FA Cup | Tranmere | 2 | 0 | 114 | 1 | — | 0 | 0 | — |
| 2018/19 | Club Friendlies | Tranmere | 1 | 0 | 25 | 1 | — | 0 | 0 | — |
| 2017/18 | National League | AFC Fylde | 45 | 31 | 2682 | 9 | — | 1 | 0 | — |
| 2017/18 | FA Cup | AFC Fylde | 4 | 3 | 278 | 1 | — | 0 | 0 | 6.80 |
| 2017/18 | FA Trophy | AFC Fylde | 1 | 0 | 55 | 0 | — | 0 | 0 | — |
| 2016/17 | League Two | Cheltenham | 5 | 2 | 200 | 0 | — | 0 | 0 | — |
| 2016/17 | League Cup | Cheltenham | 1 | 0 | 22 | 0 | — | 0 | 0 | — |
| 2016/17 | EFL Trophy | Cheltenham | 2 | 2 | 180 | 0 | — | 1 | 0 | — |
| 2016/17 | FA Cup | Cheltenham | 1 | 0 | 8 | 0 | — | 0 | 0 | — |
| 2015/16 | National League | Wrexham | 1 | 0 | 9 | 0 | — | 0 | 0 | — |
| 2015/16 | FA Trophy | Wrexham | 1 | 0 | 2 | 0 | — | 0 | 0 | — |
Availability history
No injuries or suspensions recorded.
Trophies
No trophies recorded.
