Clubs
| Club | Seasons | Apps | Goals | Assists |
|---|---|---|---|---|
| Fleetwood | 2022/23 – 2026/27 | 141 | 12 | 9 |
| Barnsley | 2026/27 | 1 | 0 | 0 |
| St Mirren | 2024/25 | 7 | 0 | 0 |
| St Johnstone | 2020/21 – 2021/22 | 69 | 8 | 1 |
| Inverness CT | 2018/19 – 2019/20 | 73 | 9 | — |
| Queen of the South | 2017/18 | 34 | 3 | — |
| York | 2016/17 | 38 | 1 | — |
| Dunfermline | 2015/16 | 14 | 1 | — |
| Queen's Park | 2013/14 – 2014/15 | 37 | 4 | — |
Transfers
| Date | From | To | Type |
|---|---|---|---|
| 1 Jul 2024 | Fleetwood Town | ST Mirren | Free |
| 1 Jul 2022 | ST Johnstone | Fleetwood Town | Free |
| 1 Jul 2020 | Inverness CT | ST Johnstone | Free |
| 1 Jul 2018 | Queen of the South | Inverness CT | — |
| 1 Jul 2017 | York | Queen of the South | Free |
| 1 Jul 2016 | Dunfermline | York | Free |
| 1 Jul 2015 | Queen's Park | Dunfermline | — |
Season by season
| Season | Competition | Club | Apps | Starts | Min | Goals | Assists | Yellow | Red | Rating |
|---|---|---|---|---|---|---|---|---|---|---|
| 2026/27 | League Cup | Fleetwood | 3 | 3 | 270 | 0 | 0 | 1 | 0 | 7.73 |
| 2026/27 | EFL Trophy | Fleetwood | 1 | 1 | 63 | 0 | 0 | 1 | 0 | 6.66 |
| 2026/27 | League Two | Fleetwood | 12 | 12 | 1080 | 1 | 1 | 3 | 0 | 6.77 |
| 2026/27 | EFL Trophy | Barnsley | 1 | 1 | 71 | 0 | 0 | 0 | 0 | 6.75 |
| 2025/26 | League Cup | Fleetwood | 1 | 1 | 74 | 0 | 0 | 0 | 0 | 6.30 |
| 2025/26 | EFL Trophy | Fleetwood | 1 | 1 | 62 | 0 | 0 | 0 | 0 | 5.90 |
| 2025/26 | FA Cup | Fleetwood | 1 | 0 | 31 | 0 | 0 | 0 | 0 | 6.30 |
| 2025/26 | League Two | Fleetwood | 23 | 23 | 1954 | 1 | 0 | 6 | 1 | 6.97 |
| 2024/25 | League Two | Fleetwood | 19 | 18 | 1609 | 2 | 2 | 8 | 0 | 7.12 |
| 2024/25 | Premiership | St Mirren | 6 | 6 | 517 | 0 | 0 | 3 | 0 | 7.03 |
| 2024/25 | League Cup | St Mirren | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2023/24 | League One | Fleetwood | 29 | 20 | 2071 | 1 | 2 | 6 | 0 | 6.83 |
| 2023/24 | EFL Trophy | Fleetwood | 2 | 2 | 124 | 0 | — | 2 | 0 | 6.75 |
| 2023/24 | FA Cup | Fleetwood | 2 | 1 | 123 | 1 | — | 0 | 0 | — |
| 2023/24 | League Cup | Fleetwood | 1 | 1 | 90 | 0 | — | 1 | 0 | 6.30 |
| 2022/23 | League One | Fleetwood | 39 | 38 | 3384 | 6 | 4 | 14 | 0 | 6.95 |
| 2022/23 | League Cup | Fleetwood | 2 | 2 | 155 | 0 | — | 1 | 0 | 6.60 |
| 2022/23 | EFL Trophy | Fleetwood | 2 | 2 | 180 | 0 | — | 1 | 0 | — |
| 2022/23 | FA Cup | Fleetwood | 3 | 3 | 254 | 0 | — | 2 | 0 | 6.17 |
| 2021/22 | Premiership | St Johnstone | 23 | 22 | 1878 | 1 | — | 8 | 0 | 6.77 |
| 2021/22 | League Cup | St Johnstone | 3 | 3 | 300 | 1 | — | 1 | 0 | — |
| 2021/22 | UEFA Europa Conference League | St Johnstone | 2 | 2 | 173 | 0 | — | 1 | 1 | — |
| 2021/22 | UEFA Europa League | St Johnstone | 2 | 1 | 110 | 0 | — | 0 | 0 | — |
| 2020/21 | Premiership | St Johnstone | 27 | 20 | 1853 | 2 | 1 | 3 | 0 | 6.67 |
| 2020/21 | League Cup | St Johnstone | 8 | 8 | 750 | 3 | — | 1 | 0 | — |
| 2020/21 | FA Cup | St Johnstone | 4 | 4 | 379 | 1 | — | 0 | 0 | — |
| 2019/20 | Championship | Inverness CT | 25 | 24 | 2159 | 3 | — | 5 | 0 | — |
| 2019/20 | FA Cup | Inverness CT | 3 | 3 | 270 | 0 | — | 1 | 0 | — |
| 2019/20 | Challenge Cup | Inverness CT | 3 | 3 | 270 | 0 | — | 1 | 0 | — |
| 2018/19 | Championship | Inverness CT | 31 | 28 | 2420 | 5 | — | 11 | 1 | — |
| 2018/19 | League Cup | Inverness CT | 4 | 4 | 360 | 0 | — | 1 | 0 | — |
| 2018/19 | Challenge Cup | Inverness CT | 1 | 1 | 90 | 0 | — | 1 | 0 | — |
| 2018/19 | Scottish Cup | Inverness CT | 6 | 4 | 354 | 1 | — | 2 | 0 | — |
| 2017/18 | Championship | Queen of the South | 24 | 14 | 1353 | 0 | — | 8 | 0 | — |
| 2017/18 | League Cup | Queen of the South | 3 | 2 | 190 | 1 | — | 0 | 0 | — |
| 2017/18 | Challenge Cup | Queen of the South | 4 | 3 | 274 | 2 | — | 1 | 0 | — |
| 2017/18 | Scottish Cup | Queen of the South | 3 | 3 | 270 | 0 | — | 0 | 0 | — |
| 2016/17 | National League | York | 30 | 27 | 2356 | 1 | — | 9 | 0 | — |
| 2016/17 | FA Trophy | York | 6 | 4 | 408 | 0 | — | 0 | 0 | — |
| 2016/17 | FA Cup | York | 2 | 2 | 98 | 0 | — | 0 | 0 | — |
| 2015/16 | League One | Dunfermline | 11 | 7 | 757 | 1 | — | 2 | 0 | — |
| 2015/16 | Scottish Cup | Dunfermline | 2 | 2 | 180 | 0 | — | 1 | 0 | — |
| 2015/16 | Challenge Cup | Dunfermline | 1 | 1 | 64 | 0 | — | 0 | 0 | — |
| 2014/15 | League Two | Queen's Park | 24 | 23 | 1950 | 4 | — | 7 | 0 | — |
| 2014/15 | Scottish Cup | Queen's Park | 2 | 2 | 136 | 0 | — | 1 | 0 | — |
| 2013/14 | League Two | Queen's Park | 8 | 5 | 469 | 0 | — | 1 | 0 | — |
| 2013/14 | Scottish Cup | Queen's Park | 1 | 0 | 20 | 0 | — | 0 | 0 | — |
| 2013/14 | League Cup | Queen's Park | 1 | 1 | 90 | 0 | — | 1 | 0 | — |
| 2013/14 | Challenge Cup | Queen's Park | 1 | 1 | 90 | 0 | — | 1 | 0 | — |
Availability history
| Reason | From | Until | Days |
|---|---|---|---|
| Injury | 3 Mar 2021 | 18 Mar 2021 | 15 |
| Knock | 1 Mar 2025 | 20 Mar 2025 | 19 |
| Injury | 18 Dec 2021 | 17 Mar 2022 | 89 |
| Suspended | 26 Sept 2024 | 28 Sept 2024 | 2 |
| Injury | 16 Oct 2021 | 4 Nov 2021 | 19 |
| Injury | 22 Mar 2025 | 27 Mar 2025 | 5 |
Trophies
| Competition | Season | Place |
|---|---|---|
| League Two (Scotland) | 2014/2015 | 2nd Place |
| League One (Scotland) | 2015/2016 | Winner |
| FA Trophy (England) | 2016/2017 | Winner |
| Championship (Scotland) | 2019/2020 | 2nd Place |
| Challenge Cup (Scotland) | 2019/2020 | Winner |
| League Cup (Scotland) | 2020/2021 | Winner |
| Scottish Cup (Scotland) | 2020/2021 | Winner |
