Già tra gli allievi, all'età di sedici anni, fu campione italiano;[1] specializzato in corse a tappe, si mise in luce anche tra i dilettanti: nel 1972 ottenne infatti la vittoria nella Settimana Ciclistica Bergamasca.
Passò professionista nel 1973 con la Brooklyn di Franco Cribiori, ma nei primi due anni di attività non ottenne vittorie.
Nel 1976 vinse la Coppa Placci e l'affermazione gli valse una nuova convocazione mondiale; si impose inoltre in un'altra tappa della Vuelta Ciclista a Catalunya e giunse terzo nella graduatoria finale del Giro d'Italia a meno di un minuto dal vincitore Gimondi; fu inoltre nono al Tour de France. Nel 1979 arrivò settimo al Giro, ottenendo uno dei suoi ultimi risultati di rilievo. Concluse la carriera nel 1980 dopo aver svolto per un anno ruoli di gregariato per Francesco Moser alla Sanson-Campagnolo.[2]