| 27-09 | 28 | | UCI World Championship Yorkshire U23 (CM) | 193.0km |
| 22-09 | 111 | | Gooikse Pijl (1.1) | |
| 20-09 | 49 | | Kampioenschap van Vlaanderen (1.1) | 185.0km |
| | | Deutschland Tour (2.HC) |
| 79 | | Klassement |
| 01-09 | 58 | 79 | Stage 4Eisenach - Erfurt (160.0km) | 160.0km |
| 31-08 | 80 | 82 | Stage 3Göttingen - Eisenach (177.0km) | 177.0km |
| 30-08 | 83 | 83 | Stage 2Marburg - Göttingen (199.0km) | 199.0km |
| 29-08 | 62 | 62 | Stage 1Hannover - Halberstadt (167.0km) | 167.0km |
| | | Tour de l'Avenir (2.NCUP) |
| 25-08 | DNS | | Stage 10Saint-Colomban-des-Villards - Le Corbier (78.0km) | 78.0km |
| 24-08 | 59 | 60 | Stage 9Villaroger - Tignes (67.0km) | 67.0km |
| 23-08 | 60 | 57 | Stage 8Brides-les-Bains - Méribel (23.0km) | 23.0km |
| 22-08 | 86 | 60 | Stage 7Grésy-sur-Isere - La Giettaz (103.0km) | 103.0km |
| 20-08 | 67 | 52 | Stage 6Saint-Julien-Chapteuil - Privas (124.0km) | 124.0km |
| 19-08 | 65 | 47 | Stage 5Espalion - Saint-Julien-Chapteuil (158.0km) | 158.0km |
| 18-08 | 1 | 52 | Stage 4Mauriac - Espalion (158.0km) | 158.0km |
| 17-08 | 100 | 81 | Stage 3Montignac-Lascaux - Mauriac (162.0km) | 162.0km |
| 16-08 | | 21 | Stage 2Eymet - Bergerac (32.0km) | 32.0km |
| 15-08 | 124 | 122 | Stage 1Marmande - Marmande (128.0km) | 128.0km |
| 10-08 | 39 | | UEC Road European Championships U23 (CC) | 138.0km |
| | | Kreiz Breizh Elites (2.2) |
| 05-08 | DNF | | Stage 4Guingamp - Rostrenen (171.0km) | 171.0km |
| 04-08 | 35 | 4 | Stage 3Ploërdut - Carhaix (181.0km) | 181.0km |
| 03-08 | 5 | 1 | Stage 2Calanhel - Plouray (181.0km) | 181.0km |
| 02-08 | | 6 | Stage 1Ploumagoar - Ploumagoar (12.0km) | 12.0km |
| 21-07 | 11 | | Tokyo 2020 Test Event (1.2) | |
| 30-06 | 78 | | National Road Championships - Great Britain (CN) | |
| 27-06 | 5 | | National Road Championships - Great Britain TT U23 (CN) | |
| | | Baby Giro (2.2U) |
| 74 | | Klassement |
| 7 | | Punten |
| 23-06 | 59 | 74 | Stage 9Agordo - Passo Fedaia (35.0km) | 35.0km |
| 22-06 | 69 | 76 | Stage 8Rosà - Falcade (134.0km) | 134.0km |
| 21-06 | 1 | 75 | Stage 7Dimaro Folgarida - Levico Terme (153.0km) | 153.0km |
| 20-06 | 45 | 77 | Stage 6Aprica - Aprica (94.0km) | 94.0km |
| 19-06 | 132 | 86 | Stage 5Sorbolo - Passo Maniva (155.0km) | 155.0km |
| 17-06 | 84 | 71 | Stage 4Buonconvento - Vetta Amiata (163.0km) | 163.0km |
| 16-06 | 4 | 25 | Stage 3Sesto Fiorentino - Gaiole in Chianti (145.0km) | 145.0km |
| 15-06 | 122 | 116 | Stage 2Bagno di Romagna - Pescia (174.0km) | 174.0km |
| 14-06 | 126 | 120 | Stage 1Riccione - Santa Sofia (143.0km) | 143.0km |
| 13-06 | 13 | 13 | PrologueRiccione - Riccione (3.0km) | 3.0km |
| 02-06 | 54 | | Paris-Roubaix Espoirs (1.2U) | |
| | | A Travers les Hauts de France (2.2) |
| 3 | | Klassement |
| 1 | | Punten |
| 26-05 | 36 | 3 | Stage 3Petite-Forêt - Pecquencourt (188.0km) | 188.0km |
| 25-05 | 10 | 5 | Stage 2Seclin - Bonningues-lès-Calais (197.0km) | 197.0km |
| 24-05 | 90 | 5 | Stage 1Gavrelle - Épinoy (125.0km) | 125.0km |
| 05-05 | 95 | | Entre Brenne et Montmorillonnais (1.2) | |
| 04-05 | 44 | | L'Etoile d'Or (1.NCUP) | |
| 01-05 | 13 | | Eschborn-Frankfurt U23 (1.2U) | 147.0km |
| 20-04 | 69 | | Arno Wallaard Memorial (1.2) | |
| 13-04 | 18 | | Ronde van Vlaanderen Beloften (1.NCUP) | |
| 31-03 | 23 | | Gent-Wevelgem / Kattekoers-Ieper U23 (1.NCUP) | 173.0km |
| | | Volta ao Alentejo (2.2) |
| 26 | | Klassement |
| 14 | | Punten |
| 24-03 | 20 | 26 | Stage 6Portalegre - Évora (152.0km) | 152.0km |
| 23-03 | 28 | 33 | Stage 4Ponte de Sor - Portalegre (74.0km) | 74.0km |
| 23-03 | 27 | 30 | Stage 5Castelo de Vide - Castelo de Vide (8.0km) | 8.0km |
| 22-03 | 4 | 41 | Stage 3Santiago do Cacém - Mora (176.0km) | 176.0km |
| 21-03 | 66 | 53 | Stage 2Mértola - Odemira (182.0km) | 182.0km |
| 20-03 | 61 | 63 | Stage 1Montemor-o-Novo - Moura (208.0km) | 208.0km |