Career as a player
| Period | Team | Country | Position | # | |
|---|---|---|---|---|---|
| 07/2026 - 06/2029 | ![]() | Rangers FC | Defence | 2 | |
| 07/2023 - 06/2026 | ![]() | Bristol City | Defence | 2 | |
| 07/2021 - 06/2023 | ![]() | Aberdeen FC | Midfield | 2 | |
| 08/2020 - 06/2021 | ![]() | Aberdeen FC | Midfield | 40 | |
| 07/2020 - 08/2020 | ![]() | Rangers FC | Midfield | 28 | |
| 07/2019 - 07/2020 | ![]() | Portsmouth FC | Midfield | 15 | |
| 07/2018 - 07/2019 | ![]() | Rangers FC | Midfield | 17 | |
| 06/2017 - 06/2018 | ![]() | Rangers FC | Defence | 40 | |
| 01/2017 - 06/2017 | ![]() | Dumbarton FC | Defence | 2 | |
| 07/2016 - 01/2017 | ![]() | Rangers FC U19 | Defence | ||
| 02/2016 - 06/2016 | ![]() | Ayr United | Defence | ||
| 07/2014 - 02/2016 | ![]() | Rangers FC U19 | Defence |
Club matches
| Competition | Matches | Start | In | Out | Min. | Scores | 11m | Ass | Yellow | Yellow-Red | Red | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
![]() | Europa League | 3 | 1 | 2 | - | 105 | - | - | - | - | - | - | » All matches |
![]() | Europa League Qual. | 10 | 6 | 4 | 1 | 612 | 1 | - | - | - | - | - | » All matches |
![]() | Conference League Qual. | 6 | 6 | - | - | 540 | - | - | - | 1 | - | - | » All matches |
| Championship | 81 | 64 | 17 | 37 | 5.529 | 8 | - | 7 | 16 | 1 | - | » All matches | |
| FA Cup | 6 | 6 | - | 4 | 438 | - | - | - | - | - | - | » All matches | |
| League Cup | 3 | 2 | 1 | 1 | 145 | - | - | 1 | - | - | - | » All matches | |
| League One | 17 | 12 | 5 | 5 | 1.066 | - | - | 3 | 4 | 1 | - | » All matches | |
| EFL Trophy | 2 | 2 | - | 1 | 153 | - | - | 1 | - | - | - | » All matches | |
| Playoffs | 3 | 3 | - | 1 | 243 | - | - | - | - | - | - | » All matches | |
| Premiership | 136 | 121 | 15 | 13 | 10.741 | 6 | - | 2 | 29 | 1 | 2 | » All matches | |
| Championship | 9 | 6 | 3 | - | 565 | - | - | - | 1 | - | - | » All matches | |
| FA Cup | 8 | 8 | - | 2 | 614 | - | - | 1 | - | - | 1 | » All matches | |
| League Cup | 13 | 9 | 4 | 2 | 934 | 3 | - | 1 | 2 | - | - | » All matches | |
| Playoffs | 2 | 1 | 1 | 1 | 106 | - | - | - | 2 | - | - | » All matches | |
| Total | 299 | 247 | 52 | 68 | 21.791 | 18 | - | - | 55 | 3 | 3 |
International matches
| Competition | Matches | Start | In | Out | Min. | Scores | 11m | Ass | Yellow | Yellow-Red | Red | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
![]() | Friendlies | 2 | 2 | - | 1 | 152 | - | - | - | - | - | - | » All matches |
| Total | 2 | 2 | - | 1 | 152 | - | - | - | - | - | - | ||
| Competition | Matches | Start | In | Out | Min. | Scores | 11m | Ass | Yellow | Yellow-Red | Red | ||
![]() | U21 Friendlies | 2 | 2 | - | 1 | 163 | - | - | - | 1 | - | - | » All matches |
![]() | U21 EURO Qualifiers | 17 | 13 | 4 | - | 1.269 | 1 | - | - | 5 | - | - | » All matches |
| Total | 19 | 15 | 4 | 1 | 1.432 | 1 | - | - | 6 | - | - | ||
| Competition | Matches | Start | In | Out | Min. | Scores | 11m | Ass | Yellow | Yellow-Red | Red | ||
![]() | U19 Friendlies | 1 | 1 | - | - | 90 | - | - | - | - | - | - | » All matches |
![]() | U19 EURO Qualifiers | 7 | 7 | - | - | 630 | 1 | - | - | - | - | - | » All matches |
| Total | 8 | 8 | - | - | 720 | 1 | - | - | - | - | - | ||
| Competition | Matches | Start | In | Out | Min. | Scores | 11m | Ass | Yellow | Yellow-Red | Red | ||
![]() | U17 EURO | 3 | 3 | - | - | 270 | - | - | - | 1 | - | - | » All matches |
| Total | 3 | 3 | - | - | 270 | - | - | - | 1 | - | - | ||
| Competition | Matches | Start | In | Out | Min. | Scores | 11m | Ass | Yellow | Yellow-Red | Red | ||
![]() | U16 Friendlies | 1 | - | 1 | - | 14 | - | - | - | - | - | - | » All matches |
| Total | 1 | - | 1 | - | 14 | - | - | - | - | - | - | ||
| Competition | Matches | Start | In | Out | Min. | Scores | 11m | Ass | Yellow | Yellow-Red | Red | ||
![]() | U15 Friendlies | 1 | 1 | - | - | 90 | - | - | - | - | - | - | » All matches |
| Total | 1 | 1 | - | - | 90 | - | - | - | - | - | - |









