Clubs
| Club | Seasons | Apps | Goals | Assists |
|---|---|---|---|---|
| Bristol Rovers | 2019/20 – 2026/27 | 86 | 11 | 6 |
| Wycombe | 2022/23 – 2026/27 | 198 | 26 | 25 |
| Shrewsbury | 2021/22 – 2023/24 | 101 | 21 | 10 |
| Walsall | 2017/18 – 2018/19 | 105 | 6 | — |
| Falkirk | 2012/13 – 2016/17 | 153 | 11 | — |
Transfers
| Date | From | To | Type |
|---|---|---|---|
| 11 Jul 2023 | Shrewsbury | Wycombe | Free |
| 1 Jul 2021 | Bristol Rovers | Shrewsbury | Free |
| 9 Jul 2019 | Walsall | Bristol Rovers | Free |
| 14 Jun 2017 | Falkirk | Walsall | Free |
Season by season
| Season | Competition | Club | Apps | Starts | Min | Goals | Assists | Yellow | Red | Rating |
|---|---|---|---|---|---|---|---|---|---|---|
| 2026/27 | EFL Trophy | Bristol Rovers | 1 | 1 | 90 | 0 | 0 | 0 | 0 | 6.61 |
| 2026/27 | EFL Trophy | Wycombe | 2 | 2 | 270 | 0 | 0 | 1 | 0 | 6.42 |
| 2026/27 | League One | Wycombe | 4 | 1 | 93 | 0 | 0 | 0 | 0 | 6.47 |
| 2025/26 | Friendlies Clubs | Wycombe | 2 | 1 | 105 | — | 0 | 0 | 0 | 6.80 |
| 2025/26 | League Cup | Wycombe | 2 | 1 | 110 | 0 | 0 | 0 | 0 | 6.95 |
| 2025/26 | EFL Trophy | Wycombe | 2 | 1 | 122 | 0 | 0 | 0 | 0 | 6.90 |
| 2025/26 | League One | Wycombe | 40 | 31 | 2726 | 0 | 6 | 5 | 0 | 6.93 |
| 2024/25 | League One | Wycombe | 41 | 35 | 2816 | 4 | 6 | 6 | 0 | 7.23 |
| 2024/25 | FA Cup | Wycombe | 1 | 1 | 65 | — | 0 | 0 | 0 | 7.30 |
| 2024/25 | League Cup | Wycombe | 2 | 1 | 105 | — | 0 | 0 | 0 | 6.80 |
| 2024/25 | EFL Trophy | Wycombe | 3 | 2 | 208 | 1 | 1 | 0 | 0 | 7.17 |
| 2023/24 | League One | Wycombe | 44 | 41 | 3657 | 11 | 7 | 8 | 0 | 7.18 |
| 2023/24 | League Cup | Wycombe | 2 | 0 | 68 | 0 | — | 1 | 0 | 7.10 |
| 2023/24 | EFL Trophy | Wycombe | 7 | 4 | 396 | 1 | 1 | 1 | 0 | 7.18 |
| 2023/24 | FA Cup | Wycombe | 1 | 1 | 90 | 0 | — | 1 | 0 | — |
| 2022/23 | League One | Shrewsbury | 46 | 46 | 4119 | 9 | 4 | 9 | 1 | 7.24 |
| 2022/23 | League One | Wycombe | 45 | 45 | 4028 | 9 | 4 | 9 | 1 | 7.24 |
| 2022/23 | League Cup | Shrewsbury | 2 | 2 | 180 | 1 | — | 0 | 0 | 7.95 |
| 2022/23 | FA Cup | Shrewsbury | 3 | 3 | 270 | 2 | — | 0 | 0 | — |
| 2021/22 | League One | Shrewsbury | 42 | 42 | 3780 | 8 | 6 | 14 | 0 | 7.26 |
| 2021/22 | EFL Trophy | Shrewsbury | 3 | 1 | 96 | 0 | — | 1 | 0 | 6.70 |
| 2021/22 | League Cup | Shrewsbury | 2 | 2 | 154 | 0 | — | 0 | 0 | 6.80 |
| 2021/22 | FA Cup | Shrewsbury | 3 | 3 | 270 | 1 | — | 0 | 0 | 6.70 |
| 2020/21 | League One | Bristol Rovers | 38 | 37 | 3253 | 8 | 3 | 6 | 0 | 7.01 |
| 2020/21 | League Cup | Bristol Rovers | 1 | 1 | 90 | 0 | — | 0 | 0 | 6.20 |
| 2020/21 | FA Cup | Bristol Rovers | 2 | 2 | 180 | 2 | 1 | 1 | 0 | 7.95 |
| 2020/21 | EFL Trophy | Bristol Rovers | 3 | 2 | 208 | 0 | — | 1 | 0 | 6.77 |
| 2019/20 | League One | Bristol Rovers | 32 | 31 | 2808 | 0 | 2 | 5 | 0 | 6.84 |
| 2019/20 | League Cup | Bristol Rovers | 2 | 2 | 180 | 0 | — | 0 | 0 | 6.70 |
| 2019/20 | EFL Trophy | Bristol Rovers | 1 | 1 | 56 | 0 | — | 0 | 0 | — |
| 2019/20 | FA Cup | Bristol Rovers | 6 | 5 | 456 | 1 | — | 0 | 0 | 6.80 |
| 2018/19 | League One | Walsall | 44 | 44 | 3943 | 3 | — | 9 | 0 | — |
| 2018/19 | FA Cup | Walsall | 4 | 4 | 360 | 0 | — | 0 | 0 | — |
| 2018/19 | League Cup | Walsall | 2 | 2 | 180 | 0 | — | 1 | 0 | — |
| 2018/19 | EFL Trophy | Walsall | 3 | 3 | 226 | 0 | — | 0 | 0 | — |
| 2017/18 | League One | Walsall | 46 | 46 | 4082 | 2 | — | 4 | 0 | — |
| 2017/18 | League Cup | Walsall | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2017/18 | EFL Trophy | Walsall | 4 | 4 | 352 | 1 | — | 0 | 0 | — |
| 2017/18 | FA Cup | Walsall | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2016/17 | Championship | Falkirk | 31 | 31 | 2787 | 3 | — | 4 | 0 | — |
| 2016/17 | League Cup | Falkirk | 4 | 4 | 360 | 0 | — | 0 | 0 | — |
| 2016/17 | Challenge Cup | Falkirk | 1 | 1 | 120 | 0 | — | 0 | 0 | — |
| 2015/16 | Championship | Falkirk | 36 | 36 | 3240 | 3 | — | 6 | 0 | — |
| 2015/16 | League Cup | Falkirk | 3 | 3 | 270 | 0 | — | 0 | 0 | — |
| 2015/16 | Challenge Cup | Falkirk | 2 | 2 | 180 | 0 | — | 0 | 0 | — |
| 2015/16 | Scottish Cup | Falkirk | 2 | 2 | 175 | 0 | — | 0 | 0 | — |
| 2014/15 | Championship | Falkirk | 33 | 31 | 2838 | 3 | — | 6 | 0 | — |
| 2014/15 | Scottish Cup | Falkirk | 5 | 5 | 448 | 0 | — | 0 | 0 | — |
| 2014/15 | League Cup | Falkirk | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2014/15 | Challenge Cup | Falkirk | 2 | 1 | 95 | 0 | — | 0 | 0 | — |
| 2013/14 | Championship | Falkirk | 19 | 1 | 312 | 1 | — | 0 | 0 | — |
| 2013/14 | League Cup | Falkirk | 2 | 0 | 34 | 0 | — | 0 | 0 | — |
| 2013/14 | Challenge Cup | Falkirk | 2 | 2 | 146 | 0 | — | 1 | 0 | — |
| 2012/13 | Championship | Falkirk | 8 | 5 | 440 | 1 | — | 1 | 0 | — |
| 2012/13 | League Cup | Falkirk | 1 | 1 | 46 | 0 | — | 0 | 0 | — |
| 2012/13 | Challenge Cup | Falkirk | 1 | 1 | 78 | 0 | — | 0 | 0 | — |
Availability history
No injuries or suspensions recorded.
Trophies
| Competition | Season | Place |
|---|---|---|
| Scottish Cup (Scotland) | 2014/2015 | 2nd Place |
| Championship (Scotland) | 2016/2017 | 2nd Place |
| Championship (Scotland) | 2015/2016 | 2nd Place |
| EFL Trophy (England) | 2023/2024 | 2nd Place |
