| 20-10 | DNS | | Veneto Classic (1.Pro) | 191.0km |
| 16-10 | DNF | | Giro del Veneto (1.Pro) | 173.0km |
| 06-10 | 61 | | Paris - Tours Espoirs (1.2U) | |
| 28-09 | 58 | | Grand Prix Cerami (1.2) | 159.0km |
| 22-09 | 60 | | Paris-Chauny (1.1) | 197.0km |
| | | Tour de l'Avenir (2.NCUP) |
| 84 | | Klassement |
| 25 | | Berg |
| 24-08 | 88 | 84 | Stage 6 Bobbio Pellice - Colle delle Finestre (120.0km) | 120.0km |
| 23-08 | 78 | 82 | Stage 5Les Karellis - Condove (120.0km) | 120.0km |
| 22-08 | 45 | 82 | Stage 4La Rosière-Montvalezan - Les Karellis (143.0km) | 143.0km |
| 21-08 | 98 | 107 | Stage 3Peisey-Vallandry - La Rosière-Montvalezan (71.0km) | 71.0km |
| 20-08 | 95 | 111 | Stage 2Mouchard - Plateau d'Hauteville (170.0km) | 170.0km |
| 19-08 | 119 | 123 | Stage 1Sarrebourg - Ronchamp (185.0km) | 185.0km |
| 18-08 | 48 | 48 | PrologueSarrebourg - Sarrebourg (7.0km) | 7.0km |
| | | Czech Tour (2.1) |
| 68 | | Klassement |
| 16 | | Jongeren |
| 28-07 | 119 | 68 | Stage 4Šumperk - Šternberk (129.0km) | 129.0km |
| 27-07 | 86 | 55 | Stage 3Moravska Trebova - Dlouhé (131.0km) | 131.0km |
| 26-07 | 43 | 44 | Stage 2Zlin - Pustevny (170.0km) | 170.0km |
| 25-07 | 107 | 107 | Stage 1Prostejov - Ostrava (151.0km) | 151.0km |
| 30-06 | DNS | | National Road Championships - Germany U23 (CN) | 148.0km |
| 23-06 | DNF | | National Road Championships - Germany (CN) | 200.0km |
| 21-06 | 4 | | National Road Championships - Germany TT U23 (CN) | 30.0km |
| | | Giro d'Italia Next Gen (2.2U) |
| 62 | | Klassement |
| 58 | | Punten |
| 16-06 | 88 | 62 | Stage 8Cesena - Forlimpopoli (146.0km) | 146.0km |
| 15-06 | 101 | 55 | Stage 7Montegrotto Terme - Zocca (170.0km) | 170.0km |
| 14-06 | 37 | 55 | Stage 6Borgo Virgilio - Fosse (145.0km) | 145.0km |
| 13-06 | 132 | 103 | Stage 5Bergamo - Cremona (136.0km) | 136.0km |
| 12-06 | 113 | 103 | Stage 4Pertusio - Borgomanero (130.0km) | 130.0km |
| 11-06 | 133 | 116 | Stage 3Verrès - Pian della Mussa (127.0km) | 127.0km |
| 10-06 | 90 | 95 | Stage 2Aymavilles - Saint-Vincent (121.0km) | 121.0km |
| 09-06 | 49 | 49 | Stage 1Aosta - Aosta (11.0km) | 11.0km |
| 26-05 | DNF | | Rund um Köln (1.1) | 194.0km |
| | | Orlen Nations Grand Prix (2.NCUP) |
| 20 | | Klassement |
| 17 | | Berg |
| 19-05 | 23 | 20 | Stage 5Lesko - Arlamów (143.0km) | 143.0km |
| 18-05 | 90 | 20 | Stage 4Bukovina Resort - Jaslo (175.0km) | 175.0km |
| 17-05 | 37 | 21 | Stage 3Tvrdosin - Štrbské Pleso (121.0km) | 121.0km |
| 16-05 | 22 | 20 | Stage 2Prerov - Kohútka (110.0km) | 110.0km |
| 15-05 | 13 | 13 | Stage 1Prostejov - Bouzov (135.0km) | 135.0km |
| 12-05 | DNF | | Boucles de l'Aulne - Châteaulin (1.1) | 181.0km |
| 11-05 | DNF | | Tour du Finistère (1.1) | 199.0km |
| | | Circuit des Ardennes (2.2) |
| 07-04 | DNF | | Stage 4Sedan - Sedan (163.0km) | 163.0km |
| 06-04 | 120 | 116 | Stage 3Charleville-Mézières - Aiglemont (145.0km) | 145.0km |
| 05-04 | 125 | 106 | Stage 2Auvillers-les-Forges - Hardoncelle (167.0km) | 167.0km |
| 04-04 | 58 | 58 | Stage 1Juniville - Asfeld (165.0km) | 165.0km |
| 17-03 | DNF | | Cholet Agglo Tour (1.1) | 205.0km |
| 16-03 | 82 | | Classic Loire Atlantique (1.1) | 182.0km |
| 13-03 | 100 | | Milano - Torino (1.Pro) | 177.0km |
| | | Tour du Rwanda (2.1) |
| 9 | | Klassement |
| 15 | | Berg |
| 25-02 | 23 | 9 | Stage 8Kigali - Kigali (90.0km) | 90.0km |
| 24-02 | 12 | 7 | Stage 7Rukomo - Kayonza (163.0km) | 163.0km |
| 23-02 | 7 | 7 | Stage 6Musanze - Kigali (93.0km) | 93.0km |
| 22-02 | 7 | 6 | Stage 5Musanze - Kinigi (13.0km) | 13.0km |
| 21-02 | 20 | 14 | Stage 4Karongi - Rubavu (92.0km) | 92.0km |
| 20-02 | 8 | 13 | Stage 3Huye - Rusizi (141.0km) | 141.0km |
| 19-02 | 30 | 30 | Stage 2Muhanga - Kibeho (130.0km) | 130.0km |