Calcisticamente cresciuto nelle giovanili del Bari, dopo le esperienze in Serie D con il Noicattaro e in Serie C con Bisceglie e Pro Sesto viene acquistato dal Novara nel 2001. Con la maglia del club piemontese disputa 34 partite, segnando 16 gol. Nel 2002 passa al Siena, squadra militante in Serie B, con la formula del prestito biennale, contribuendo alla promozione del club toscano con sette reti in 33 apparizioni. Il 14 settembre 2003 fa il suo esordio in Serie A, nella sconfitta dei bianconeri contro l'Inter (0-1). A gennaio passa in prestito al Torino. A fine stagione non viene riscattato dai granata e fa quindi ritorno al Novara.
Dopo aver realizzato nove gol nella prima parte del campionato 2004-2005 con la maglia del Novara, a gennaio si trasferisce in prestito alla Salernitana. Al termine della stagione ritorna in Piemonte e nel nuovo campionato di Serie C1 totalizza 10 reti in 31 partite. Nel 2006 viene acquistato dal Perugia, con cui ripete lo score della stagione precedente.
Nel 2007 ritorna di nuovo al Novara, sempre in Serie C1. Nella stagione 2007-2008 realizza il suo record di marcature: 18 gol in 33 partite. Promosso capitano degli azzurri per il campionato 2008-2009, conclude la stagione con soli nove centri. In questa annata raggiunge il record di 100 reti segnate tra Serie B, Serie C1 e Serie C2.
Ha contribuito alla promozione in Serie A del Novara nel campionato 2010-2011, con sei gol in 28 partite. Il 26 novembre 2011, in occasione della partita vinta per 2-1 contro il Parma, ha realizzato la sua prima marcatura in massima serie diventando così l'unico calciatore ad aver segnato almeno una rete in tutti e quattro i campionati professionistici italiani con la stessa maglia (record poi superato da Lorenzo Pasciuti, a segno con la maglia del Carpi nei cinque campionati professionistici dalla Serie D alla A, il 9 gennaio 2016);[4][7] tuttavia a fine stagione il Novara retrocede di nuovo in Serie B. Il 10 luglio 2012 prolunga il suo contratto con la società azzurra per altri due anni.[8]
Il 1º luglio 2014, dopo essere andato in scadenza con il Novara, viene ufficializzato il suo ingaggio da parte del Prato, club militante in Lega Pro.[9] Con i toscani gioca 30 partite, segnando sette gol.
Al termine della stagione 2014-2015 annuncia il suo ritiro dal calcio giocato.
Dopo il ritiro
Terminata la carriera da calciatore, il 1º Luglio 2015 entra a far parte del team di osservatori Bari. Nella stagione successiva segue Daniele Faggiano nelle esperienze di Palermo prima e Parma poi, in qualità di responsabile dell'area scouting.
Terminata l'esperienza con i ducali, il 4 agosto 2018 viene nominato nuovo direttore sportivo e responsabile dell'area tecnica del Trapani Calcio. Il 30 aprile 2019, dopo la cessione della società da parte di Vittorio Morace, viene sollevato dall'incarico. Dopo la promozione in serie B viene richiamato a svolgere il ruolo di direttore sportivo e responsabile dell'area tecnica affiancato dal direttore generale, Giuseppe Mangiarano.
Archiviata l'esperienza con i granata, si accasa al Livorno nelle vesti di DS, ma la stagione termina con il fallimento della squadra toscana. Si trasferisce dunque alla Juve Stabia nella stagione, concludendo il campionato di Serie C all'11º posto
Dopo due anni di inattività, nel 2024 entra a far parte del team di osservatori della Fiorentina.
^Non è comunque l'unico ad aver segnato in tutti i campionati professionistici (in passato erano tre) con una maglia né l'unico ad aver segnato in quattro categorie diverse (considerando anche quelle non professionistiche) con la stessa maglia.