Na początku etapu uformowała się ucieczka, w której znaleźli się Luke Rowe (Ineos), Geoffrey Bouchard (AG2R), Hugo Houle (Astana), James Whelan (Education First), do których dołączył po kilkunastu kilometrach Przemysław Kasperkiewicz (reprezentacja Polski). Osiągnęli nawet blisko trzy i pół minuty przewagi nad peleton, który kontrolował zespół Deceuninck - Quick Step.
Na kolarzy czekały trzy premie górskie - w Zębie, na podjeździe pod Krowiarki i Górę Makowską, a także lotna premie w Czarnym Dunajcu. Peleton dogonił ucieczkę na ulicach Krakowa, co oznaczało, że potwierdzą się słowa Rafała Majki, który mówił, że ostatni etap zakończy się sprinterskim finiszem w okolicach stadionu Cracovii.
Na nim najlepszy okazał się Davide Ballerini (Deceuninck - Quick Step), który wyprzedził Pascala Ackermanna (Bora-hansgrohe) i Alberto Dainese (Team Sunweb). Najwyżej sklasyfikowanym z Polaków był Szymon Sajnok (CCC), który zajął 9. miejsce.
Zwycięzcą wyścigu został Remco Evenepoel, który utrzymał bezpieczną przewagę, wypracowaną po szalonym rajdzie na etapie do Bukowiny Tatrzańskiej, nad Jakobem Fuglsangiem i Simonem Yatesem. Na czwartym miejscu wyścig ukończył Rafał Majka, tracąc jedynie 4 sekundy do podium.
Polacy zaznaczyli mocno swoją obecność w tym wyścigu. Patryk Stosz wygrał klasyfikację dla najlepszego górala tegorocznego Tour de Pologne, a Maciej Paterskim został najaktywniejszym zawodnikiem, z kolei klasyfikację dla najlepszych sprinterów wygrał Diego Ulissi.