Comincia la sua carriera nelle giovanili dell'Atalanta.
Nell'estate 2005, a 18 anni, passa all'Albinoleffe, società militante in Serie B, dove rimarrà per quattro stagioni. Durante le prime due stagioni nella società seriana colleziona poche presenza, anche a causa della giovane età.
Nella stagione 2007-2008 si ritaglia un discreto spazio, disputando anche tre partite nei playoff promozione. Il 14 ottobre 2007 realizza il primo gol in Serie B contro il Pisa. La stagione successiva diventa titolare del centrocampo, offrendo prestazioni impreziosite da alcuni gol, fra le quali spicca il match di Piacenza del 21 febbraio 2009, dove risulterà il migliore in campo, siglando una doppietta decisiva. All'Albinoleffe è stato allenato in prima squadra per una stagione dal padre Armando.
Il 17 aprile, durante la partita disputata contro il Frosinone, subisce un grave infortunio al crociato anteriore del ginocchio destro, interrompendo la stagione prima del tempo. Terminata la stagione torna all'Atalanta.
Disputa gran parte del periodo relativo alla stagione 2010-2011 nella riabilitazione all'infortunio subito nel campionato precedente. Il 23 aprile 2011 per riacquistare la forma partita viene mandato a giocare con la squadra Primavera, finendo anche sul tabellino dei marcatori.[8] Fa il suo esordio in questa stagione nell'ultima partita di campionato contro il Grosseto dove parte titolare e fornisce l'assist per la rete di Tiribocchi che farà mantenere il primato in classifica della squadra orobica.[9]
A fine stagione viene totalmente riscattato dall'Atalanta,[10] che tuttavia lo gira allo Spezia con la formula del prestito con diritto di riscatto della comproprietà.[11] Durante la sfida casalinga contro il Trapani capolista, segna la sua prima rete in maglia bianca con un tiro dalla distanza.[12] Si rende decisivo nel finale di stagione segnando due gol nelle ultime quattro partite, il primo nel match casalingo del 22 aprile contro il Sud-Tirol (2-1) al minuto 42 del secondo tempo, con un destro da fuori area che si insacca all'incrocio dei pali,[13] il segondo gol arriva il 29 aprile al 7º minuto, nella sfida contro la Triestina (2-1).[14] Conclude la stagione, con trentadue partite disputate e un bottino di sei reti contribuendo in modo significativo alla promozione diretta dello Spezia in Serie B.[15]
Nella stagione successiva è uno dei pochi giocatori a rimanere in squadra dopo la promozione in cadetteria, e quindi alle scelte della dirigenza che decide di riformare quasi interamente la rosa per puntare la promozione in Serie A. Decide di vestire la maglia numero 2 e diventa titolare inamovibile fino al 15 settembre quando, nella gara contro l'Ascoli, subisce una lesione di secondo grado al bicipite femorale destro, costretto, così, ad uno stop di sei settimane. Viene nel frattempo sostituito dal giovane Cristiano Piccini.
Il 9 novembre, allo stadio Zecchini, nella sfida contro il Grosseto, fa il suo rientro in campo, subentrando a Lorenzo Crisetig al minuto 16 della ripresa. Dopo essersi riguadagnato il posto da titolare, il 30 dicembre, nel match contro il Vicenza, si infortuna gravemente alla testa dopo uno scontro fortuito con un compagno di squadra, in seguito ai vari controlli non viene riscontrato nulla di grave,[16] ma il giocatore viene precauzionalmente tenuto lontano dalle gare di campionato per un mese, potendo comunque nel frattempo allenarsi regolarmente.
Il 16 febbraio seguente ritorna nella lista dei convocati, diramata dal nuovo mister spezzino Atzori, per la sfida contro il Sassuolo.[17] Dieci giorni dopo, il 26 febbraio, nella sfida del Granillo contro la Reggina, viene schierato titolare dal nuovo allenatore dello Spezia, Luigi Cagni, ritornando, così, a distanza di 58 giorni, nell'undici di partenza.[18] A giugno 2013 Atalanta e Spezia rinnovano la comproprietà.[19]
Il 25 giugno 2015 lo Spezia riscatta l'intero cartellino del calciatore.[20]
Il 12 agosto 2015 viene ceduto in prestito[21] al Como,[22] compagine neopromossa in Serie B. Segna il suo primo gol stagionale il 15 maggio 2016 in Como-Spezia (4-0), penultima giornata di campionato.
Il 27 giugno seguente viene acquistato a titolo definitivo dal Padova, con cui firma un contratto biennale.[5] Il 20 novembre 2017, durante la partita vinta contro la Triestina, si infortuna gravemente al ginocchio sinistro, riportando la rottura del legamento crociato anteriore[23]; operato, torna ad allenarsi nel successivo mese di marzo.[24] Il 5 aprile 2018 rinnova con il club veneto fino al 2019.[25]