Clubs
| Club | Seasons | Apps | Goals | Assists |
|---|---|---|---|---|
| Oldham | 2026/27 | 12 | 0 | 1 |
| Notts County | 2024/25 – 2025/26 | 57 | 1 | 2 |
| Blackpool | 2023/24 – 2024/25 | 58 | 1 | 2 |
| Wigan | 2024/25 | 14 | 0 | 0 |
| Peterborough | 2021/22 – 2022/23 | 55 | 0 | 2 |
| Grenada | 2021 – 2022 | 4 | 0 | — |
| Shrewsbury | 2018/19 – 2021/22 | 116 | 18 | 3 |
| Tranmere | 2017/18 – 2018/19 | 50 | 4 | — |
| Macclesfield | 2016/17 | 29 | 8 | — |
| Guiseley AFC | 2015/16 | 23 | 3 | — |
| Plymouth | 2014/15 | 19 | 0 | — |
| Bristol Rovers | 2011/12 – 2013/14 | 65 | 4 | — |
Transfers
| Date | From | To | Type |
|---|---|---|---|
| 29 Jun 2023 | Peterborough | Blackpool | — |
| 10 Aug 2021 | Shrewsbury | Peterborough | — |
| 9 Aug 2018 | Tranmere | Shrewsbury | — |
| 1 Jul 2017 | Macclesfield | Tranmere | Free |
| 26 Jul 2016 | Guiseley AFC | Macclesfield | Free |
| 13 Nov 2015 | Plymouth | Guiseley AFC | Free |
| 22 Jul 2014 | Bristol Rovers | Plymouth | Free |
| 26 Sept 2011 | Leicester | Bristol Rovers | Loan |
| 17 Jan 2025 | Blackpool | Wigan | Loan |
| 1 Jul 2025 | Blackpool | Notts County | Free Transfer |
| 30 Jun 2026 | Notts County | Oldham | Free agent |
Season by season
| Season | Competition | Club | Apps | Starts | Min | Goals | Assists | Yellow | Red | Rating |
|---|---|---|---|---|---|---|---|---|---|---|
| 2026/27 | League Cup | Oldham | 1 | 1 | 85 | 0 | 0 | 0 | 0 | 6.20 |
| 2026/27 | League Two | Oldham | 11 | 11 | 966 | 0 | 1 | 4 | 0 | 6.97 |
| 2025/26 | EFL Trophy | Notts County | 1 | 1 | 90 | 0 | 0 | 1 | 0 | 7.30 |
| 2025/26 | FA Cup | Notts County | 1 | 1 | 120 | 0 | 0 | 1 | 0 | 7.20 |
| 2025/26 | League Two | Notts County | 38 | 32 | 2574 | 1 | 1 | 8 | 0 | 6.79 |
| 2024/25 | League One | Wigan | 14 | 12 | 970 | 0 | 0 | 4 | 0 | 6.78 |
| 2024/25 | FA Cup | Blackpool | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2024/25 | League One | Blackpool | 13 | 10 | 513 | — | 0 | 5 | 0 | 6.78 |
| 2024/25 | FA Cup | Notts County | 17 | 13 | 1161 | — | 1 | 5 | 0 | 6.75 |
| 2024/25 | League Cup | Blackpool | 2 | 2 | 133 | — | 0 | 0 | 0 | 6.95 |
| 2024/25 | EFL Trophy | Blackpool | 2 | 1 | 134 | 0 | 0 | 0 | 0 | 7.35 |
| 2023/24 | League One | Blackpool | 35 | 33 | 2650 | 1 | 2 | 10 | 1 | 6.88 |
| 2023/24 | FA Cup | Blackpool | 3 | 2 | 225 | 0 | — | 1 | 0 | 6.95 |
| 2023/24 | EFL Trophy | Blackpool | 2 | 2 | 180 | 0 | — | 0 | 0 | 6.70 |
| 2022/23 | League One | Peterborough | 17 | 13 | 1161 | — | 1 | 5 | 0 | 6.75 |
| 2022 | Friendlies | Grenada | 1 | 1 | 36 | 0 | — | 0 | 0 | — |
| 2021/22 | Championship | Peterborough | 36 | 34 | 3019 | 0 | 1 | 9 | 0 | 6.84 |
| 2021/22 | FA Cup | Peterborough | 2 | 2 | 180 | 0 | — | 2 | 0 | 6.90 |
| 2021 | CONCACAF Gold Cup | Grenada | 3 | 3 | 255 | 0 | — | 1 | 0 | 6.53 |
| 2020/21 | League One | Shrewsbury | 39 | 37 | 3255 | 4 | 1 | 13 | 0 | 6.99 |
| 2020/21 | FA Cup | Shrewsbury | 3 | 3 | 284 | 0 | — | 1 | 0 | 7.15 |
| 2020/21 | EFL Trophy | Shrewsbury | 1 | 0 | 44 | 0 | — | 0 | 0 | — |
| 2019/20 | League One | Shrewsbury | 17 | 17 | 1499 | 3 | — | 7 | 0 | 7.16 |
| 2019/20 | FA Cup | Shrewsbury | 6 | 6 | 446 | 0 | — | 0 | 1 | 7.20 |
| 2019/20 | EFL Trophy | Shrewsbury | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2018/19 | League One | Shrewsbury | 41 | 39 | 3302 | 9 | — | 9 | 0 | — |
| 2018/19 | League Cup | Shrewsbury | 1 | 1 | 31 | 0 | — | 0 | 0 | — |
| 2018/19 | EFL Trophy | Shrewsbury | 2 | 2 | 165 | 0 | — | 0 | 0 | — |
| 2018/19 | FA Cup | Shrewsbury | 5 | 5 | 435 | 2 | 2 | 3 | 0 | 7.53 |
| 2018/19 | Club Friendlies | Tranmere | 1 | 0 | 44 | 0 | — | 0 | 0 | — |
| 2017/18 | National League | Tranmere | 44 | 44 | 3847 | 4 | — | 11 | 0 | — |
| 2017/18 | FA Trophy | Tranmere | 1 | 1 | 67 | 0 | — | 0 | 0 | — |
| 2017/18 | FA Cup | Tranmere | 3 | 3 | 253 | 0 | — | 0 | 0 | 7.00 |
| 2017/18 | Club Friendlies | Tranmere | 1 | 1 | 73 | 0 | — | 0 | 0 | — |
| 2016/17 | National League | Macclesfield | 24 | 21 | 1730 | 5 | — | 4 | 0 | — |
| 2016/17 | FA Trophy | Macclesfield | 5 | 5 | 396 | 3 | — | 0 | 0 | — |
| 2015/16 | National League | Guiseley AFC | 20 | 17 | 1429 | 3 | — | 1 | 0 | — |
| 2015/16 | FA Trophy | Guiseley AFC | 3 | 2 | 192 | 0 | — | 0 | 0 | — |
| 2014/15 | League Two | Plymouth | 14 | 7 | 738 | 0 | — | 2 | 0 | — |
| 2014/15 | League Cup | Plymouth | 1 | 1 | 105 | 0 | — | 0 | 0 | — |
| 2014/15 | EFL Trophy | Plymouth | 2 | 1 | 95 | 0 | — | 0 | 0 | — |
| 2014/15 | FA Cup | Plymouth | 2 | 1 | 108 | 0 | — | 0 | 0 | — |
| 2013/14 | League Two | Bristol Rovers | 16 | 16 | 1318 | 0 | — | 0 | 0 | — |
| 2013/14 | League Cup | Bristol Rovers | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2013/14 | EFL Trophy | Bristol Rovers | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2013/14 | FA Cup | Bristol Rovers | 4 | 4 | 321 | 1 | — | 1 | 0 | — |
| 2012/13 | League Two | Bristol Rovers | 35 | 25 | 2395 | 3 | — | 4 | 1 | — |
| 2012/13 | League Cup | Bristol Rovers | 1 | 1 | 63 | 0 | — | 0 | 0 | — |
| 2012/13 | FA Cup | Bristol Rovers | 1 | 0 | 16 | 0 | — | 0 | 0 | — |
| 2011/12 | League Two | Bristol Rovers | 5 | 1 | 73 | 0 | — | 0 | 0 | — |
| 2011/12 | FA Cup | Bristol Rovers | 1 | 1 | 67 | 0 | — | 0 | 0 | — |
Availability history
| Reason | From | Until | Days |
|---|---|---|---|
| Calf Injury | 7 Apr 2025 | 25 Jul 2025 | 109 |
Trophies
| Competition | Season | Place |
|---|---|---|
| FA Trophy (England) | 2016/2017 | 2nd Place |
| National League (England) | 2017/2018 | 2nd Place |
