Career as a player
| Period | Team | Country | Position | # | |
|---|---|---|---|---|---|
| 07/2026 - 06/2028 | ![]() | St. Johnstone FC | Defence | 19 | |
| 07/2024 - 06/2026 | ![]() | Livingston FC | Defence | 19 | |
| 07/2023 - 06/2024 | ![]() | Linfield FC | Defence | 2 | |
| 07/2022 - 06/2023 | ![]() | Linfield FC | Defence | 18 | |
| 05/2022 - 06/2022 | ![]() | St. Mirren FC | Defence | ||
| 09/2021 - 04/2022 | ![]() | Kelty Hearts | Defence | ||
| 07/2021 - 09/2021 | ![]() | St. Mirren FC | Defence | 19 | |
| 10/2020 - 06/2021 | ![]() | St. Mirren FC | Defence | 15 | |
| 03/2020 - 10/2020 | ![]() | Orange County SC | Defence | 15 | |
| 07/2019 - 02/2020 | ![]() | Rangers FC (R) | Defence | ||
| 07/2018 - 02/2020 | ![]() | Rangers FC U19 | Defence | ||
| 07/2017 - 06/2018 | ![]() | Rangers FC U17 | Defence |
Club matches
| Competition | Matches | Start | In | Out | Min. | Scores | 11m | Ass | Yellow | Yellow-Red | Red | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
![]() | Champions League Qual. | 4 | 4 | - | 1 | 337 | - | - | - | 1 | - | - | » All matches |
![]() | Europa League Qual. | 2 | 2 | - | - | 180 | - | - | - | - | - | - | » All matches |
![]() | Conference League Qual. | 5 | 5 | - | - | 478 | 1 | - | - | - | 1 | - | » All matches |
| Premier League | 67 | 64 | 3 | 6 | 5.695 | 4 | - | - | 5 | 1 | - | » All matches | |
| Irish Cup | 1 | 1 | - | 1 | 97 | - | - | - | - | - | - | » All matches | |
| League Cup | 2 | 2 | - | - | 180 | - | - | - | - | - | - | » All matches | |
| Premiership | 46 | 42 | 4 | 6 | 3.816 | - | - | 1 | 9 | - | - | » All matches | |
| Championship | 34 | 21 | 13 | 8 | 2.076 | - | - | 4 | 5 | - | - | » All matches | |
| League Two | 23 | 19 | 4 | 5 | 1.637 | 1 | - | - | - | - | - | » All matches | |
| FA Cup | 7 | 6 | 1 | - | 680 | - | - | - | 1 | - | - | » All matches | |
| League Cup | 9 | 9 | - | 4 | 714 | - | - | 1 | 1 | - | - | » All matches | |
| Challenge Cup | 5 | 2 | 3 | - | 263 | - | - | - | - | - | - | » All matches | |
| Playoffs | 4 | 1 | 3 | - | 190 | - | - | 1 | 1 | - | - | » All matches | |
| USL Championship | 12 | 9 | 3 | 1 | 844 | - | - | - | 2 | - | - | » All matches | |
| Total | 221 | 187 | 34 | 32 | 17.187 | 6 | - | - | 25 | 2 | - | ||
| Competition | Matches | Start | In | Out | Min. | Scores | 11m | Ass | Yellow | Yellow-Red | Red | ||
![]() | U19 Youth League | 5 | 5 | - | - | 450 | 2 | - | - | 1 | - | - | » All matches |
| Total | 5 | 5 | - | - | 450 | 2 | - | - | 1 | - | - |
International matches
| Competition | Matches | Start | In | Out | Min. | Scores | 11m | Ass | Yellow | Yellow-Red | Red | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
![]() | U21 Friendlies | 3 | 2 | 1 | 1 | 189 | - | - | - | - | - | - | » All matches |
| Total | 3 | 2 | 1 | 1 | 189 | - | - | - | - | - | - | ||
| Competition | Matches | Start | In | Out | Min. | Scores | 11m | Ass | Yellow | Yellow-Red | Red | ||
![]() | U19 Friendlies | 3 | 3 | - | - | 270 | - | - | - | - | - | - | » All matches |
![]() | U19 EURO Qualifiers | 3 | 3 | - | - | 270 | - | - | - | 1 | - | - | » All matches |
| Total | 6 | 6 | - | - | 540 | - | - | - | 1 | - | - | ||
| Competition | Matches | Start | In | Out | Min. | Scores | 11m | Ass | Yellow | Yellow-Red | Red | ||
![]() | U16 Friendlies | 2 | 2 | - | 1 | 131 | - | - | - | - | - | - | » All matches |
| Total | 2 | 2 | - | 1 | 131 | - | - | - | - | - | - |











