Carriera Le giovanili e le stagioni da Under-23 Inizia la carriera nel Pedale Brembillese, squadra ciclistica di Val Brembilla, in provincia di Bergamo, con cui corre fino alla categoria Allievi; nel biennio tra gli Juniores gareggia invece con le formazioni bergamasche For 3-Semperlux e UC Bergamasca 1902 dirette da Diego Ferrari. È quindi attivo per cinque stagioni, quattro da Under-23 e una da Elite, con il Team Colpack di Almè, con cui ottiene diversi successi, tra cui spiccano quello nel 2015 al Piccolo Giro di Lombardia e quello nel 2016 al Giro del Medio Brenta, entrambe prove incluse nel calendario continentale UCI Europe Tour.
2017-2019: i primi anni nel professionismo con Androni Negli ultimi mesi del 2016 è attivo come stagista per la Lampre-Merida di Giuseppe Saronni: a inizio 2017 passa però professionista con un'altra squadra, l'Androni Giocattoli di Gianni Savio. Nel finale della prima stagione da prof si mette in luce cogliendo il terzo posto nella classifica generale del Presidential Cycling Tour of Turkey. Nel 2018, dopo il terzo posto al Giro dell'Appennino, debutta in un grande Giro partecipando al Giro d'Italia e concludendolo al ventiseiesimo posto; nelle battute conclusive dell'annata conquista invece l'ottava tappa e la classifica generale del Tour of Hainan.
Nel 2019, dopo un buon avvio di stagione, conclude al terzo posto assoluto il Giro di Sicilia di inizio aprile. A fine mese vince invece la terza tappa del Tour of the Alps con un'azione da finisseur, ripetendosi poi nella quinta frazione, al termine di una lunga fuga, e concludendo quinto nella classifica generale. Dopo aver ottenuto anche un secondo posto al Giro dell'Appennino, vinto dal compagno di squadra Mattia Cattaneo, partecipa al Giro d'Italia: nella sesta tappa, inseritosi nella fuga di giornata, si aggiudica la volata a due con Valerio Conti sul traguardo di San Giovanni Rotondo, ottenendo al contempo la sua prima affermazione in un grande Giro. Nel prosieguo della Corsa rosa si mette spesso in mostra con altre fughe da lontano: grazie a una di esse riesce a transitare per primo in solitaria sul Passo Manghen della ventesima tappa, conquistando così la Cima Coppi dell'edizione. Ventesimo nella generale finale, racimola ulteriori terzo e quarto posto parziali, finendo in testa nelle classifiche dei traguardi volanti e della Combattività.
Dal 2020: gli anni con Deceuninck/Quick-Step Nel 2020 si trasferisce al CCC Team, correndo però solo due corse a causa dell'interruzione alle attività per la pandemia di COVID-19; in agosto, dopo la ripresa delle corse, lascia il CCC Team per trasferirsi alla Deceuninck-Quick Step. Durante la stagione porta a conclusione il suo terzo Giro d'Italia, corso eccezionalmente in ottobre, al nono posto assoluto; nello stesso anno è sesto alla Tirreno-Adriatico, grazie anche al secondo posto nella frazione appenninica con arrivo a Cascia. Nella stagione seguente, sempre in maglia Deceuninck, è terzo al Giro di Romandia e secondo nella prova in linea tricolore a Imola, anticipato da Sonny Colbrelli; il 9 ottobre conclude al secondo posto anche il prestigioso Giro di Lombardia, battuto in una volata a due sul traguardo di Bergamo da Tadej Pogačar.
Torna al successo nel febbraio 2022, facendo sua una frazione al Tour of Oman, corsa che conclude al secondo posto generale alle spalle di Jan Hirt.
Palmarès
2010 (Juniores) Seriate-Vigolo
2011 (Juniores) Trofeo Città di Quarna Trofeo Bigio L'Oster Cronoscalata (cronometro) Sandrigo-Monte Corno Trofeo Flexform
2014 (Team Colpack) Giro del Valdarno
2015 (Team Colpack) Trofeo MP Filtri Piccolo Giro di Lombardia
2016 (Team Colpack) Giro del Medio Brenta Firenze-Mare Giro del Valdarno Coppa Città di San Daniele
2018 (Androni Giocattoli-Sidermec, due vittorie) 8ª tappa Tour of Hainan (Longmuwan > Changjiang) Classifica generale Tour of Hainan
2019 (Androni Giocattoli-Sidermec, tre vittorie) 3ª tappa Tour of the Alps (Salorno > Baselga di Piné) 5ª tappa Tour of the Alps (Caldaro > Bolzano) 6ª tappa Giro d'Italia (Cassino > San Giovanni Rotondo)
2022 (Quick-Step Alpha Vinyl Team, una vittoria) 4ª tappa Tour of Oman (Al Sifah > Mascate)
Altri successi 2018 (Androni Giocattoli-Sidermec) Classifica scalatori Tour of Slovenia
2019 (Androni Giocattoli-Sidermec) Classifica scalatori Giro di Sicilia Classifica traguardi volanti Giro d'Italia Premio della Combattività Giro d'Italia
2024 (Soudal Quick-Step) Classifica scalatori Quattro Giorni di Dunkerque
Piazzamenti Grandi Giri
Giro d'Italia 2018: 26º 2019: 20º 2020: 9º 2021: ritirato (12ª tappa) 2025: 41°
Vuelta a España 2022: 56º 2025: 40º
Classiche monumento
Milano-Sanremo 2017: 85º 2019: 125º 2020: 48º
Liegi-Bastogne-Liegi 2024: 71º
Giro di Lombardia 2017: 33º 2019: 89º 2021: 2º 2023: 20º 2024: 107º
Competizioni mondiali Campionati del mondo Imola 2020 - In linea Elite: 23º Kigali 2025 - In linea Elite: ritirato
Note
Altri progetti
Collegamenti esterni