Clubs
| Club | Seasons | Apps | Goals | Assists |
|---|---|---|---|---|
| Oldham | 2024/25 – 2026/27 | 88 | 6 | 2 |
| Walsall | 2021/22 – 2023/24 | 93 | 2 | 3 |
| Northampton | 2023/24 | 46 | 2 | 1 |
| Tranmere | 2017/18 – 2020/21 | 144 | 5 | 5 |
| Forest Green | 2016/17 – 2017/18 | 39 | 1 | — |
| Bath City | 2016/17 | 19 | 4 | — |
| Hayes & Yeading United | 2014/15 – 2015/16 | 28 | 1 | — |
| Havant & Wville | 2015/16 | 14 | 0 | — |
| Whitehawk | 2014/15 | 1 | 0 | — |
| Southport | 2013/14 | 7 | 0 | — |
Transfers
| Date | From | To | Type |
|---|---|---|---|
| 2 Jul 2024 | Northampton | Oldham | Free |
| 14 Jul 2023 | Walsall | Northampton | Free |
| 1 Jul 2021 | Tranmere | Walsall | Free |
| 1 Jul 2018 | Forest Green | Tranmere | Free |
| 1 Jun 2018 | Tranmere | Forest Green | — |
| 22 Feb 2018 | Forest Green | Tranmere | Loan |
| 24 Nov 2016 | Bath City | Forest Green | Free |
| 18 Jul 2016 | Havant & Wville | Bath City | Free |
| 1 Jun 2016 | Hayes & Yeading United | Havant & Wville | — |
| 11 Dec 2015 | Havant & Wville | Hayes & Yeading United | Loan |
| 6 Aug 2015 | Hayes & Yeading United | Havant & Wville | Free |
| 17 Feb 2015 | Heybridge Swifts | Hayes & Yeading United | Free |
| 1 Dec 2014 | Tonbridge Angels | Heybridge Swifts | Free |
| 1 Nov 2014 | Whitehawk | Tonbridge Angels | Free |
| 26 Sept 2014 | QPR | Whitehawk | Free |
| 27 Mar 2014 | QPR | Southport | Loan |
Season by season
| Season | Competition | Club | Apps | Starts | Min | Goals | Assists | Yellow | Red | Rating |
|---|---|---|---|---|---|---|---|---|---|---|
| 2026/27 | EFL Trophy | Oldham | 1 | 0 | 18 | 0 | 0 | 0 | 0 | 3.21 |
| 2026/27 | League Two | Oldham | 8 | 5 | 528 | 0 | 0 | 0 | 0 | 5.86 |
| 2025/26 | League Cup | Oldham | 1 | 1 | 90 | 0 | 0 | 0 | 0 | 6.50 |
| 2025/26 | EFL Trophy | Oldham | 1 | 0 | 15 | 0 | 0 | 0 | 0 | 6.20 |
| 2025/26 | League Two | Oldham | 46 | 46 | 4140 | 2 | 2 | 4 | 0 | 6.93 |
| 2024/25 | National League | Oldham | 30 | 30 | 2717 | 4 | — | 6 | 0 | — |
| 2024/25 | FA Cup | Oldham | 1 | 1 | 90 | — | 0 | 0 | 0 | 6.30 |
| 2023/24 | League One | Northampton | 41 | 25 | 1383 | 1 | 1 | 3 | 0 | 6.55 |
| 2023/24 | EFL Trophy | Northampton | 3 | 3 | 270 | 1 | — | 0 | 0 | 6.80 |
| 2023/24 | FA Cup | Northampton | 1 | 0 | 13 | 0 | — | 0 | 0 | — |
| 2023/24 | League Cup | Northampton | 1 | 1 | 90 | 0 | — | 0 | 0 | 6.20 |
| 2022/23 | League Two | Walsall | 44 | 43 | 3856 | 2 | 2 | 6 | 1 | 6.73 |
| 2022/23 | League Cup | Walsall | 2 | 2 | 180 | 0 | — | 1 | 0 | 6.60 |
| 2022/23 | EFL Trophy | Walsall | 3 | 2 | 192 | 0 | — | 0 | 0 | — |
| 2022/23 | FA Cup | Walsall | 3 | 3 | 270 | 0 | — | 0 | 0 | — |
| 2021/22 | League Two | Walsall | 37 | 36 | 3266 | 0 | 1 | 7 | 0 | 6.74 |
| 2021/22 | EFL Trophy | Walsall | 2 | 2 | 180 | 0 | — | 2 | 0 | 6.00 |
| 2021/22 | FA Cup | Walsall | 2 | 2 | 180 | 0 | — | 1 | 0 | 6.90 |
| 2020/21 | League Two | Tranmere | 36 | 32 | 2977 | 0 | 1 | 5 | 0 | 6.63 |
| 2020/21 | FA Cup | Tranmere | 3 | 3 | 270 | 0 | — | 0 | 0 | 6.75 |
| 2020/21 | EFL Trophy | Tranmere | 4 | 4 | 360 | 0 | — | 0 | 0 | 7.00 |
| 2020/21 | League Cup | Tranmere | 1 | 1 | 90 | 0 | — | 0 | 0 | 5.90 |
| 2019/20 | League One | Tranmere | 31 | 30 | 2698 | 1 | 3 | 6 | 0 | 6.68 |
| 2019/20 | League Cup | Tranmere | 1 | 1 | 90 | 0 | — | 0 | 0 | 6.70 |
| 2019/20 | EFL Trophy | Tranmere | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2019/20 | FA Cup | Tranmere | 6 | 6 | 600 | 2 | 1 | 2 | 0 | 6.40 |
| 2019/20 | Club Friendlies | Tranmere | 1 | 1 | 85 | 0 | — | 0 | 0 | — |
| 2018/19 | League Two | Tranmere | 46 | 45 | 4125 | 2 | — | 6 | 0 | — |
| 2018/19 | League Cup | Tranmere | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2018/19 | EFL Trophy | Tranmere | 2 | 1 | 112 | 0 | — | 0 | 0 | — |
| 2018/19 | FA Cup | Tranmere | 5 | 5 | 450 | 0 | — | 0 | 0 | 6.83 |
| 2017/18 | National League | Tranmere | 6 | 5 | 471 | 0 | — | 0 | 0 | — |
| 2017/18 | League Two | Forest Green | 13 | 9 | 865 | 0 | — | 3 | 1 | — |
| 2017/18 | League Cup | Forest Green | 1 | 1 | 103 | 0 | — | 0 | 0 | — |
| 2017/18 | EFL Trophy | Forest Green | 4 | 3 | 292 | 0 | — | 0 | 0 | — |
| 2017/18 | FA Cup | Forest Green | 2 | 2 | 199 | 0 | — | 1 | 0 | — |
| 2016/17 | National League | Forest Green | 16 | 14 | 1238 | 1 | — | 1 | 0 | — |
| 2016/17 | National League N / S | Bath City | 19 | 19 | 1710 | 4 | — | 0 | 0 | — |
| 2016/17 | FA Trophy | Forest Green | 3 | 2 | 239 | 0 | — | 0 | 0 | — |
| 2015/16 | National League N / S | Hayes & Yeading United | 17 | 17 | 1432 | 1 | — | 0 | 0 | — |
| 2015/16 | National League N / S | Havant & Wville | 14 | 11 | 989 | 0 | — | 0 | 0 | — |
| 2014/15 | National League N / S | Hayes & Yeading United | 11 | 6 | 551 | 0 | — | 0 | 0 | — |
| 2014/15 | National League N / S | Whitehawk | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2013/14 | National League | Southport | 7 | 3 | 347 | 0 | — | 2 | 0 | — |
Availability history
| Reason | From | Until | Days |
|---|---|---|---|
| Suspended | 13 Dec 2017 | 24 Dec 2017 | 11 |
| Suspended | 22 Nov 2017 | 10 Dec 2017 | 18 |
| Suspended | 22 Nov 2017 | 3 Dec 2017 | 11 |
Trophies
| Competition | Season | Place |
|---|---|---|
| National League (England) | 2017/2018 | 2nd Place |
| EFL Trophy (England) | 2020/2021 | 2nd Place |
