After nine kilometers, four riders cleared the field: Silvan Dillier (Switzerland / BMC), Rémi Cavagna (France / Quick Step), Andrij Hrywko (Ukraine / Astana) and Nicholas Dougall (South Africa / Dimension Data). The group had a lead of no more than one minute. With the exception of Cavagna, all other outliers were set 20 kilometers from the finish. Meanwhile, Cavagna won the last mountain classification 13 kilometers from the finish and Johnathan Lastra (Spain / Caja Rural) attacked from the field and drove up to him. The two were caught again 10 kilometers from the finish and there was a mass sprint. In the mass sprint was Fernando Gaviria (Colombia / Quick Step) before the fastest Dylan Groenewegen (Netherlands / LottoNL). Gaviria took over the overall lead.
After 30 kilometers there was the top group of the day with Silvan Dillier (Switzerland / BMC), Meiyin Wang (China / Bahrain-Merida) and Johnathan Lastra (Spain / Caja Rural). They had a maximum of four minutes ahead. Dillier secured all three sprint and the two mountain classifications on the way. The three outliers were set five kilometers from the finish. Like the day before, the mass sprint came about. Fernando Gaviria (Columbia / Quick Step) won again, ahead of Max Walscheid (Germany / Sunweb). Gaviria thus defended the overall standings.
After a few kilometers, Nuno Bico (Portugal / Movistar), Daniel Oss (Italy / BMC) and Jack Haig (Australia / Orica) pulled away. The group got up to two minutes ahead and was already 80 kilometers from the finish. There were then further attacks, including by Lawson Craddock (USA / Cannondale Drapac) and Matej Mohorič (Slovenia / UAE Team Emirates). The two had a lead of no more than one minute and were five kilometers from the finish. So it came back to the mass sprint. Gaviria won the photo finish ahead of Walscheid. Gaviria retained overall lead.
After ten kilometers, Victor Campenaerts (Belgium / LottoNL), Lennard Hofstede (Netherlands / Sunweb), Pawel Kotschetkow (Russia / Katusha Alpecin) and Antonio Molina (Spain / Caja Rural) pulled away. The leading group was up to seven minutes ahead. However, the outliers of the day were set six kilometers from the finish. At the beginning of the final climb, the overall leader Gaviria lost the connection and gave up the leadership jersey. Nicholas Roche (Ireland / BMC) attacked two kilometers from the finish . Only Tim Wellens and Bauke Mollema (Netherlands / Trek) could follow him. Although Roche won the mountain classification, he could no longer follow Wellens and Mollema as the finish line climbed. The sprint between Wellens and Mollema was won by Wellens, who also took the overall lead.
Only after around 60 kilometers were Daniel Oss (Italy / BMC), William Clarke (Australia / Cannondale Drapac) and Fabricio Ferrari (Uruguay / Caja Rural) able to break away from the peloton and subsequently gain a lead of up to 5:30 minutes. 35 kilometers from the finish in the last mountain classification of the day, Nicholas Roche (Ireland / BMC), Wout Poels (Netherlands / Sky), Bauke Mollema (Netherlands / Trek) and Jesús Herrada (Spain / Movistar) attacked overall leader Tim Wellens (Belgium / Lotto Soudal), who followed the attack and could not be shaken off. The five drove up to Oss, as the other runaways fell back. A few kilometers from the finish, the group was caught up and there was a mass sprint. This was won by Dylan Groenewegen (Netherlands / LottoNL) ahead of Fernando Gaviria (Colombia / Quick Step). Wellens defended the overall lead.
A few kilometers after the start, Daniel Oss (Italy / BMC), Jon Irisarri (Spain / Caja Rural) and Meiyin Wang (China / Bahrain-Merida) pulled away from the field and were up to four minutes ahead. Oss collected the necessary points for the mountain classification on the way and won them. The three outliers were found seven kilometers from the finish. Fernando Gaviria won his fourth stage of this tour in the mass sprint ahead of Niccolò Bonifazio (Italy / Trek). Tim Wellens (Belgium / Lotto Soudal) kept the overall lead and won the entire tour.