Clubs
| Club | Seasons | Apps | Goals | Assists |
|---|---|---|---|---|
| Internacional de Bogota | 2026/27 | 14 | 2 | 3 |
| DC United | 2023/24 – 2025/26 | 70 | 6 | 3 |
| Santos Laguna | 2024/25 – 2025/26 | 50 | 6 | 1 |
| Whitecaps | 2020/21 – 2023/24 | 102 | 17 | 12 |
| Independiente del Valle | 2019/20 | 38 | 9 | 1 |
| America de Cali | 2018/19 | 35 | 4 | 3 |
| Atletico Nacional | 2016/17 – 2017/18 | 36 | 5 | 6 |
| Deportivo Pasto | 2017/18 | 15 | 2 | 1 |
| Deportes Tolima | 2016/17 | 20 | 3 | 5 |
| Bogota FC | 2013/14 – 2015/16 | 84 | 20 | — |
| Cucuta | 2015/16 | 17 | 4 | — |
Transfers
| Date | From | To | Type |
|---|---|---|---|
| 17 Jan 2020 | Atletico Nacional | Vancouver Whitecaps | Free |
| 1 Jan 2020 | Independiente del Valle | Atletico Nacional | — |
| 1 Jan 2019 | Atletico Nacional | Independiente del Valle | Loan |
| 3 Jan 2018 | Atletico Nacional | America de Cali | Loan |
| 18 Jul 2017 | Atletico Nacional | Deportivo Pasto | Loan |
| 25 Jun 2016 | Deportes Tolima | Atletico Nacional | — |
| 1 Jan 2016 | Cucuta | Deportes Tolima | — |
| 1 Jul 2015 | Bogota FC | Cucuta | — |
| 2 Jan 2025 | DC United | Santos Laguna | Free Transfer |
| 30 Jun 2026 | Santos Laguna | Internacional de Bogota | Free agent |
| 29 Jun 2026 | Santos Laguna | Internacional de Bogota | Free agent |
Season by season
| Season | Competition | Club | Apps | Starts | Min | Goals | Assists | Yellow | Red | Rating |
|---|---|---|---|---|---|---|---|---|---|---|
| 2026/27 | Primera A | Internacional de Bogota | 14 | 13 | 1009 | 2 | 3 | 0 | 0 | 6.83 |
| 2025/26 | Leagues Cup | Santos Laguna | 3 | 2 | 210 | 1 | 0 | 0 | 0 | 6.87 |
| 2025/26 | Liga MX | Santos Laguna | 33 | 14 | 1420 | 5 | 1 | 7 | 0 | 6.75 |
| 2024/25 | Liga MX | Santos Laguna | 14 | 13 | 689 | — | 0 | 0 | 1 | 6.45 |
| 2024/25 | Major League Soccer | DC United | 31 | 23 | 2026 | 3 | 2 | 9 | 0 | 6.75 |
| 2024/25 | Leagues Cup | DC United | 3 | 3 | 270 | 1 | 0 | 0 | 0 | 7.23 |
| 2023/24 | Major League Soccer | DC United | 19 | 7 | 776 | 2 | 1 | 2 | 0 | 6.63 |
| 2023/24 | Major League Soccer | Whitecaps | 7 | 4 | 298 | 0 | 1 | 0 | 0 | 6.63 |
| 2023/24 | US Open Cup | DC United | 14 | 13 | 689 | — | 0 | 0 | 1 | 6.45 |
| 2023/24 | Leagues Cup | DC United | 3 | 3 | 240 | 0 | — | 1 | 0 | 6.60 |
| 2023/24 | CONCACAF Champions League | Whitecaps | 4 | 4 | 259 | 0 | — | 1 | 0 | — |
| 2022/23 | Major League Soccer | Whitecaps | 28 | 18 | 1796 | 2 | 4 | 4 | 0 | 6.92 |
| 2022/23 | Canadian Championship | Whitecaps | 4 | 2 | 198 | 0 | — | 0 | 0 | — |
| 2021/22 | Major League Soccer | Whitecaps | 34 | 32 | 2773 | 11 | 4 | 4 | 0 | 7.22 |
| 2021/22 | Canadian Championship | Whitecaps | 1 | 1 | 90 | 1 | — | 0 | 0 | — |
| 2020/21 | Major League Soccer | Whitecaps | 24 | 19 | 1693 | 3 | 3 | 3 | 0 | 6.80 |
| 2019/20 | Liga Pro | Independiente del Valle | 27 | 23 | 2047 | 5 | — | 6 | 0 | — |
| 2019/20 | CONMEBOL Sudamericana | Independiente del Valle | 11 | 10 | 886 | 4 | 1 | 3 | 0 | 7.15 |
| 2018/19 | Primera A | America de Cali | 33 | 29 | 2429 | 4 | 3 | 4 | 0 | 6.85 |
| 2018/19 | CONMEBOL Sudamericana | America de Cali | 2 | 2 | 169 | 0 | — | 0 | 0 | 6.95 |
| 2017/18 | Primera A | Deportivo Pasto | 14 | 12 | 1039 | 2 | 1 | 1 | 0 | 6.82 |
| 2017/18 | Primera A | Atletico Nacional | 11 | 7 | 609 | 2 | 1 | 2 | 0 | 6.82 |
| 2017/18 | Copa Colombia | Deportivo Pasto | 1 | 1 | 69 | 0 | — | 1 | 0 | — |
| 2017/18 | CONMEBOL Libertadores | Atletico Nacional | 1 | 0 | 19 | 0 | — | 0 | 0 | — |
| 2017/18 | CONMEBOL Recopa | Atletico Nacional | 1 | 0 | 0 | 0 | — | 0 | 0 | — |
| 2016/17 | Primera A | Atletico Nacional | 17 | 11 | 1106 | 3 | 5 | 3 | 0 | 6.71 |
| 2016/17 | Primera A | Deportes Tolima | 16 | 9 | 934 | 2 | 5 | 4 | 1 | 6.71 |
| 2016/17 | Copa Colombia | Atletico Nacional | 4 | 1 | 93 | 0 | — | 0 | 0 | — |
| 2016/17 | Copa Colombia | Deportes Tolima | 4 | 3 | 200 | 1 | — | 1 | 0 | — |
| 2016/17 | FIFA Intercontinental Cup | Atletico Nacional | 1 | 0 | 23 | 0 | — | 0 | 0 | — |
| 2016/17 | CONMEBOL Sudamericana | Atletico Nacional | 1 | 0 | 4 | 0 | — | 0 | 0 | — |
| 2015/16 | Primera A | Cucuta | 17 | 15 | 1364 | 4 | — | 1 | 0 | — |
| 2015/16 | Primera B | Bogota FC | 14 | 12 | 1198 | 3 | — | 5 | 0 | — |
| 2015/16 | Copa Colombia | Bogota FC | 5 | 4 | 415 | 3 | — | 2 | 1 | — |
| 2014/15 | Primera B | Bogota FC | 32 | 30 | 2743 | 11 | — | 3 | 1 | — |
| 2014/15 | Copa Colombia | Bogota FC | 9 | 8 | 758 | 1 | — | 1 | 0 | — |
| 2013/14 | Primera B | Bogota FC | 19 | 14 | 1375 | 1 | — | 2 | 0 | — |
| 2013/14 | Copa Colombia | Bogota FC | 5 | 5 | 408 | 1 | — | 2 | 0 | — |
Availability history
| Reason | From | Until | Days |
|---|---|---|---|
| Red Card | 16 Aug 2022 | 18 Aug 2022 | 2 |
| Red Card | 2 Jul 2024 | 4 Jul 2024 | 2 |
| Knee Injury | 1 Aug 2021 | 12 Aug 2021 | 11 |
| Yellow Cards | 31 May 2024 | 2 Jun 2024 | 2 |
| Red Card | 24 Jan 2025 | 26 Jan 2025 | 2 |
| Yellow Cards | 27 Sept 2024 | 29 Sept 2024 | 2 |
Trophies
| Competition | Season | Place |
|---|---|---|
| Copa Colombia (Colombia) | 2016 | Winner |
| Canadian Championship (Canada) | 2022 | Winner |
| CONMEBOL Libertadores (South America) | 2016 | Winner |
| CONMEBOL Sudamericana (South America) | 2019 | Winner |
| CONMEBOL Sudamericana (South America) | 2016 | 2nd Place |
| CONMEBOL Recopa (South America) | 2017 | Winner |
