Clubs
| Club | Seasons | Apps | Goals | Assists |
|---|---|---|---|---|
| St Mirren | 2026/27 | 9 | 0 | 0 |
| Bristol Rovers | 2021/22 – 2025/26 | 156 | 14 | 18 |
| Barnsley | 2019/20 – 2022/23 | 95 | 4 | 9 |
| Ipswich | 2020/21 | 5 | 0 | — |
| Derby | 2017/18 – 2018/19 | 2 | 0 | — |
| Coventry | 2018/19 | 44 | 5 | — |
| Derby County U23 | 2016 – 2017 | 23 | 6 | — |
| Gloucester City | 2016/17 | 15 | 1 | — |
| Derby County U18 | 2016 | 11 | 1 | — |
| Cheltenham | 2015/16 | 2 | 0 | — |
Transfers
| Date | From | To | Type |
|---|---|---|---|
| 1 Jul 2023 | Barnsley | Bristol Rovers | Free |
| 1 Jul 2022 | Bristol Rovers | Barnsley | — |
| 10 Jul 2021 | Barnsley | Bristol Rovers | Loan |
| 1 Jul 2021 | Ipswich | Barnsley | — |
| 19 Jan 2021 | Barnsley | Ipswich | Loan |
| 1 Jul 2019 | Derby | Barnsley | € 1.4M |
| 1 Jun 2019 | Coventry | Derby | — |
| 16 Aug 2018 | Derby | Coventry | Loan |
| 1 Jul 2017 | Gloucester City | Derby | — |
| 12 Jan 2017 | Derby | Gloucester City | Loan |
| 1 Jul 2016 | Cheltenham | Derby | — |
| 29 Jun 2026 | Bristol Rovers | Thomas Luke | Free agent |
| 29 Jun 2026 | Bristol Rovers | ST Mirren | Free agent |
| 31 Jul 2026 | Bristol Rovers | ST Mirren | Free agent |
Season by season
| Season | Competition | Club | Apps | Starts | Min | Goals | Assists | Yellow | Red | Rating |
|---|---|---|---|---|---|---|---|---|---|---|
| 2026/27 | Premiership | St Mirren | 9 | 1 | 249 | 0 | 0 | 1 | 0 | 6.70 |
| 2025/26 | League Cup | Bristol Rovers | 1 | 1 | 90 | 0 | 0 | 0 | 0 | 5.60 |
| 2025/26 | EFL Trophy | Bristol Rovers | 5 | 5 | 335 | 2 | 1 | 1 | 0 | 7.23 |
| 2025/26 | League Two | Bristol Rovers | 31 | 18 | 1702 | 2 | 0 | 4 | 0 | 6.72 |
| 2024/25 | League One | Bristol Rovers | 36 | 20 | 1913 | 2 | 4 | 6 | 0 | 6.81 |
| 2024/25 | League Cup | Bristol Rovers | 1 | 1 | 90 | 0 | 0 | 0 | 0 | 7.00 |
| 2024/25 | EFL Trophy | Bristol Rovers | 2 | 2 | 180 | 0 | 1 | 0 | 0 | 6.60 |
| 2024/25 | FA Cup | Bristol Rovers | 2 | 0 | 69 | 0 | 0 | 0 | 0 | 6.20 |
| 2023/24 | League One | Bristol Rovers | 37 | 33 | 2897 | 5 | 6 | 5 | 0 | 7.12 |
| 2023/24 | EFL Trophy | Bristol Rovers | 4 | 2 | 184 | 1 | 1 | 1 | 0 | 7.30 |
| 2023/24 | FA Cup | Bristol Rovers | 4 | 3 | 314 | 1 | — | 0 | 0 | — |
| 2023/24 | League Cup | Bristol Rovers | 1 | 1 | 90 | 0 | — | 0 | 0 | 6.90 |
| 2022/23 | League One | Barnsley | 29 | 12 | 1308 | 2 | 3 | 2 | 0 | 6.74 |
| 2022/23 | League Cup | Barnsley | 2 | 1 | 111 | 0 | — | 0 | 0 | 6.60 |
| 2021/22 | League Two | Bristol Rovers | 28 | 10 | 1150 | 0 | 5 | 1 | 0 | 6.79 |
| 2021/22 | EFL Trophy | Bristol Rovers | 1 | 1 | 74 | 1 | — | 0 | 0 | — |
| 2021/22 | League Cup | Bristol Rovers | 1 | 1 | 78 | 0 | — | 0 | 0 | 6.30 |
| 2021/22 | FA Cup | Bristol Rovers | 2 | 2 | 163 | 0 | — | 0 | 0 | — |
| 2020/21 | League One | Ipswich | 5 | 4 | 267 | 0 | — | 0 | 0 | 6.66 |
| 2020/21 | League Cup | Barnsley | 2 | 1 | 104 | 0 | 2 | 0 | 0 | 6.95 |
| 2020/21 | FA Cup | Barnsley | 1 | 0 | 44 | 0 | — | 0 | 0 | 7.20 |
| 2020/21 | Championship | Barnsley | 19 | 7 | 721 | 0 | — | 1 | 0 | 6.62 |
| 2019/20 | Championship | Barnsley | 39 | 24 | 2314 | 1 | 4 | 5 | 0 | 6.72 |
| 2019/20 | League Cup | Barnsley | 1 | 0 | 29 | 0 | — | 0 | 0 | 6.70 |
| 2019/20 | FA Cup | Barnsley | 2 | 2 | 136 | 1 | — | 0 | 0 | — |
| 2018/19 | League One | Coventry | 43 | 41 | 3619 | 4 | — | 7 | 0 | — |
| 2018/19 | FA Cup | Coventry | 1 | 1 | 71 | 1 | — | 1 | 0 | — |
| 2017/18 | Championship | Derby | 2 | 0 | 6 | 0 | — | 0 | 0 | 6.70 |
| 2017 | Premier League 2 | Derby County U23 | 17 | 14 | 1320 | 6 | — | 3 | 0 | — |
| 2017 | Premier League International Cup | Derby County U23 | 2 | 2 | 167 | 0 | — | 1 | 0 | — |
| 2016/17 | National League N / S | Gloucester City | 15 | 13 | 1172 | 1 | — | 0 | 0 | — |
| 2016 | U18 Premier League | Derby County U18 | 11 | 10 | 840 | 1 | — | 0 | 0 | — |
| 2016 | Premier League 2 | Derby County U23 | 4 | 0 | 42 | 0 | — | 0 | 0 | — |
| 2015/16 | FA Trophy | Cheltenham | 2 | 0 | 29 | 0 | — | 0 | 0 | — |
Availability history
No injuries or suspensions recorded.
Trophies
No trophies recorded.
