Clubs
| Club | Seasons | Apps | Goals | Assists |
|---|---|---|---|---|
| Crewe | 2026/27 | 16 | 6 | 2 |
| Doncaster | 2023/24 – 2025/26 | 103 | 12 | 10 |
| Carlisle | 2021/22 – 2023/24 | 146 | 20 | 14 |
| Sligo Rovers | 2021/22 | 24 | 7 | — |
| St Patrick's Athl. | 2020/21 | 15 | 2 | — |
| Bradford | 2017/18 – 2019/20 | 29 | 1 | — |
| Stevenage | 2018/19 | 6 | 1 | — |
Transfers
| Date | From | To | Type |
|---|---|---|---|
| 14 Jun 2024 | Carlisle | Doncaster | Free |
| 30 Aug 2021 | Sligo Rovers | Carlisle | — |
| 4 Jan 2021 | St Patrick's Athl. | Sligo Rovers | — |
| 29 Jul 2020 | Bradford | St Patrick's Athl. | Free |
| 1 Jul 2019 | Stevenage | Bradford | — |
| 31 Jan 2019 | Bradford | Stevenage | Loan |
| 1 Jul 2017 | Rangers | Bradford | — |
| 30 Jun 2026 | Doncaster | Crewe | Free agent |
| 29 Jun 2026 | Doncaster | Crewe | Free agent |
Season by season
| Season | Competition | Club | Apps | Starts | Min | Goals | Assists | Yellow | Red | Rating |
|---|---|---|---|---|---|---|---|---|---|---|
| 2026/27 | League Cup | Crewe | 2 | 1 | 119 | 0 | 0 | 0 | 0 | 6.60 |
| 2026/27 | EFL Trophy | Crewe | 2 | 1 | 83 | 1 | 1 | 0 | 0 | 7.29 |
| 2026/27 | League Two | Crewe | 12 | 9 | 758 | 5 | 1 | 1 | 0 | 7.21 |
| 2025/26 | League Cup | Doncaster | 3 | 2 | 148 | 0 | 0 | 0 | 0 | 6.70 |
| 2025/26 | EFL Trophy | Doncaster | 5 | 2 | 244 | 2 | 0 | 0 | 0 | 7.06 |
| 2025/26 | FA Cup | Doncaster | 3 | 2 | 158 | 1 | 0 | 0 | 0 | 7.40 |
| 2025/26 | League One | Doncaster | 40 | 17 | 1665 | 3 | 2 | 0 | 0 | 6.66 |
| 2024/25 | League Two | Doncaster | 45 | 40 | 2559 | 6 | 7 | 2 | 1 | 7.03 |
| 2024/25 | FA Cup | Doncaster | 1 | 0 | 45 | — | 0 | 0 | 0 | 6.70 |
| 2024/25 | League Cup | Doncaster | 2 | 2 | 64 | — | 1 | 0 | 0 | 7.05 |
| 2024/25 | EFL Trophy | Doncaster | 4 | 2 | 192 | 0 | 0 | 1 | 0 | 6.83 |
| 2023/24 | League One | Carlisle | 43 | 37 | 2514 | 7 | 3 | 2 | 0 | 7.04 |
| 2023/24 | League Cup | Carlisle | 1 | 1 | 46 | 0 | — | 0 | 0 | 6.70 |
| 2023/24 | EFL Trophy | Carlisle | 3 | 1 | 122 | 2 | — | 0 | 0 | 7.50 |
| 2023/24 | FA Cup | Carlisle | 1 | 1 | 84 | 0 | — | 0 | 0 | — |
| 2022/23 | League Two | Carlisle | 48 | 30 | 2921 | 2 | 7 | 7 | 0 | 6.75 |
| 2022/23 | League Cup | Carlisle | 1 | 0 | 14 | 0 | — | 0 | 0 | 6.20 |
| 2022/23 | EFL Trophy | Carlisle | 3 | 1 | 147 | 0 | — | 0 | 0 | — |
| 2022/23 | FA Cup | Carlisle | 2 | 2 | 152 | 1 | — | 0 | 0 | — |
| 2021/22 | League Two | Carlisle | 39 | 33 | 3134 | 6 | 4 | 3 | 0 | 6.96 |
| 2021/22 | Premier Division | Sligo Rovers | 22 | 22 | 1937 | 7 | — | 5 | 0 | — |
| 2021/22 | EFL Trophy | Carlisle | 3 | 2 | 197 | 1 | — | 0 | 0 | 7.20 |
| 2021/22 | FA Cup | Carlisle | 2 | 1 | 133 | 1 | — | 0 | 0 | — |
| 2021/22 | UEFA Europa Conference League | Sligo Rovers | 2 | 2 | 169 | 0 | — | 0 | 0 | — |
| 2020/21 | Premier Division | St Patrick's Athl. | 14 | 12 | 1059 | 2 | — | 2 | 0 | — |
| 2020/21 | FAI Cup | St Patrick's Athl. | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2019/20 | League Two | Bradford | 6 | 3 | 270 | 0 | — | 0 | 0 | 6.70 |
| 2019/20 | EFL Trophy | Bradford | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2018/19 | League Two | Stevenage | 6 | 2 | 237 | 1 | — | 0 | 0 | — |
| 2018/19 | League One | Bradford | 11 | 1 | 238 | 0 | — | 0 | 0 | — |
| 2018/19 | EFL Trophy | Bradford | 2 | 2 | 180 | 0 | — | 1 | 0 | — |
| 2017/18 | League One | Bradford | 5 | 1 | 157 | 1 | — | 0 | 0 | — |
| 2017/18 | EFL Trophy | Bradford | 4 | 3 | 268 | 0 | — | 0 | 0 | — |
| 2016/17 | Challenge Cup | 1 | 0 | 17 | 0 | — | 0 | 0 | — |
Availability history
| Reason | From | Until | Days |
|---|---|---|---|
| Red Card | 30 Dec 2024 | 1 Jan 2025 | 2 |
Trophies
| Competition | Season | Place |
|---|---|---|
| League Two (England) | 2024/2025 | Winner |
