Clubs
| Club | Seasons | Apps | Goals | Assists |
|---|---|---|---|---|
| Falkirk | 2026/27 | 5 | 0 | 0 |
| Exeter | 2023/24 – 2025/26 | 92 | 3 | 3 |
| St Mirren | 2025/26 | 0 | 0 | 0 |
| Partick | 2018/19 – 2023/24 | 95 | 4 | — |
| Livingston | 2017/18 – 2021/22 | 78 | 4 | 1 |
| Livingston U21 | 2018 | 1 | 0 | — |
| Motherwell | 2014/15 – 2017/18 | 16 | 0 | — |
| Motherwell U21 | 2016 – 2017 | 4 | 0 | — |
Transfers
| Date | From | To | Type |
|---|---|---|---|
| 20 Jun 2024 | Partick | Exeter City | Free |
| 1 Jul 2022 | Livingston | Partick | — |
| 1 Jul 2019 | Partick | Livingston | — |
| 22 Jan 2019 | Livingston | Partick | Loan |
| 19 Jan 2018 | Motherwell | Livingston | — |
| 15 Jan 2018 | Livingston | Motherwell | — |
| 31 Aug 2017 | Motherwell U21 | Livingston | Loan |
| 30 Jun 2026 | Exeter City | Falkirk | Free agent |
Season by season
| Season | Competition | Club | Apps | Starts | Min | Goals | Assists | Yellow | Red | Rating |
|---|---|---|---|---|---|---|---|---|---|---|
| 2026/27 | Premiership | Falkirk | 5 | 1 | 86 | 0 | 0 | 0 | 0 | 4.90 |
| 2025/26 | EFL Trophy | Exeter | 3 | 2 | 165 | 0 | 0 | 0 | 0 | 6.60 |
| 2025/26 | FA Cup | Exeter | 2 | 2 | — | 0 | 0 | 0 | 0 | — |
| 2025/26 | League One | Exeter | 41 | 39 | 3428 | 1 | 0 | 6 | 0 | 6.60 |
| 2024/25 | League One | Exeter | 43 | 43 | 3752 | 2 | 3 | 5 | 0 | 6.69 |
| 2024/25 | FA Cup | Exeter | 1 | 1 | 90 | — | 0 | 1 | 0 | 6.30 |
| 2024/25 | League Cup | Exeter | 1 | 1 | 90 | 0 | 0 | 0 | 0 | 6.20 |
| 2024/25 | EFL Trophy | Exeter | 1 | 1 | 90 | 0 | 0 | 0 | 0 | 5.90 |
| 2023/24 | Championship | Partick | 28 | 27 | 2378 | 2 | — | 3 | 0 | — |
| 2023/24 | League Cup | Partick | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2023/24 | Challenge Cup | Partick | 1 | 1 | 90 | 0 | — | 1 | 0 | — |
| 2023/24 | FA Cup | Partick | 3 | 3 | 251 | 0 | — | 1 | 0 | — |
| 2022/23 | Championship | Partick | 36 | 36 | 3074 | 1 | — | 8 | 0 | — |
| 2022/23 | FA Cup | Partick | 3 | 3 | 269 | 0 | — | 0 | 0 | — |
| 2022/23 | League Cup | Partick | 6 | 6 | 521 | 1 | — | 1 | 0 | — |
| 2022/23 | Challenge Cup | Partick | 1 | 1 | 46 | 0 | — | 0 | 0 | — |
| 2021/22 | Premiership | Livingston | 16 | 11 | 887 | 1 | — | 1 | 0 | 6.53 |
| 2021/22 | League Cup | Livingston | 5 | 3 | 301 | 0 | — | 0 | 0 | — |
| 2021/22 | FA Cup | Livingston | 2 | 0 | 39 | 0 | — | 0 | 0 | — |
| 2020/21 | Premiership | Livingston | 8 | 4 | 428 | 0 | — | 0 | 0 | 6.46 |
| 2020/21 | League Cup | Livingston | 3 | 2 | 163 | 0 | — | 0 | 0 | — |
| 2020/21 | FA Cup | Livingston | 1 | 0 | 15 | 0 | — | 0 | 0 | — |
| 2019/20 | Premiership | Livingston | 21 | 19 | 1626 | 0 | 1 | 4 | 0 | 6.72 |
| 2019/20 | League Cup | Livingston | 3 | 3 | 264 | 0 | — | 0 | 0 | — |
| 2019/20 | FA Cup | Livingston | 1 | 0 | 10 | 0 | — | 0 | 0 | — |
| 2018/19 | Championship | Partick | 13 | 13 | 1108 | 0 | — | 4 | 0 | — |
| 2018/19 | Premiership | Livingston | 7 | 2 | 274 | 1 | — | 2 | 0 | — |
| 2018/19 | Scottish Cup | Partick | 3 | 3 | 255 | 0 | — | 0 | 0 | — |
| 2018 | Challenge Cup | Livingston U21 | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2018/19 | League Cup | Livingston | 4 | 0 | 65 | 1 | — | 0 | 0 | — |
| 2017/18 | Scottish Cup | Livingston | 1 | 1 | 61 | 0 | — | 0 | 0 | — |
| 2017 | Challenge Cup | Motherwell U21 | 2 | 2 | 180 | 0 | — | 0 | 0 | — |
| 2017/18 | League Cup | Motherwell | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2017/18 | Championship | Livingston | 6 | 1 | 178 | 1 | — | 0 | 0 | — |
| 2016/17 | Premiership | Motherwell | 14 | 9 | 944 | 0 | — | 0 | 0 | — |
| 2016 | Challenge Cup | Motherwell U21 | 2 | 2 | 180 | 0 | — | 0 | 0 | — |
| 2016/17 | Scottish Cup | Motherwell | 1 | 0 | 9 | 0 | — | 0 | 0 | — |
Availability history
| Reason | From | Until | Days |
|---|---|---|---|
| Injury | 31 Jul 2021 | 17 Sept 2021 | 48 |
| Red Card | 19 Jan 2025 | 21 Jan 2025 | 2 |
| Injury | 19 Feb 2022 | 4 Mar 2022 | 13 |
| Inactive | 1 Mar 2025 | 9 Mar 2025 | 8 |
Trophies
| Competition | Season | Place |
|---|---|---|
| Championship (Scotland) | 2017/2018 | 2nd Place |
| League Cup (Scotland) | 2020/2021 | 2nd Place |
