| # | Date | Start - finish | Distance | Winner | ||
|---|---|---|---|---|---|---|
| 1 | Sa 29 Jun | Firenze — Rimini | 206,0 km | Romain Bardet | View result | |
| 2 | Su 30 Jun | Cesenatico — Bologna | 200,0 km | Kévin Vauquelin | View result | |
| 3 | Mo 1 Jul | Piacenza — Torino | 229,0 km | Biniam Girmay | View result | |
| 4 | Tu 2 Jul | Pinerolo — Valloire | 138,0 km | Tadej Pogačar | View result | |
| 5 | We 3 Jul | Saint-Jean-de-Maurienne — Saint Vulbas | 177,0 km | Mark Cavendish | View result | |
| 6 | Th 4 Jul | Mâcon — Dijon | 163,0 km | Dylan Groenewegen | View result | |
| 7 | Fr 5 Jul | Nuits-Saint-Georges — Gevrey-Chambertin | 25,0 km | Remco Evenepoel | View result | |
| 8 | Sa 6 Jul | Semur-en-Auxois — Colombey-les-Deux-Eglises | 176,0 km | Biniam Girmay | View result | |
| 9 | Su 7 Jul | Troyes — Troyes | 199,0 km | Anthony Turgis | View result | |
| Mo 8 Jul | Restday | |||||
| 10 | Tu 9 Jul | Orléans — Saint-Amand-Montrond | 187,0 km | Jasper Philipsen | View result | |
| 11 | We 10 Jul | Évaux-les-Bains — Le Lioran | 211,0 km | Jonas Vingegaard | View result | |
| 12 | Th 11 Jul | Aurillac — Villeneuve-sur-Lot | 204,0 km | Biniam Girmay | View result | |
| 13 | Fr 12 Jul | Agen — Pau | 171,0 km | Jasper Philipsen | View result | |
| 14 | Sa 13 Jul | Pau — Saint-Lary-Soulan Pla d'Adet | 152,0 km | Tadej Pogačar | View result | |
| 15 | Su 14 Jul | Loudenvielle — Plateau de Beille | 198,0 km | Tadej Pogačar | View result | |
| Mo 15 Jul | Restday | |||||
| 16 | Tu 16 Jul | Gruissan — Nîmes | 187,0 km | Jasper Philipsen | View result | |
| 17 | We 17 Jul | Saint-Paul-Trois-Châteaux — Superdévoluy | 178,0 km | Richard Carapaz | View result | |
| 18 | Th 18 Jul | Gap — Barcelonnette | 179,0 km | Victor Campenaerts | View result | |
| 19 | Fr 19 Jul | Embrun — Isola 2000 | 145,0 km | Tadej Pogačar | View result | |
| 20 | Sa 20 Jul | Nice — Col de la Couillole | 133,0 km | Tadej Pogačar | View result | |
| 21 | Su 21 Jul | Monaco — Nice | 34,0 km | Tadej Pogačar | View result | |