Attacking · Vancouver Whitecaps · season-by-season, by competition, and every match.
Past his 2023/24 peak — the recent trend is downward, so buyers are paying for what's left, not what was.
The record covers 6 seasons (2020/21–2025/26) across 3 clubs, including a move abroad — 106 appearances, 8 goals and 13 assists.
His best campaign on record is 2023/24 at Rosenborg — Season rating 27, 4 goals and 5 assists in 24 games. 2023/24 was the leap — Season rating up 15 points at Rosenborg. Form has slipped 11 Season points across his last 3 full seasons. The gap to his peak is 11 Season points.
2025/26 was disrupted — 8 fixtures missed through injury or absence.
| Season | Club | Apps | G | A | Rating | Season |
|---|---|---|---|---|---|---|
| 2025/26 | Vancouver Whitecaps | 25 | 2 | 5 | 43 | 17 |
| 2024/25 | Rosenborg | 11 | 1 | 1 | 41 | 7 |
| 2023/24 | Rosenborg | 24 | 4 | 5 | 45 | 27 |
| 2022/23 | Toronto FC | 31 | 1 | 2 | 42 | 12 |
| 2021/22 | Toronto FC | 7 | 0 | 0 | 36 | 0 |
| 2020/21 | Toronto FC | 8 | 0 | 0 | 38 | 0 |
| Competition | Apps | Min | G | A | Rating |
|---|---|---|---|---|---|
| Major League Soccer | 25 | 1405 | 2 | 5 | 6.8 |
| CONCACAF Champions League | 7 | 183 | 0 | 2 | 6.8 |
| Friendlies | 6 | 152 | 0 | 0 | 6.5 |
| Canadian Championship | 1 | 65 | 0 | 0 | — |
| CONCACAF Gold Cup | 2 | 56 | 0 | 0 | 6.2 |
| Date | Competition | Opponent | Res | Status | Min | G | A | Rating |
|---|---|---|---|---|---|---|---|---|
| Jan 24 | Friendlies Clubs | H Raków Częstochowa | 2-3 | Not in squad | — | |||
| Jan 29 | Friendlies Clubs | A St Patrick's Athl. | 1-1 | Not in squad | — | |||
| Feb 2 | Friendlies Clubs | A LNZ Cherkasy | 2-0 | Not in squad | — | |||
| Feb 6 | Friendlies Clubs | A IF Brommapojkarna | 2-0 | Not in squad | — | |||
| Feb 21 | CONCACAF Champions League | A Deportivo Saprissa | 1-2 | Played | 17 | 6.9 | ||
| Feb 23 | Major League Soccer | A Portland Timbers | 4-1 | Played | 62 | 1 | 3 | 9.9 |
| Feb 28 | CONCACAF Champions League | H Deportivo Saprissa | 2-0 | Played | 63 | 1 | 7.3 | |
| Mar 2 | Major League Soccer | H Los Angeles Galaxy | 2-1 | Played | 62 | 6.7 | ||
| Mar 6 | CONCACAF Champions League | H Monterrey | 1-1 | Played | 5 | — | ||
| Mar 9 | Major League Soccer | H CF Montreal | 2-0 | Hamstring Injury | — | |||
| Mar 13 | CONCACAF Champions League | A Monterrey | 2-2 | Not in squad | — | |||
| Mar 16 | Major League Soccer | A FC Dallas | 1-0 | Played | 25 | 6.3 | ||
| Mar 23 | Major League Soccer | H Chicago Fire | 1-3 | Played | 63 | 1 | 7.5 | |
| Mar 29 | Major League Soccer | A Toronto FC | 0-0 | Played | 61 | 6.3 | ||
| Apr 3 | CONCACAF Champions League | H U.N.A.M. - Pumas | 1-1 | Played | 28 | 6.7 | ||
| Apr 6 | Major League Soccer | H Colorado Rapids | 2-0 | Hamstring Injury | — | |||
| Apr 10 | CONCACAF Champions League | A U.N.A.M. - Pumas | 2-2 | Not in squad | — | |||
| Apr 12 | Major League Soccer | H Austin | 5-1 | Hamstring Injury | — | |||
| Apr 20 | Major League Soccer | A St. Louis City | 0-0 | Hamstring Injury | — | |||
| Apr 25 | CONCACAF Champions League | H Inter Miami | 2-0 | Played | 8 | 1 | 7.2 | |
| Apr 27 | Major League Soccer | A Minnesota United FC | 3-1 | Played | 63 | 6.6 | ||
| May 1 | CONCACAF Champions League | A Inter Miami | 3-1 | Played | 17 | 6.5 | ||
| May 4 | Major League Soccer | H Real Salt Lake | 2-1 | Played | 62 | 1 | 7.9 | |
| May 11 | Major League Soccer | H Los Angeles FC | 2-2 | Played | 66 | 6.7 | ||
| May 18 | Major League Soccer | A Austin | 0-0 | Played | 24 | 6.3 | ||
| May 21 | Canadian Championship | A Valour | 2-2 | Not in squad | — | |||
| May 25 | Major League Soccer | A Real Salt Lake | 3-2 | Played | 68 | 6.2 | ||
| May 29 | Major League Soccer | H Minnesota United FC | 0-0 | Played | 90 | 7.2 | ||
| Jun 2 | CONCACAF Champions League | A Cruz Azul | 0-5 | Played | 45 | 6.5 | ||
| Jun 9 | Major League Soccer | H Seattle Sounders | 3-0 | International duty | — | |||
| Jun 14 | Major League Soccer | A Columbus Crew | 1-2 | Not in squad | — | |||
| Jun 26 | Major League Soccer | H San Diego | 3-5 | International duty | — | |||
| Jun 30 | Major League Soccer | A Los Angeles FC | 1-0 | International duty | — | |||
| Jul 5 | Major League Soccer | A Los Angeles Galaxy | 0-3 | Played | 47 | 6.5 | ||
| Jul 10 | Canadian Championship | H Valour | 2-1 | Not in squad | — | |||
| Jul 13 | Major League Soccer | A Colorado Rapids | 0-3 | Not in squad | — | |||
| Jul 17 | Major League Soccer | A Houston Dynamo | 3-0 | Played | 18 | 6.9 | ||
| Jul 20 | Major League Soccer | A San Diego | 1-1 | Played | 90 | 6.9 | ||
| Jul 27 | Major League Soccer | H Sporting Kansas City | 3-0 | Played | 90 | 1 | 7.7 | |
| Aug 10 | Major League Soccer | A San Jose Earthquakes | 1-2 | Played | 86 | 6.6 | ||
| Aug 13 | Canadian Championship | A Forge | 2-2 | Not in squad | — | |||
| Aug 18 | Major League Soccer | H Houston Dynamo | 1-1 | Played | 89 | 6.6 | ||
| Aug 24 | Major League Soccer | H St. Louis City | 3-2 | Played | 63 | 7.3 | ||
| Sep 14 | Major League Soccer | H Philadelphia Union | 7-0 | Played | 22 | 6.3 | ||
| Sep 17 | Canadian Championship | H Forge | 4-0 | Not in squad | — | |||
| Sep 21 | Major League Soccer | A Sporting Kansas City | 2-0 | Played | 25 | 6.2 | ||
| Sep 25 | Major League Soccer | H Portland Timbers | 1-1 | Played | 45 | 6.3 | ||
| Sep 28 | Major League Soccer | A Seattle Sounders | 2-2 | Played | 28 | 6.9 | ||
| Oct 2 | Canadian Championship | H Vancouver FC | 4-2 | Not in squad | — | |||
| Oct 5 | Major League Soccer | H San Jose Earthquakes | 4-1 | Played | 78 | 6.9 | ||
| Oct 11 | Major League Soccer | A Orlando City SC | 2-1 | International duty | — | |||
| Oct 19 | Major League Soccer | H FC Dallas | 1-2 | Unused sub | 0 | — | ||
| Oct 26 | Major League Soccer | H FC Dallas | 3-0 | Played | 11 | 6.6 | ||
| Nov 2 | Major League Soccer | A FC Dallas | 1-1 | Played | 13 | 7.0 | ||
| Nov 23 | Major League Soccer | H Los Angeles FC | 2-2 | Played | 38 | 6.6 | ||
| Nov 30 | Major League Soccer | A San Diego | 3-1 | Played | 8 | 6.6 | ||
| Dec 6 | Major League Soccer | A Inter Miami | 1-3 | Played | 8 | 6.3 |