Clubs
| Club | Seasons | Apps | Goals | Assists |
|---|---|---|---|---|
| Canada | 2015 – 2026 | 79 | 18 | 9 |
| Hibernian | 2024/25 – 2025/26 | 83 | 13 | 26 |
| Swindon | 2025/26 | 14 | 1 | 2 |
| Whitecaps | 2023/24 – 2024/25 | 10 | — | — |
| Aberdeen | 2023/24 – 2024/25 | 49 | 6 | 11 |
| Reading | 2021/22 – 2023/24 | 62 | 4 | 2 |
| Cardiff | 2016/17 – 2020/21 | 184 | 25 | 21 |
| QPR | 2012/13 – 2016/17 | 122 | 13 | 6 |
| Blackburn | 2009/10 – 2011/12 | 92 | 14 | — |
| St. Pauli | 2008/09 | 26 | 6 | — |
| Paderborn | 2007/08 | 0 | 1 | — |
Transfers
| Date | From | To | Type |
|---|---|---|---|
| 6 Aug 2024 | Aberdeen | Hibernian | Free |
| 16 Feb 2024 | Vancouver Whitecaps | Aberdeen | Free |
| 14 Sept 2023 | Reading | Vancouver Whitecaps | Free |
| 19 Aug 2021 | Cardiff | Reading | Free |
| 10 Oct 2016 | QPR | Cardiff | Free |
| 30 Jul 2012 | Blackburn | QPR | € 3.8M |
| 1 Aug 2008 | Blackburn | FC St. Pauli | Loan |
| 1 Jan 2008 | Blackburn | SC Paderborn 07 | Loan |
| 29 Jun 2026 | Swindon Town | Hoilett Junior | Free agent |
| 2 Feb 2026 | Hibernian | Swindon Town | Transfer |
Season by season
| Season | Competition | Club | Apps | Starts | Min | Goals | Assists | Yellow | Red | Rating |
|---|---|---|---|---|---|---|---|---|---|---|
| 2026 | Friendlies | Canada | 2 | 0 | — | 0 | 0 | 1 | 0 | — |
| 2025/26 | League Cup | Hibernian | 13 | 11 | 803 | 2 | 7 | 3 | 0 | 7.48 |
| 2025/26 | Friendlies Clubs | Hibernian | 13 | 11 | 803 | 2 | 7 | 3 | 0 | 7.48 |
| 2025 | CONCACAF Gold Cup | Canada | 13 | 11 | 803 | 2 | 7 | 3 | 0 | 7.48 |
| 2025 | Friendlies | Canada | 3 | 0 | 52 | 0 | 0 | 0 | 0 | 6.70 |
| 2025/26 | League Two | Swindon | 14 | 10 | 721 | 1 | 2 | 2 | 0 | 6.74 |
| 2025/26 | UEFA Europa Conference League | Hibernian | 2 | 0 | 79 | 0 | 0 | 2 | 0 | 6.70 |
| 2025/26 | Premiership | Hibernian | 14 | 4 | 446 | 3 | 1 | 0 | 0 | 6.86 |
| 2024/25 | Premiership | Hibernian | 28 | 19 | 1539 | 4 | 4 | 1 | 0 | 7.03 |
| 2024/25 | Premiership | Aberdeen | 34 | 28 | 1560 | 4 | 4 | 1 | 0 | 7.03 |
| 2024/25 | FA Cup | Hibernian | 13 | 11 | 803 | 2 | 7 | 3 | 0 | 7.48 |
| 2024 | CONCACAF Nations League | Canada | 2 | 1 | 21 | 1 | 0 | 0 | 0 | 7.20 |
| 2024 | Friendlies | Canada | 1 | 0 | 20 | 0 | 0 | 0 | 0 | 6.20 |
| 2023/24 | Major League Soccer | Whitecaps | 10 | 6 | 260 | — | — | 0 | 0 | 6.66 |
| 2023/24 | Premiership | Aberdeen | 13 | 11 | 803 | 2 | 7 | 3 | 0 | 7.48 |
| 2023/24 | FA Cup | Aberdeen | 2 | 1 | 133 | 0 | — | 0 | 0 | — |
| 2023 | CONCACAF Nations League | Canada | 2 | 1 | 34 | — | — | 0 | 0 | 7.10 |
| 2023 | CONCACAF Gold Cup | Canada | 2 | 1 | 34 | — | — | 0 | 0 | 7.10 |
| 2023 | Friendlies | Canada | 1 | 0 | 29 | 1 | — | 0 | 0 | 7.20 |
| 2022/23 | Championship | Reading | 34 | 30 | 2564 | 1 | — | 4 | 0 | 6.77 |
| 2022/23 | FA Cup | Reading | 1 | 1 | 69 | 0 | — | 0 | 0 | 5.70 |
| 2022 | CONCACAF Nations League | Canada | 2 | 1 | 16 | — | — | 0 | 0 | 6.70 |
| 2022 | World Cup - Qualification CONCACAF | Canada | 13 | 7 | 591 | 3 | — | 1 | 0 | 7.37 |
| 2022 | Friendlies | Canada | 3 | 2 | 224 | 0 | — | 0 | 0 | — |
| 2022 | World Cup | Canada | 3 | 2 | 162 | 0 | 0 | 1 | 0 | 7.00 |
| 2021/22 | Championship | Reading | 27 | 20 | 1732 | 3 | 2 | 3 | 0 | 6.73 |
| 2021 | CONCACAF Gold Cup | Canada | 5 | 4 | 323 | 2 | 2 | 1 | 0 | 7.28 |
| 2020/21 | Championship | Cardiff | 21 | 14 | 1168 | 2 | 2 | 2 | 0 | 6.80 |
| 2020/21 | FA Cup | Cardiff | 1 | 0 | 27 | 0 | — | 0 | 0 | 6.20 |
| 2020/21 | League Cup | Cardiff | 1 | 1 | 90 | 0 | — | 1 | 0 | 6.30 |
| 2019/20 | Championship | Cardiff | 43 | 31 | 2597 | 7 | 3 | 8 | 0 | 6.74 |
| 2019/20 | League Cup | Cardiff | 1 | 1 | 90 | 0 | — | 0 | 0 | 7.00 |
| 2019/20 | FA Cup | Cardiff | 1 | 0 | 12 | 0 | — | 0 | 0 | — |
| 2019 | Concacaf Nations League | Canada | 3 | 1 | 143 | 3 | — | 1 | 0 | — |
| 2019 | CONCACAF Gold Cup | Canada | 3 | 3 | 244 | 2 | — | 0 | 0 | — |
| 2018/19 | Premier League | Cardiff | 32 | 23 | 2142 | 3 | 1 | 4 | 0 | 6.44 |
| 2018/19 | FA Cup | Cardiff | 1 | 0 | 0 | 0 | — | 0 | 0 | — |
| 2018 | CONCACAF Nations League - Qualification | Canada | 4 | 4 | 341 | 3 | — | 0 | 0 | — |
| 2018 | World Cup - Qualification CONCACAF | Canada | 6 | 6 | 496 | 0 | — | 1 | 0 | — |
| 2017/18 | Championship | Cardiff | 46 | 44 | 3808 | 9 | 11 | 2 | 0 | 7.25 |
| 2017/18 | League Cup | Cardiff | 1 | 0 | 33 | 0 | — | 0 | 0 | — |
| 2017/18 | FA Cup | Cardiff | 3 | 2 | 193 | 2 | — | 1 | 0 | 6.70 |
| 2017 | CONCACAF Gold Cup | Canada | 4 | 4 | 330 | 1 | — | 0 | 0 | — |
| 2017 | Friendlies | Canada | 3 | 3 | 270 | 0 | — | 0 | 0 | — |
| 2016/17 | Championship | Cardiff | 33 | 29 | 2421 | 2 | 4 | 4 | 0 | 6.51 |
| 2016 | Friendlies | Canada | 3 | 2 | 199 | 0 | — | 0 | 0 | — |
| 2015/16 | Championship | QPR | 29 | 24 | 1996 | 6 | 2 | 3 | 0 | 6.75 |
| 2015/16 | League Cup | QPR | 2 | 1 | 87 | 0 | — | 0 | 0 | — |
| 2015 | Friendlies | Canada | 1 | 1 | 87 | 0 | — | 0 | 0 | — |
| 2014/15 | Premier League | QPR | 22 | 9 | 879 | 0 | — | 2 | 0 | — |
| 2014/15 | League Cup | QPR | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2014/15 | FA Cup | QPR | 1 | 1 | 46 | 0 | — | 0 | 0 | — |
| 2013/14 | Championship | QPR | 38 | 26 | 2385 | 4 | — | 3 | 0 | — |
| 2013/14 | League Cup | QPR | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2012/13 | Premier League | QPR | 26 | 15 | 1447 | 2 | — | 1 | 0 | — |
| 2012/13 | League Cup | QPR | 2 | 2 | 149 | 1 | — | 0 | 0 | — |
| 2011/12 | Premier League | Blackburn | 34 | 34 | 2954 | 7 | — | 5 | 0 | — |
| 2011/12 | League Cup | Blackburn | 3 | 1 | 141 | 0 | — | 1 | 0 | — |
| 2010/11 | Premier League | Blackburn | 24 | 17 | 1446 | 5 | — | 2 | 0 | — |
| 2010/11 | League Cup | Blackburn | 2 | 2 | 168 | 0 | — | 0 | 0 | — |
| 2010/11 | FA Cup | Blackburn | 2 | 2 | 180 | 1 | — | 0 | 0 | — |
| 2009/10 | Premier League | Blackburn | 23 | 8 | 943 | 0 | — | 0 | 0 | — |
| 2009/10 | League Cup | Blackburn | 4 | 3 | 320 | 1 | — | 0 | 0 | — |
| 2008/09 | 2. Bundesliga | St. Pauli | 26 | 17 | 1605 | 6 | — | 4 | 0 | — |
Availability history
No injuries or suspensions recorded.
Trophies
No trophies recorded.
