Cresciuto nel settore giovanile della Pasianese,[1] a 16 anni entra in quello della Juventus. Nella stagione 1994-1995 viene ceduto in prestito all'Ascoli, militante in Serie B. La stagione 1997-1998 è la migliore della sua carriera sotto il punto di vista delle realizzazioni: 5 reti in 33 presenze in campionato gli valgono il trasferimento al Bologna guidato da Carlo Mazzone nella successiva stagione 1998-1999, disputata in Serie A.
In rossoblù rimane per tre stagioni, di cui le ultime due contraddistinte da continui problemi fisici, che però non gli impediscono di disputare alcune buone partite. L'Inter decide di acquistarlo scambiandolo alla pari con Fabio Macellari,[2] ma proprio durante la preparazione dell'annata coi nerazzurri subisce un grave infortunio da cui non si riprenderà mai completamente;[3] nelle stagioni seguenti giocherà soltanto una manciata di partite, se si eccettua l'annata 2002-2003 nella quale è titolare al Como disputando ben 28 partite su 34.
Chiude la carriera tra i dilettanti del Casalecchio al termine della stagione 2006-2007.
Nazionale
Ha fatto parte dei 22 convocati da Cesare Maldini per il torneo olimpico di Atlanta 1996. Nel 1998 viene convocato per due partite con la nazionale maggiore, senza però scendere in campo.
Allenatore
Nella seconda parte della stagione 2007-2008 ha allenato il Sasso Marconi, nel campionato di Eccellenza dell'Emilia-Romagna. Successivamente allena la squadra dei Giovanissimi Nazionali Professionisti della SPAL per due campionati, per poi passare nella stagione 2010-2011 alla guida dei pari categoria del Bologna.
Dal dicembre 2018 allena il Casalecchio fino al 2019 per poi ritornare ad allenare il Settore Giovanile della SPAL.
Tra il 2022 e il 2023 è vice di Marco Banchini sulle panchine di Montevarchi e Alessandria, in Serie C. Il 18 marzo 2024 viene promosso a tecnico della prima squadra dell'Alessandria in seguito all'esonero di Banchini ma non riesce ad evitare la retrocessione in Serie D.