Inizia a giocare a calcio nelle giovanili dell'Empoli.[7][8] Esordisce in Serie B il 23 marzo 2010 in Empoli-Mantova (4-0), subentrando al 76' al posto di Andrea Cupi.[9] Il 31 agosto 2011 viene acquistato in compartecipazione dall'Udinese[10][11], che lo lascia in prestito per una stagione alla squadra toscana.[12] Il 22 giugno 2012 viene acquistato a titolo definitivo dalla società friulana.[13] Il 13 luglio le due società si accordano per il rinnovo del prestito.[14]
Alle prese con un grave infortunio al ginocchio sinistro[15][16], trascorre l'intera stagione ai margini della rosa.[17] Il 3 luglio 2013 passa in prestito con diritto di riscatto al Novara.[18] Il 30 gennaio 2014 si trasferisce in compartecipazione al Brescia.[19] Esordisce con le rondinelle l'8 marzo in Brescia-Latina (0-2).[20] Il 20 giugno viene riscattato alle buste dall'Udinese.[21] Il 19 agosto 2014 passa in prestito all'Ascoli, in Lega Pro.[22]
Il 27 agosto 2015 si trasferisce in prestito alla Lucchese.[23] Nella sessione invernale di mercato si trasferisce in prestito al Santarcangelo.[24] Dopo aver trascorso una stagione alla Sambenedettese[25], il 10 luglio 2017 viene tesserato dalla Triestina, in Serie C.[26] Il 30 gennaio 2018 passa in prestito al Gavorrano.[27] Termina la stagione – conclusa con la retrocessione dei minerari in Serie D[28] – con 14 presenze complessive. Dopo aver rescisso il contratto che lo legava alla società alabardata[29][30], il 17 luglio torna al Gavorrano, firmando un contratto annuale.[31] Alle prese con numerosi problemi fisici[32], a fine stagione si ritira dal calcio giocato all'età di 29 anni.[32]
Nazionale
Esordisce con la nazionale Under-21 l'8 febbraio 2011 contro l'Inghilterra in amichevole, subentrando al 92' al posto di Federico Macheda.[33] In totale conta 22 presenze nelle selezioni giovanili azzurre.
Allenatore
Inizia la carriera da tecnico nel 2019, alla guida delle giovanili del Colline Pisane.[32][34]