Clubs
| Club | Seasons | Apps | Goals | Assists |
|---|---|---|---|---|
| Cheltenham | 2024/25 – 2026/27 | 97 | 0 | 1 |
| Newport | 2014/15 – 2023/24 | 283 | 0 | 1 |
| Yeovil Town | 2023/24 | 44 | 0 | — |
| Woking | 2023/24 | 2 | 0 | — |
| Cardiff | 2019/20 – 2020/21 | 2 | 0 | — |
| Bristol Rovers | 2020/21 | 20 | 0 | — |
| Wimbledon | 2019/20 | 9 | 0 | — |
| Peterborough | 2011/12 – 2014/15 | 4 | 0 | — |
| Eastbourne Borough | 2012/13 | 3 | 0 | — |
| Alfreton Town | 2011/12 | 17 | 0 | — |
| Rushden & Diamonds | 2009/10 – 2010/11 | 37 | 1 | — |
Transfers
| Date | From | To | Type |
|---|---|---|---|
| 3 Jul 2024 | Newport County | Cheltenham | Free |
| 1 Sept 2023 | Newport County | Yeovil Town | Loan |
| 28 Jul 2023 | Newport County | Woking | Loan |
| 1 Jul 2021 | Cardiff | Newport County | Free |
| 1 Jun 2021 | Bristol Rovers | Cardiff | — |
| 4 Jan 2021 | Cardiff | Bristol Rovers | Loan |
| 1 Jul 2020 | AFC Wimbledon | Cardiff | — |
| 28 Jan 2020 | Cardiff | AFC Wimbledon | Loan |
| 1 Jul 2019 | Newport County | Cardiff | — |
| 28 Aug 2014 | Peterborough | Newport County | Loan |
| 19 Oct 2012 | Peterborough | Eastbourne Borough | Loan |
| 6 Oct 2011 | Peterborough | Alfreton Town | Loan |
| 5 Jul 2011 | Rushden & Diamonds | Peterborough | Free |
Season by season
| Season | Competition | Club | Apps | Starts | Min | Goals | Assists | Yellow | Red | Rating |
|---|---|---|---|---|---|---|---|---|---|---|
| 2026/27 | League Cup | Cheltenham | 1 | 1 | 65 | 0 | 0 | 0 | 0 | 7.00 |
| 2026/27 | EFL Trophy | Cheltenham | 1 | 1 | 109 | 0 | 0 | 0 | 0 | 6.54 |
| 2025/26 | League Cup | Cheltenham | 2 | 2 | 184 | 0 | 0 | 0 | 0 | 7.10 |
| 2025/26 | EFL Trophy | Cheltenham | 1 | 1 | — | 0 | 0 | 0 | 0 | — |
| 2025/26 | FA Cup | Cheltenham | 3 | 3 | 90 | 0 | 0 | 0 | 0 | 6.30 |
| 2025/26 | League Two | Cheltenham | 46 | 46 | 4140 | 0 | 0 | 3 | 0 | 6.74 |
| 2024/25 | League Two | Cheltenham | 35 | 35 | 3150 | 0 | 1 | 3 | 0 | 6.77 |
| 2024/25 | FA Cup | Cheltenham | 1 | 1 | 90 | — | 0 | 0 | 0 | 6.30 |
| 2024/25 | League Cup | Cheltenham | 1 | 1 | 90 | 0 | 0 | 0 | 0 | 6.70 |
| 2024/25 | EFL Trophy | Cheltenham | 6 | 6 | 540 | 0 | 0 | 0 | 0 | 7.14 |
| 2023/24 | National League - North - Play-offs | Yeovil Town | 40 | 40 | 3600 | 0 | — | 0 | 0 | — |
| 2023/24 | National League | Woking | 2 | 2 | 180 | 0 | — | 0 | 0 | — |
| 2023/24 | FA Trophy | Yeovil Town | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2023/24 | FA Cup | Yeovil Town | 3 | 3 | 270 | 0 | — | 0 | 0 | 6.20 |
| 2022/23 | League Two | Newport | 28 | 28 | 2520 | 0 | — | 1 | 0 | 6.57 |
| 2022/23 | League Cup | Newport | 2 | 2 | 180 | 0 | — | 0 | 0 | 7.10 |
| 2022/23 | EFL Trophy | Newport | 2 | 2 | 180 | 0 | — | 0 | 0 | — |
| 2022/23 | FA Cup | Newport | 2 | 2 | 180 | 0 | — | 0 | 0 | 6.20 |
| 2021/22 | League Two | Newport | 27 | 27 | 2430 | 0 | 1 | 0 | 0 | 6.77 |
| 2021/22 | FA Cup | Newport | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2020/21 | League One | Bristol Rovers | 18 | 18 | 1620 | 0 | — | 0 | 1 | 6.77 |
| 2020/21 | FA Cup | Bristol Rovers | 1 | 1 | 90 | 0 | — | 0 | 0 | 6.90 |
| 2020/21 | EFL Trophy | Bristol Rovers | 1 | 1 | 90 | 0 | — | 0 | 0 | 6.90 |
| 2019/20 | League One | Wimbledon | 9 | 9 | 810 | 0 | — | 0 | 0 | 6.96 |
| 2019/20 | Championship | Cardiff | 1 | 0 | 34 | 0 | — | 0 | 0 | 5.70 |
| 2019/20 | League Cup | Cardiff | 1 | 1 | 90 | 0 | — | 0 | 0 | 5.30 |
| 2018/19 | League Two | Newport | 46 | 46 | 4200 | 0 | — | 0 | 0 | — |
| 2018/19 | FA Cup | Newport | 6 | 6 | 540 | 0 | — | 0 | 0 | 7.38 |
| 2017/18 | League Two | Newport | 46 | 46 | 4140 | 0 | — | 0 | 0 | — |
| 2017/18 | EFL Trophy | Newport | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2017/18 | FA Cup | Newport | 5 | 5 | 450 | 0 | — | 0 | 0 | 6.80 |
| 2017/18 | League Cup | Newport | 2 | 2 | 180 | 0 | — | 0 | 0 | — |
| 2016/17 | League Two | Newport | 45 | 45 | 3996 | 0 | — | 0 | 1 | — |
| 2016/17 | League Cup | Newport | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2016/17 | EFL Trophy | Newport | 3 | 3 | 270 | 0 | — | 0 | 0 | — |
| 2016/17 | FA Cup | Newport | 4 | 4 | 420 | 0 | — | 0 | 0 | — |
| 2015/16 | League Two | Newport | 41 | 41 | 3690 | 0 | — | 0 | 0 | — |
| 2015/16 | FA Cup | Newport | 4 | 4 | 360 | 0 | — | 0 | 1 | — |
| 2015/16 | League Cup | Newport | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2014/15 | EFL Trophy | Newport | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2014/15 | FA Cup | Newport | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2014/15 | League Two | Newport | 14 | 14 | 1260 | 0 | — | 0 | 0 | — |
| 2013/14 | League One | Peterborough | 4 | 4 | 360 | 0 | — | 0 | 0 | — |
| 2012/13 | National League N / S | Eastbourne Borough | 3 | 3 | 270 | 0 | — | 0 | 0 | — |
| 2011/12 | National League | Alfreton Town | 15 | 15 | 1306 | 0 | — | 0 | 0 | — |
| 2011/12 | FA Cup | Alfreton Town | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2011/12 | FA Trophy | Alfreton Town | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2010/11 | National League | Rushden & Diamonds | 32 | 31 | 2792 | 0 | — | 1 | 0 | — |
| 2010/11 | FA Cup | Rushden & Diamonds | 2 | 2 | 180 | 0 | — | 0 | 0 | — |
| 2010/11 | FA Trophy | Rushden & Diamonds | 2 | 2 | 210 | 0 | — | 0 | 0 | — |
| 2009/10 | National League | Rushden & Diamonds | 1 | 1 | 90 | 1 | — | 0 | 0 | — |
Availability history
| Reason | From | Until | Days |
|---|---|---|---|
| Suspended | 23 Oct 2016 | 26 Oct 2016 | 3 |
| Suspended | 19 Jan 2016 | 31 Jan 2016 | 12 |
Trophies
| Competition | Season | Place |
|---|---|---|
| EFL Trophy (England) | 2013/2014 | Winner |
