| # | Date | Start - finish | Distance | Winner | ||
|---|---|---|---|---|---|---|
| 1 | Sa 1 Jul | Bilbao — Bilbao | 182,0 km | Adam Yates | View result | |
| 2 | Su 2 Jul | Vitoria-Gasteiz — San Sebastián | 209,0 km | Victor Lafay | View result | |
| 3 | Mo 3 Jul | Amorebieta-Etxano — Bayonne | 185,0 km | Jasper Philipsen | View result | |
| 4 | Tu 4 Jul | Dax — Nogaro | 182,0 km | Jasper Philipsen | View result | |
| 5 | We 5 Jul | Pau — Laruns | 165,0 km | Jai Hindley | View result | |
| 6 | Th 6 Jul | Tarbes — Cauterets | 145,0 km | Tadej Pogačar | View result | |
| 7 | Fr 7 Jul | Mont-de-Marsan — Bordeaux | 170,0 km | Jasper Philipsen | View result | |
| 8 | Sa 8 Jul | Libourne — Limoges | 201,0 km | Mads Pedersen | View result | |
| 9 | Su 9 Jul | Saint-Léonard-de-Noblat — Puy de Dôme | 184,0 km | Michael Woods | View result | |
| Mo 10 Jul | Restday | |||||
| 10 | Tu 11 Jul | Saint-Ours-les-Roches — Issoire | 167,0 km | Pello Bilbao | View result | |
| 11 | We 12 Jul | Clermont-Ferrand — Moulins | 180,0 km | Jasper Philipsen | View result | |
| 12 | Th 13 Jul | Roanne — Belleville-en-Beaujolais | 169,0 km | Ion Izagirre | View result | |
| 13 | Fr 14 Jul | Châtillon-sur-Chalaronne — Grand Colombier | 138,0 km | Michał Kwiatkowski | View result | |
| 14 | Sa 15 Jul | Annemasse — Morzine | 152,0 km | Carlos Rodríguez | View result | |
| 15 | Su 16 Jul | Les Gets — Saint-Gervais Mont Blanc | 180,0 km | Wout Poels | View result | |
| Mo 17 Jul | Restday | |||||
| 16 | Tu 18 Jul | Passy — Combloux | 22,0 km | Jonas Vingegaard | View result | |
| 17 | We 19 Jul | Saint-Gervais Mont Blanc — Courchevel | 166,0 km | Felix Gall | View result | |
| 18 | Th 20 Jul | Moûtiers — Bourg-en-Bresse | 186,0 km | Kasper Asgreen | View result | |
| 19 | Fr 21 Jul | Moirans-en-Montagne — Poligny | 173,0 km | Matej Mohorič | View result | |
| 20 | Sa 22 Jul | Belfort — Le Markstein | 133,0 km | Tadej Pogačar | View result | |
| 21 | Su 23 Jul | Saint-Quentin-en-Yvelines — Parijs | 115,0 km | Jordi Meeus | View result | |