Dopo gli esordi con il Trani nel Campionato Interregionale[1] ed un anno con la Primavera del Perugia[2], debutta in Serie C2 nella stagione 1985-1986 con il Matera, con cui gioca due campionati. Nel 1987 passa alla Fidelis Andria e l'anno successivo disputa il suo primo campionato di Serie C1 con la SPAL.
Rimane con gli estensi per cinque anni, e dopo una iniziale retrocessione in Serie C2, ottiene la doppia promozione dalla C2 alla Serie B, debuttando in serie cadetta nella stagione 1992-1993.
Dopo un anno al Perugia, con cui vince il campionato di Serie C1 1993-1994, torna per altri due anni alla SPAL in Serie C1, ed in seguito disputa un altro campionato di Serie B con la maglia del Foggia.
La sua carriera prosegue in Serie C1, dove gioca per tre anni con il Modena ed uno con L'Aquila, ed in seguito in Serie C2, con tre anni al Gualdo ed uno al Melfi. Termina di giocare in Serie D nel 2006 con il Bitonto.
Allenatore
Dal 2008 allena per tre anni la formazione Berretti della SPAL, e nel febbraio 2011 diventa allenatore in seconda della prima squadra[3]. Da marzo 2013 è il nuovo allenatore del Rovigo Lpc nel campionato di Eccellenza Veneto; rileva il dimissionario Lino Carravieri. Sempre a Rovigo milita con la formazione Over 35.[senza fonte].
Nella stagione 2013/2014 guida i giovanissimi della scuola calcio Nicola Di Leo Trani.
In seguito alla partenza di Roberto De Zerbi, decide di restare sulla panchina del Foggia, affiancando il neo arrivato Giovanni Stroppa, con il quale vince il campionato di Lega Pro, riportando il Foggia in B dopo quasi venti anni.
La stagione in B con la squadra pugliese inizia il 6 agosto 2017 nel secondo turno di Coppa Italia contro il Vicenza. Sconfitti i biancorossi per 2-1, i pugliesi avanzano in Coppa Italia affrontando la Sampdoria al terzo turno. Il Foggia viene sconfitto ed eliminato dalla competizione proprio dalla squadra genovese che si imporrà sui rossoneri per 3-0. A causa degli scarsi risultati sportivi, nel mese di novembre, il ds Giuseppe Di Bari viene sollevato dal suo incarico e sostituito da Luca Nember. La squadra termina il girone di andata al 19º posto in classifica, in piena zona play-out. Anche grazie ai nuovi acquisti invernali la squadra risale la classifica terminando il campionato al 9º posto, a ridosso della zona play-off.
Il 20 giugno 2018 segue Stroppa al Crotone, come allenatore in seconda.
Il 24 luglio 2020, grazie alla vittoria per 5 a 1 ottenuta sul campo del Livorno, e il concomitante pareggio dello Spezia a Cremona, approda con tre giornate di anticipo in serie A con il Crotone.
Dopo la stagione in Serie A con il club calabrese, conclusasi anzitempo con l'esonero arrivato alla 24ª giornata, in seguito alla sconfitta in casa contro il Cagliari, nell'estate del 2021 segue Stroppa in serie B, sulla panchina del Monza, del duo Berlusconi-Galliani, in qualità di Collaboratore tecnico.
Il 29 Maggio 2022, con la vittoria per 3-4 in finale playoff sul campo del Pisa, riesce a raggiungere nuovamente la massima serie del calcio italiano, contribuendo alla prima storica promozione del club brianzolo in Serie A.
A seguito dell'esonero di Davide Ballardini, approda alla U.S. Cremonese in veste di collaboratore tecnico nello staff di Giovanni Stroppa.