Clubs
| Club | Seasons | Apps | Goals | Assists |
|---|---|---|---|---|
| Bristol Rovers | 2026/27 | 11 | 1 | 0 |
| Wycombe | 2026/27 | 1 | 0 | 0 |
| Cambridge | 2024/25 – 2025/26 | 43 | 0 | 2 |
| Exeter | 2023/24 – 2024/25 | 39 | 1 | 1 |
| Ross County | 2022/23 – 2023/24 | 30 | 2 | 1 |
| Charlton | 2018/19 – 2021/22 | 115 | 9 | 3 |
| Rotherham | 2016/17 – 2018/19 | 22 | 0 | — |
| Wimbledon | 2018/19 | 30 | 1 | — |
| Plymouth | 2013/14 – 2016/17 | 64 | 1 | — |
Transfers
| Date | From | To | Type |
|---|---|---|---|
| 1 Jul 2022 | Charlton | Ross County | Free |
| 2 Jul 2019 | AFC Wimbledon | Charlton | — |
| 1 Aug 2018 | Rotherham | AFC Wimbledon | Loan |
| 30 Jan 2017 | Plymouth | Rotherham | — |
| 1 Jul 2025 | Exeter City | Cambridge United | Free Transfer |
| 30 Jun 2026 | Cambridge United | Bristol Rovers | Free agent |
| 29 Jun 2026 | Cambridge United | Bristol Rovers | Free agent |
Season by season
| Season | Competition | Club | Apps | Starts | Min | Goals | Assists | Yellow | Red | Rating |
|---|---|---|---|---|---|---|---|---|---|---|
| 2026/27 | League Cup | Bristol Rovers | 1 | 1 | 90 | 0 | 0 | 0 | 0 | 6.90 |
| 2026/27 | League Two | Bristol Rovers | 10 | 8 | 766 | 1 | 0 | 3 | 0 | 5.65 |
| 2026/27 | EFL Trophy | Wycombe | 1 | 1 | 90 | 0 | 0 | 0 | 0 | 6.10 |
| 2025/26 | EFL Trophy | Cambridge | 1 | 1 | 90 | 0 | 1 | 0 | 0 | 7.00 |
| 2025/26 | FA Cup | Cambridge | 3 | 1 | 16 | 0 | 0 | 1 | 0 | 6.00 |
| 2025/26 | League Two | Cambridge | 34 | 18 | 1787 | 0 | 1 | 4 | 0 | 6.61 |
| 2024/25 | FA Cup | Exeter | 1 | 1 | 73 | 0 | — | 0 | 0 | — |
| 2024/25 | EFL Trophy | Cambridge | 4 | 4 | 337 | — | 0 | 0 | 0 | 6.75 |
| 2024/25 | League One | Exeter | 21 | 12 | 1013 | 0 | 0 | 3 | 0 | 6.59 |
| 2024/25 | FA Cup | Cambridge | 1 | 0 | — | — | — | 0 | 0 | — |
| 2024/25 | League Cup | Exeter | 1 | 1 | 90 | 0 | 0 | 0 | 0 | 6.70 |
| 2024/25 | EFL Trophy | Exeter | 4 | 4 | 337 | 0 | 0 | 0 | 0 | 6.75 |
| 2023/24 | League One | Exeter | 12 | 7 | 673 | 1 | 1 | 3 | 0 | 6.81 |
| 2023/24 | Premiership | Ross County | 12 | 11 | 952 | 1 | — | 1 | 0 | 6.74 |
| 2023/24 | League Cup | Ross County | 2 | 2 | 180 | 0 | — | 0 | 0 | — |
| 2022/23 | Premiership | Ross County | 11 | 11 | 943 | 0 | 1 | 1 | 0 | 6.65 |
| 2022/23 | League Cup | Ross County | 5 | 5 | 400 | 1 | — | 0 | 0 | — |
| 2021/22 | League One | Charlton | 27 | 24 | 2099 | 3 | — | 8 | 0 | 6.79 |
| 2021/22 | FA Cup | Charlton | 2 | 2 | 172 | 0 | 1 | 1 | 0 | 6.20 |
| 2021/22 | EFL Trophy | Charlton | 2 | 2 | 178 | 1 | 1 | 1 | 0 | 7.20 |
| 2020/21 | League One | Charlton | 28 | 19 | 1671 | 2 | — | 4 | 0 | 6.69 |
| 2020/21 | League Cup | Charlton | 2 | 2 | 180 | 0 | 1 | 0 | 0 | 6.80 |
| 2020/21 | FA Cup | Charlton | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2020/21 | EFL Trophy | Charlton | 1 | 1 | 61 | 0 | — | 0 | 0 | 6.20 |
| 2019/20 | Championship | Charlton | 31 | 24 | 2129 | 2 | — | 4 | 0 | 6.56 |
| 2018/19 | League One | Charlton | 21 | 21 | 1876 | 1 | — | 1 | 0 | 6.60 |
| 2018/19 | League One | Wimbledon | 26 | 26 | 2281 | 0 | — | 4 | 0 | 6.60 |
| 2018/19 | EFL Trophy | Wimbledon | 1 | 0 | 0 | 0 | — | 0 | 0 | — |
| 2018/19 | FA Cup | Wimbledon | 3 | 3 | 270 | 1 | — | 0 | 0 | 7.10 |
| 2017/18 | League One | Rotherham | 10 | 10 | 824 | 0 | — | 1 | 0 | — |
| 2017/18 | League Cup | Rotherham | 1 | 1 | 90 | 0 | — | 1 | 0 | — |
| 2017/18 | EFL Trophy | Rotherham | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2016/17 | Championship | Rotherham | 10 | 7 | 722 | 0 | — | 1 | 0 | 6.62 |
| 2016/17 | League Two | Plymouth | 19 | 16 | 1447 | 0 | — | 4 | 0 | — |
| 2016/17 | EFL Trophy | Plymouth | 3 | 3 | 233 | 0 | — | 0 | 0 | — |
| 2016/17 | FA Cup | Plymouth | 3 | 3 | 270 | 0 | — | 1 | 0 | 7.30 |
| 2015/16 | League Two | Plymouth | 14 | 6 | 564 | 0 | — | 3 | 0 | — |
| 2015/16 | EFL Trophy | Plymouth | 2 | 1 | 97 | 0 | — | 1 | 0 | — |
| 2014/15 | League Two | Plymouth | 8 | 4 | 465 | 0 | — | 1 | 0 | — |
| 2014/15 | FA Cup | Plymouth | 1 | 1 | 72 | 0 | — | 1 | 0 | — |
| 2013/14 | League Two | Plymouth | 12 | 11 | 975 | 0 | — | 2 | 0 | — |
| 2013/14 | FA Cup | Plymouth | 2 | 1 | 122 | 1 | — | 0 | 0 | — |
Availability history
| Reason | From | Until | Days |
|---|---|---|---|
| Suspended | 21 Oct 2020 | 25 Oct 2020 | 4 |
Trophies
No trophies recorded.
