In carriera ha totalizzato 112 presenze in Serie B con le maglie di Monza e Siena.
Appende gli scarpini al chiodo nel 2010 e subito diventa il vice di Cristiano Bacci all'Entella. Nel 2011-2012 allena i Giovanissimi Nazionali biancocelesti per passare poi agli Allievi Nazionali e per ritornare alla vecchia leva nel 2013. Il 9 luglio 2015 viene ufficializzato come nuovo allenatore della Primavera al posto di Nicola Tarroni: al primo anno si piazza secondo in campionato dietro alla Juventus venendo eliminato ai quarti di finale dalla Roma mentre l'anno seguente perde la storica finale di Coppa Italia sempre contro i giallorossi; tra i suoi giocatori c’è il prodigio Nicolò Zaniolo. Il 30 aprile 2017 sostituisce l'esonerato Roberto Breda sulla panchina della prima squadra perdendo contro Hellas Verona e Novara e vincendo contro il Cittadella; il 31 maggio viene confermato anche per la stagione successiva. Il 2 agosto viene ammesso al corso per l’abilitazione a “Allenatore Professionista di 1ª categoria - UEFA PRO” che si svolge a Coverciano da settembre. Il 5 novembre seguente viene esonerato avendo collezionato 14 punti in 13 partite frutto di 3 vittorie, 5 pareggi e 5 sconfitte. Il 9 agosto 2018 viene ufficializzato il suo ritorno nel settore giovanile biancoceleste: allenerà infatti la formazione Berretti, l’equivalente della Primavera. Il 3 ottobre ottiene l'abilitazione da allenatore.[1] Il 7 giugno 2019 battendo la Ternana in finale per 1-0 vince il campionato Berretti e due giorni dopo vince anche la Supercoppa contro il Torino, vincitore del campionato A-B. Il 26 maggio 2020, con la squadra ferma al sesto posto in classifica, lascia l’Entella dopo 13 anni ed entra nello staff di Răzvan Lucescu prima all’Al-Hilal e dopo in Grecia, al PAOK, insieme agli altri ex Entella Cristiano Bacci e Matteo Spatafora.[2]
Nell'estae 2022 torna in Italia per allenare l'under 18 del Parma. L'anno successivo, nell luglio 2023 torna in Grecia per fare il viceallenatore di Răzvan Lucescu al PAOK.