| 02-11 | 31 | | Tour de France EFGH Singapore Criterium (CRTP) | |
| 19-10 | DNF | | Utsunomiya Japan Cup Road Race (1.Pro) | 144.0km |
| 18-10 | 101 | | Utsunomiya Japan Cup Criterium (CRTP) | |
| 07-10 | 53 | | Tre Valli Varesine (1.Pro) | 200.0km |
| 06-10 | 69 | | Coppa Bernocchi (1.Pro) | 191.0km |
| 04-10 | 4 | | UEC Road European Championships U23 (CC) | 121.0km |
| 26-09 | 28 | | UCI World Championship Kigali U23 (CM) | 164.0km |
| 11-09 | DNF | | Gran Premio città di Peccioli - Coppa Sabatini (1.Pro) | 197.0km |
| 10-09 | 50 | | Giro della Toscana - Memorial Alfredo Martini (1.1) | 189.0km |
| 07-09 | 31 | | GP Industria & Artigianato (1.Pro) | 196.0km |
| | | Tour de l'Avenir (2.NCUP) |
| 29-08 | 17 | 15 | Stage 6aLa Rosière Espace San Bernardo - La Rosière Espace San Bernardo (41.0km) | 41.0km |
| 29-08 | 29 | 16 | Stage 6bLa Rosière-Montvalezan - La Rosière-Montvalezan (10.0km) | 10.0km |
| 28-08 | 15 | 22 | Stage 5Saint-Gervais Mont-Blanc - Tignes (121.0km) | 121.0km |
| 27-08 | 48 | 51 | Stage 4Montagnat - Val Suran (110.0km) | 110.0km |
| 26-08 | 79 | 53 | Stage 3Étang-sur-Arroux - Châtillon-sur-Chalaronne (158.0km) | 158.0km |
| 25-08 | 42 | 53 | Stage 2Saint-Symphorien-sur-Coise - Vitry-en-Charollais (136.0km) | 136.0km |
| 24-08 | 32 | 46 | Stage 1Aoste - Saint-Galmier (188.0km) | 188.0km |
| 23-08 | 58 | 58 | PrologueTignes - Tignes (3.0km) | 3.0km |
| 29-06 | 3 | | National Road Championships - Italy U23 (CN) | |
| 24-06 | DNF | | Giro dell'Appennino (1.1) | 198.0km |
| | | Giro d'Italia Next Gen (2.2U) |
| 12 | | Klassement |
| 46 | | Punten |
| 22-06 | 6 | 12 | Stage 8Pinerolo - Pinerolo (127.0km) | 127.0km |
| 21-06 | 17 | 14 | Stage 7Bra - Prato Nevoso (163.0km) | 163.0km |
| 20-06 | 17 | 14 | Stage 6Ovada - Acqui Terme (154.0km) | 154.0km |
| 19-06 | 18 | 14 | Stage 5Fiorenzuola d'Arda - Gavi (153.0km) | 153.0km |
| 18-06 | 39 | 12 | Stage 4Manerbio - Salsomaggiore Terme (134.0km) | 134.0km |
| 17-06 | 11 | 11 | Stage 3Albese con Cassano - Passo del Maniva (144.0km) | 144.0km |
| 16-06 | 19 | 50 | Stage 2Rho - Cantù (146.0km) | 146.0km |
| 15-06 | 59 | 59 | Stage 1Rho - Rho (8.0km) | 8.0km |
| | | Course de la Paix Grand Prix Jeseníky (2.NCUP) |
| 3 | | Klassement |
| 1 | | Punten |
| 11 | | Berg |
| 1 | | Jongeren |
| 01-06 | 9 | 3 | Stage 4Jeseník - Šumperk (118.0km) | 118.0km |
| 31-05 | 4 | 4 | Stage 3Zábřeh - Dlouhé (131.0km) | 131.0km |
| 30-05 | 5 | 4 | Stage 2Uničov - Rýmařov (149.0km) | 149.0km |
| 29-05 | 3 | 3 | Stage 1Krnov - Šternberk (168.0km) | 168.0km |
| 04-05 | 109 | | Lotto Famenne Ardenne Classic (1.1) | 186.0km |
| 03-05 | 9 | | Flèche Ardennaise (1.2) | 174.0km |
| 19-04 | 3 | | Liège-Bastogne-Liège U23 (1.2U) | 175.0km |
| | | Circuit des Ardennes (2.2) |
| 6 | | Klassement |
| 14 | | Punten |
| 4 | | Berg |
| 3 | | Jongeren |
| 13-04 | 27 | 6 | Stage 5Chooz - Charleville-Mézières (160.0km) | 160.0km |
| 12-04 | 7 | 5 | Stage 4Lac de Bairon - Lac des Vieilles Forges (178.0km) | 178.0km |
| 11-04 | 4 | 6 | Stage 3Boulzicourt - Saint-Marceau (172.0km) | 172.0km |
| 10-04 | 39 | 50 | Stage 2Rethel - Rethel (172.0km) | 172.0km |
| 09-04 | 72 | 75 | Stage 1Sedan - Nouvion-sur-Meuse (133.0km) | 133.0km |
| 04-04 | 46 | | La Route Adélie de Vitré (1.1) | 174.0km |
| 02-04 | 27 | | Paris - Camembert (1.1) | 199.0km |
| 19-03 | 26 | | Milano - Torino (1.Pro) | 174.0km |
| 09-03 | 58 | | Grand Prix de la Ville de Lillers Souvenir Bruno Comini (1.2) | 197.0km |
| 08-03 | 2 | | Le Tour des 100 Communes (1.2) | 191.0km |
| 05-03 | 10 | | Trofeo Laigueglia (1.Pro) | 190.0km |
| 02-03 | 19 | | Faun Drome Classic (1.Pro) | 189.0km |
| | | Tour des Alpes-Maritimes (2.1) |
| 20 | | Klassement |
| 9 | | Jongeren |
| 23-02 | 7 | 20 | Stage 2Villefranche-sur-Mer - Vence (131.0km) | 131.0km |
| 22-02 | 21 | 21 | Stage 1Contes - Gourdon (162.0km) | 162.0km |
| 21-02 | 30 | | Classic Var (1.1) | 165.0km |
| 15-02 | 25 | | Vuelta a la Región de Murcia “Costa Cálida” (1.1) | 199.0km |