Clubs
| Club | Seasons | Apps | Goals | Assists |
|---|---|---|---|---|
| Doncaster | 2025/26 – 2026/27 | 26 | 0 | 0 |
| Bradford | 2023/24 – 2025/26 | 50 | 3 | 1 |
| Stockport | 2022/23 – 2023/24 | 43 | 2 | — |
| Tranmere | 2022/23 | 19 | 2 | — |
| Hartlepool | 2021/22 | 51 | 1 | — |
| AFC Fylde | 2018/19 – 2020/21 | 100 | 5 | — |
| FC Halifax Town | 2020/21 | 43 | 1 | — |
| Gateshead | 2017/18 | 51 | 2 | — |
| Macclesfield | 2015/16 – 2016/17 | 76 | 5 | — |
| AFC Telford United | 2013/14 – 2014/15 | 85 | 6 | — |
| Rochdale | 2011/12 – 2012/13 | 4 | 0 | — |
| Southport | 2012/13 | 10 | 2 | — |
| Barrow | 2012/13 | 1 | 0 | — |
| Republic of Ireland U19 | 2012 | 5 | 1 | — |
Transfers
| Date | From | To | Type |
|---|---|---|---|
| 14 Jun 2024 | Stockport County | Bradford | — |
| 6 Jan 2023 | Tranmere | Stockport County | — |
| 1 Jul 2022 | Hartlepool | Tranmere | — |
| 16 Jul 2021 | FC Halifax Town | Hartlepool | — |
| 23 Sept 2020 | AFC Fylde | FC Halifax Town | Free |
| 1 Jul 2018 | Gateshead | AFC Fylde | Free |
| 9 Jun 2017 | Macclesfield | Gateshead | Free |
| 1 Jul 2015 | AFC Telford United | Macclesfield | Free |
| 1 Jul 2013 | Rochdale | AFC Telford United | Free |
| 30 Apr 2013 | Southport | Rochdale | — |
| 31 Jan 2013 | Rochdale | Southport | Loan |
| 22 Nov 2012 | Rochdale | Barrow | Loan |
| 1 Jan 2012 | Nottingham Forest | Rochdale | Free |
| 25 Jan 2026 | Bradford | Doncaster | Loan |
| 30 May 2026 | Doncaster | Bradford | Return from loan |
| 29 Jun 2026 | Bradford | Doncaster | Free agent |
| 30 Jun 2026 | Bradford | Doncaster | Free agent |
Season by season
| Season | Competition | Club | Apps | Starts | Min | Goals | Assists | Yellow | Red | Rating |
|---|---|---|---|---|---|---|---|---|---|---|
| 2026/27 | League Cup | Doncaster | 1 | 1 | 96 | 0 | 0 | 0 | 0 | 6.70 |
| 2026/27 | EFL Trophy | Doncaster | 1 | 1 | 90 | 0 | 0 | 0 | 0 | 6.92 |
| 2026/27 | League One | Doncaster | 10 | 10 | 887 | 0 | 0 | 1 | 0 | 6.79 |
| 2025/26 | League Cup | Bradford | 1 | 1 | 80 | 0 | 0 | 0 | 0 | 5.90 |
| 2025/26 | EFL Trophy | Bradford | 3 | 3 | 250 | 0 | 1 | 1 | 0 | 6.33 |
| 2025/26 | League One | Bradford | 8 | 5 | 490 | 1 | 0 | 0 | 0 | 6.88 |
| 2025/26 | League One | Doncaster | 14 | 14 | 1146 | 0 | 0 | 3 | 0 | 6.83 |
| 2024/25 | League Two | Bradford | 27 | 24 | 2093 | 2 | 0 | 6 | 0 | 6.82 |
| 2024/25 | FA Cup | Bradford | 6 | 5 | 320 | — | 0 | 1 | 0 | 6.88 |
| 2024/25 | League Cup | Bradford | 1 | 1 | 90 | 0 | 0 | 0 | 0 | 6.90 |
| 2024/25 | EFL Trophy | Bradford | 4 | 3 | 320 | 0 | 0 | 1 | 0 | 6.88 |
| 2023/24 | League Two | Stockport | 16 | 10 | 937 | 1 | — | 2 | 0 | 6.76 |
| 2023/24 | EFL Trophy | Stockport | 3 | 3 | 270 | 0 | — | 1 | 0 | 6.30 |
| 2023/24 | FA Cup | Stockport | 3 | 2 | 180 | 1 | — | 0 | 0 | — |
| 2022/23 | League Two | Stockport | 21 | 19 | 1660 | 0 | — | 4 | 0 | 6.88 |
| 2022/23 | League Two | Tranmere | 13 | 10 | 960 | 0 | — | 3 | 0 | 6.88 |
| 2022/23 | League Cup | Tranmere | 2 | 2 | 180 | 0 | — | 0 | 0 | 6.80 |
| 2022/23 | EFL Trophy | Tranmere | 3 | 3 | 270 | 1 | — | 0 | 0 | 6.70 |
| 2022/23 | FA Cup | Tranmere | 1 | 0 | 12 | 1 | — | 0 | 0 | — |
| 2021/22 | League Two | Hartlepool | 40 | 40 | 3600 | 1 | — | 11 | 0 | 6.63 |
| 2021/22 | League Cup | Hartlepool | 1 | 1 | 90 | 0 | — | 0 | 0 | 7.30 |
| 2021/22 | FA Cup | Hartlepool | 5 | 5 | 450 | 0 | — | 0 | 0 | 6.20 |
| 2021/22 | EFL Trophy | Hartlepool | 5 | 4 | 364 | 0 | — | 1 | 0 | 6.90 |
| 2020/21 | National League | FC Halifax Town | 40 | 40 | 3600 | 1 | — | 10 | 0 | — |
| 2020/21 | FA Cup | FC Halifax Town | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2020/21 | FA Trophy | FC Halifax Town | 2 | 2 | 180 | 0 | — | 0 | 0 | — |
| 2019/20 | National League | AFC Fylde | 37 | 37 | 3289 | 2 | — | 7 | 0 | — |
| 2019/20 | FA Trophy | AFC Fylde | 4 | 4 | 390 | 1 | — | 0 | 0 | — |
| 2019/20 | FA Cup | AFC Fylde | 4 | 4 | 360 | 0 | — | 0 | 0 | 7.20 |
| 2018/19 | National League - Play-offs | AFC Fylde | 47 | 47 | 4229 | 2 | — | 8 | 0 | — |
| 2018/19 | FA Trophy | AFC Fylde | 7 | 7 | 582 | 0 | — | 0 | 0 | — |
| 2018/19 | FA Cup | AFC Fylde | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2017/18 | National League | Gateshead | 39 | 39 | 3333 | 1 | — | 6 | 0 | — |
| 2017/18 | FA Cup | Gateshead | 3 | 3 | 270 | 0 | — | 0 | 0 | 5.70 |
| 2017/18 | FA Trophy | Gateshead | 9 | 9 | 840 | 1 | — | 0 | 0 | — |
| 2016/17 | National League | Macclesfield | 33 | 26 | 2461 | 2 | — | 4 | 1 | — |
| 2016/17 | FA Cup | Macclesfield | 2 | 1 | 57 | 0 | — | 0 | 0 | — |
| 2016/17 | FA Trophy | Macclesfield | 9 | 9 | 768 | 0 | — | 0 | 0 | — |
| 2015/16 | National League | Macclesfield | 27 | 25 | 2238 | 2 | — | 3 | 1 | — |
| 2015/16 | FA Trophy | Macclesfield | 4 | 4 | 360 | 1 | — | 0 | 0 | — |
| 2015/16 | FA Cup | Macclesfield | 1 | 0 | 44 | 0 | — | 0 | 0 | — |
| 2014/15 | National League | AFC Telford United | 38 | 38 | 3294 | 4 | — | 8 | 0 | — |
| 2014/15 | FA Cup | AFC Telford United | 3 | 3 | 270 | 0 | — | 0 | 0 | — |
| 2014/15 | FA Trophy | AFC Telford United | 2 | 2 | 175 | 0 | — | 0 | 0 | — |
| 2013/14 | National League N / S | AFC Telford United | 40 | 39 | 3472 | 2 | — | 0 | 0 | — |
| 2013/14 | FA Trophy | AFC Telford United | 2 | 2 | 180 | 0 | — | 0 | 0 | — |
| 2012/13 | National League | Southport | 10 | 10 | 836 | 2 | — | 2 | 1 | — |
| 2012/13 | National League | Barrow | 1 | 1 | 76 | 0 | — | 0 | 0 | — |
| 2012/13 | FA Cup | Rochdale | 1 | 0 | 45 | 0 | — | 0 | 0 | — |
| 2012 | UEFA U19 Championship | Republic of Ireland U19 | 5 | 5 | 433 | 1 | — | 1 | 0 | — |
| 2011/12 | League One | Rochdale | 3 | 2 | 216 | 0 | — | 0 | 0 | — |
Availability history
| Reason | From | Until | Days |
|---|---|---|---|
| Knee Injury | 30 Jul 2025 | 12 Sept 2025 | 44 |
Trophies
| Competition | Season | Place |
|---|---|---|
| FA Trophy (England) | 2018/2019 | Winner |
| FA Trophy (England) | 2016/2017 | 2nd Place |
| League Two (England) | 2023/2024 | Winner |
