Cresciuto nelle file del Millonarios, nel 2003 ha debuttato in prima squadra. Nel 2004 si è trasferito in Francia, all'Istres. Ha debuttato in Ligue 1 il 14 agosto 2004, in Monaco-Istres (2-1)[1], gara in cui ha siglato il gol del definitivo 2-1 al minuto 81. La prima stagione in Francia, terminata con la retrocessione dell'Istres in Ligue 2, si è conclusa con 2 reti in 34 presenze. Nella stagione successiva si è trasferito al Montpellier[2], in Ligue 2. Ha militato nelle file del Montpellier per quattro stagioni, rendendosi protagonista, in particolare, della promozione in Ligue 1 del 2008 (con 15 reti in 35 presenze in campionato) e del quinto posto in Ligue 1 ottenuto nella stagione successiva (con 11 reti in 36 presenze). Il 29 giugno 2010 è stato ufficializzato il suo trasferimento al Rennes[3], con cui ha firmato un contratto quadriennale. Ha militato nelle file del club rossonero per tre stagioni, totalizzando 87 presenze e 22 reti. Il 7 agosto 2013 è stato ufficializzato il suo ritorno al Montpellier[4]. Dopo una stagione e mezzo al Montpellier, il 2 gennaio 2015 ha risolto il proprio contratto[5]. Rimasto svincolato, il 12 gennaio 2015 è stato ingaggiato dal Toluca, club messicano[6]. Il 9 agosto 2016 è passato all'Once Caldas[7], tornando così in Colombia dopo 12 anni. Nel 2017 è passato all'Al-Riffa, club bahreinita. Nel luglio 2018 si è trasferito al FAS[8], club salvadoregno. Al termine della stagione è rimasto svincolato[9]. Dopo un periodo di prova al Municipal Limeño[10], il 7 gennaio 2019 ha firmato con l'Orsomarso[11], club con cui ha concluso la propria carriera da calciatore.