La troisième étape de cette 109e édition du Tour de France relie Vejle à Sønderborg, sur une distance de 182 kilomètres. Le parcours se déroule intégralement dans le Jutland, soit la partie continentale du Danemark. Au départ, le tracé effectue une boucle de plus de vingt kilomètres autour de la ville départ, avant de prendre la direction de Kolding, de Haderslev et de Åbenrå. Les vingt derniers kilomètres retrouvent le littoral danois. Arrivant de l'ouest, l'arrivée à Sønderborg s'effectue depuis l'est.
Trois ascensions répertoriées jonchent le parcours : la côte de Koldingvej (1,1 km à 3,4 %, 4e catégorie), la côte de Heljsminde Strand (0,8 km à 5,5 %, 4e catégorie) et la côte de Genner Strand (1,7 km à 3,4 %, 4e catégorieC). Le sprint intermédiaire prend place à Christiansfeld (km 90,5).
Dès le kilomètre zéro, le Danois Magnus Cort Nielsen (EF Education-EasyPost) fait honneur à son maillot à pois en prenant l'échappée. En solitaire, il passe en tête au sommet de la côte de Koldingvej (1,1 km à 3,4 %, 4e catégorie), avec une avance de cinq minutes et quarante-trois secondes sur le peloton.
Au passage dans Kolding, ville chère à Kasper Asgreen (Quick-Step Alpha Vinyl), le maillot à pois compte plus de trois minutes et trente secondes d'avance sur le peloton. Au sommet de la côte de Heljsminde Strand (0,8 km à 5,5 %, 4e catégorie), Cort Nielsen conforte son maillot ; le peloton compte un débours de trois minutes et vingt-cinq secondes. Au sprint intermédiaire de Christiansfeld (km 90,5), le Danois précède le peloton d'une minute et trente secondes, dans lequel le Belge Wout van Aert (Jumbo-Visma) devance le Néerlandais Fabio Jakobsen (Quick-Step Alpha Vinyl).
Au passage dans Haderslev, le coureur isolé en tête possède deux minutes d'avance sur le peloton. Au sommet de la côte de Genner Strand (1,7 km à 3,4 %, 4e catégorie), l'écart continue à se réduire, avec une minute et dix-huit secondes. Il décide de se relever et est repris par le peloton à cinquante-deux kilomètres de l'arrivée.
Malgré une chute à dix kilomètres de l'arrivée qui scinde le peloton en deux, la victoire d'étape au sprint reste inévitable. Dans un final sinueux, les trains de chaque équipe se mettent en place, quatre sprinteurs se retrouvent à la photo-finish : Wout van Aert, le Belge Jasper Philipsen (Alpecin-Deceuninck), le Néerlandais Dylan Groenewegen (BikeExchange Jayco) et le Slovaque Peter Sagan (TotalEnergies). C'est finalement le Néerlandais qui s'impose devant le maillot jaune.
Au niveau des différents classements : Wout van Aert conserve les maillots jaune et vert, Cort Nielsen le maillot à pois, le Slovène Tadej Pogačar (UAE Emirates) le maillot blanc et la Jumbo-Visma reste en tête au classement par équipes. Le prix de la combativité revient à Magnus Cort Nielsen.