Dopo aver iniziato negli anni novanta la propria carriera nelle minimoto e poi con gli scooter, categoria nella quale si laurea per tre volte campione italiano, esordisce nel mondiale Supersport nel 1999, correndo inizialmente con una Ducati 748 R del Team Ghelfi e passando poi a condurre una Suzuki GSX 600R del team Sacchi Corse; nell'annata coglie un unico risultato a punti, un nono posto in condizioni di bagnato all'A1-Ring che gli vale il 30º posto finale.
L'anno successivo passa a correre nel mondiale Superbike a bordo di una Ducati RS 996 del Team Pedercini, squadra con cui rimane anche nel 2001; in queste due stagioni riesce a portarsi in zona punti in diverse occasioni, finendo prima 32º e poi 30º in classifica, e nel secondo anno fa segnare un giro veloce al Lausitzring.
Nel 2002 cambia squadra passando al team Bertocchi, che porta in gara delle Kawasaki ZX-7RR, e migliora la sua posizione conclusiva, in questa stagione la 19ª. Per il 2003 resta nello stesso team e ottiene il suo miglior risultato nella classifica finale, concludendo all'11º posto, ritirandosi solamente nella manche inaugurale a Valencia e tagliando il traguardo in zona punti nel resto delle gare. Nel 2004 con la stessa squadra finisce il campionato in 13ª piazza e coglie i propri migliori piazzamenti in gara con i sesti posti di Phillip Island e Oschersleben. Nel 2005 rimane alla guida di moto Kawasaki, correndo però per il team PSG-1 Corse e giungendo al 19º posto finale.
Nella stagione 2003 partecipa, in sella a una Kawasaki ZX-7RR, al campionato italiano velocità conquistando la prima posizione in classifica generale in classe superbike, con due vittorie all'attivo. Altri risultati di rilievo ottenuti nella categoria sono due terze posizioni in classifica, nel 2000 e nel 2002.
Nel 2006 fa ritorno al mondiale Supersport gareggiando con una Yamaha YZF R6, prima con RG Team e in seguito con il team Bikersdays Moto 1, con cui ottiene anche un settimo posto a Brno, e raggiungendo la 19ª piazza finale. Nel 2007 corre come wild card i round del mondiale Superbike di Monza e Misano nuovamente con PSG-1 Corse, ottenendo due piazzamenti a punti per la 26ª posizione generale. Nel prosieguo della stagione trova spazio anche in Supersport come pilota sostitutivo con una Honda CBR600RR del team Intermoto Czech, con cui raccoglie un punto e la 40ª posizione finale.
Nel 2007 inizia la carriera di commentatore sportivo per le gare della MotoGP per La3, e nel 2008 anche per la Superbike.
Dal 2009 al 2012 gli viene affidato il ruolo di commentatore tecnico per le gare del mondiale Superbike su La7 al fianco di Luigi Vignando.
Il 7 giugno 2009 viene eletto consigliere nel comune di Montecalvo in Foglia con una lista civica, restandolo fino al 2014.
Dal 2014 diventa commentatore tecnico del Motomondiale per Sky Sport MotoGP, affiancando nelle telecronache di prove libere, qualifiche, warm-up e gare delle classi Moto3, Moto2 e MotoGP Zoran Filicic (nel 2014 per MotoGP e Moto3, dal 2015 al 2018 per la Moto3), Guido Meda (dal 2015 per la classe MotoGP) e Rosario Triolo.