Cresciuto nel Mercurago[1], da qui passa al Varese e fa il suo esordio come professionista nel campionato di Serie C2 1983-1984, con la maglia del Novara. Nelle due annate successive rimane in Piemonte, con Borgoticino (nel Campionato Interregionale) e Asti, di nuovo in Serie C2. Nel periodo ad Asti, viene convocato nella Nazionale Under-21 di Serie C giocando una partita[2].
Nel 1986 viene acquistato dal Cosenza, con cui debutta in Serie C1. Con i silani si guadagna il posto da titolare, nel ruolo di ala destra[3], contribuendo alla promozione tra i cadetti ottenuta al termine del campionato di Serie C1 1987-1988. In Serie B viene riconfermato per altre due stagioni, per un totale di cinque annate in cui colleziona 120 presenze con la maglia calabrese con cui sfiora la promozione in Serie A nel campionato 1988-1989.
Nell'autunno 1990, dopo aver disputato due partite con il Cosenza, viene acquistato dal Piacenza, in Serie C1[4]. Qui viene impiegato come rincalzo nel ruolo di mezzala destra[4], totalizzando 19 presenze e 4 reti con la formazione di Luigi Cagni e conquistando la sua seconda promozione tra i cadetti. A fine campionato fa ritorno al Cosenza[5], che gli prolunga il contratto[1] e poi nel mercato autunnale lo presta al Baracca Lugo, ancora in Serie C1. I romagnoli, in difficoltà economiche, non lo riconfermano[1], e torna al Cosenza: non rientrando nei piani tecnici dei calabresi, rimane fermo un'intera stagione, allenandosi con l'Arona[1].
Negli anni successivi milita in diverse formazioni di C1 e C2 (Bisceglie, Saronno e Olbia), prima di riavvicinarsi a casa nel 1996, accettando la discesa tra i dilettanti con la maglia del Borgosesia[6]. Vi rimane per tre stagioni, conquistando la promozione in Serie C2 nel 1998, e disputando nel campionato Serie C2 1998-1999 la sua ultima stagione da professionista. Dopo la retrocessione, passa alla Varalpombiese, nel campionato di Eccellenza piemontese[7]; conclude la carriera di nuovo in Serie D, con Vigevano e Castellettese, e in Eccellenza con la Sunese[8], ritirandosi nel 2005 a 40 anni.
Ha totalizzato 65 presenze in Serie B, tutte con la maglia del Cosenza.
Allenatore
Subito dopo il ritiro, inizia l'attività di allenatore nella Sunese[9] e quindi guida la Castellettese nel campionato di Serie D 2007-2008[10], venendo esonerato nel febbraio 2008[10]. In seguito allena il Real Cureggio, nel campionato di Eccellenza piemontese[11] e, dopo la rinuncia al campionato della squadra novarese, passa sulla panchina della Solbiatese[11] per il campionato di Eccellenza 2011-2012. La squadra rimane coinvolta nella lotta per non retrocedere e nel marzo 2012 viene esonerato[12].
Nell'estate 2012 entra a far parte dello staff tecnico dell'Asti[13], diventando allenatore della formazione Juniores il 1º novembre 2012[14]. Nel 2013 passa al Colline Alfieri Don Bosco, dove viene esonerato nel novembre 2014[15].
Durante la stagione 2015-2016 allena il Cerano nel campionato di Promozione piemontese, con cui si guadagna il salto in Eccellenza al termine dei playoff, dopo una stagione vissuta sempre in testa. L'anno successivo la squadra rimane invischiata nelle zone basse della classifica e il mister viene esonerato a metà stagione.
A luglio 2017 viene nominato allenatore dello Stresa, sempre nel campionato di Eccellenza piemontese. La stagione 2017-2018 si rivela trionfale per il club stresiano, che vince il campionato ottenendo la promozione in Serie D[16]. Viene confermato dalla società per la stagione successiva[17], ma viene esonerato nell'ottobre 2018[18].
A giugno 2019 diventa allenatore del Verbania in Serie D[19], ma si dimette nel dicembre dello stesso anno[20]. Da settembre 2020 allena i lombardi del Verbano[21] fino al 2022, quando passa alla Vergiatese[22]. Ma si dimette a ottobre 2022 e a febbraio 2023 viene chiamato sulla panchina dell'Oleggio[23], tornando così ad allenare nel campionato di Eccellenza piemontese.
Al termine della stagione 2022-2023, dopo aver conquistato la salvezza diretta senza passare per i playout, viene confermato per la stagione successiva[24]. Nel 2024 diventa allenatore del nuovo Baveno Stresa[25].