
Friday, September 12: Stage 19, Rueda - Guijuelo, 161.9 km
Stage 19 map & profile | Stage 19 photos

Jasper Philipsen wins stage 19.
Bill and Carol McGann's book The Story of the Tour de France, 2019: A Year of New Faces is available in both Kindle eBook and audiobook versions. To get your copy, just click on the Amazon link on the right.
Weather at the finish city of Guijuelo at 2:20 PM, local time: 25C (77F), mostly cloudy, with the wind from the northwest at 10 km/hr (6 mph). No rain is forecast.
Rated ascents: None
The stage: Flat stage as a prelude to the final mountain stage. It will be the second-last opportunity for the sprinters, who will have to put their teams to work in order to ensure a sprint to the finish-line. Should a mass escape take place, this could really cause trouble for the peloton.
The race: Here's the race organizer's stage 19 report.
Jasper Philipsen (Alpecin-Deceuninck) has turned into a proper master of sprints in La Vuelta, claiming on Friday his third stage win in this edition. The Belgian star first appeared in 2020, taking one victory. He returned in 2021 and claimed two more. This year marks his third participation in the Spanish Grand Tour, and he has now won three of the four bunch sprints contested so far (finishing 2nd behind Ben Turner in Voiron).
This time, he edged out Mads Pedersen (Lidl-Trek), who has all but secured the green jersey with a 100-point margin over Jonas Vingegaard (Visma-Lease a Bike), the last rider theoretically still able to challenge him in the points classification. Vingegaard contested the intermediate sprint and took 4 bonus seconds, extending his GC lead to 44 seconds over Joao Almeida (UAE Team Emirates-XRG) ahead of the final weekend and Saturday’s gruelling showdown at Bola del Mundo.
The race
A rare respite for the GC contenders? Stage 18 of La Vuelta 25 is flat, with no categorised climb and just 1,117 metres of elevation over 161.9 km of racing between Rueda and Guijuelo. Sprinters eye their first chance to shine since Jasper Philipsen’s victory in Zaragoza (stage 8), and everyone is wary about the wind that may change the scripts on the valley around Salamanca.
2 - 1 = a lone attacker
Already the first attacker on day 15, Jakub Otruba (Caja Rural-Seguros-RGA) sets off as soon as the flag drops. He’s joined by Victor Guernalec (Arkéa-B&B Hotels) but the French rouleur drops back to the bunch, leaving Otruba alone at the front with 145 kilometres to go to Guijuelo.

Just at the official start Jakob Otruba (Caja Rural-Seguros RGA) attacked. He was quickly joined by Victor Guernalec (Arkea-B&B Bikes.). Guernelec soon sat and went back to the pack. 28 kilometers into the stage Otruba had a lead of 2min 35sec.
Jasper Philipsen’s Alpecin-Deceuninck and Elia Viviani's Lotto are tasked with driving the bunch. The gap hits a maximum of 4 minutes after 40 kilometres of racing.
Vingegaard and Philipsen sprint
Otruba still leads the way in Salamanca (intermediate sprint, km 103), but the gap to the bunch is down to a minute. Jonas Vingegaard (Visma-Lease a Bike) comes 2nd on the line to grab 4 bonus seconds and push to 44’’ his GC lead on Joao Almeida (UAE Team Emirates-XRG).
The bunch accelerate again through the wind, and Otruba is caught with 52 km to go. Burgos Burpellet BH’s Mario Aparicio and Sergio Chumil attack 11 km later, but another acceleration by the bunch, powered by Alpecin-Deceuninck and Visma-Lease a Bike, nullifies their move 35 km from the finish.
A fast paced peloton storm Guijuelo with Filippo Ganna (Ineos Grenadiers) driving Ben Turner into the last kilometre. Alpecin-Deceuninck surge past the Grenadiers and Ed Planckaert delivers Philipsen in a perfect position to take his third stage win out of four bunch sprints at La Vuelta 25, ahead of Mads Pedersen, who all but secures the green jersey with a 100-margin on Vingegaard. There are 110 points on offer in the last two stages.
Complete results:
161.9 kilometers raced at an average speed of 42.128 km/hr
| 1 | Jasper Philipsen | Alpecin-Deceuninck | 3hr 50min 35sec |
| 2 | Mads Pedersen | Lidl-Trek | s.t. |
| 3 | Orluis Aular | Movistar Team | s.t. |
| 4 | Jenthe Biermans | Arkea-B&B Hotels | s.t. |
| 5 | Ben Turner | INEOS Grenadiers | s.t. |
| 6 | Arne Marit | Intermarché-Wanty | s.t. |
| 7 | Fabio Christen | Q36.5 Pro Cycling Team | s.t. |
| 8 | Ethan Vernon | Israel-Premier Tech | s.t. |
| 9 | Thibaud Gruel | Groupama-FDJ | s.t. |
| 10 | Jordan Labrosse | Decathlon AG2R La Mondiale | s.t. |
| 11 | Bryan Coquard | Cofidis | s.t. |
| 12 | Huub Artz | Intermarché-Wanty | s.t. |
| 13 | David González | Q36.5 Pro Cycling Team | s.t. |
| 14 | Hugo de la Calle | Burgos Burpellet BH | s.t. |
| 15 | Stanislaw Aniolkowski | Cofidis | s.t. |
| 16 | Thomas Silva | Caja Rural-Seguros RGA | s.t. |
| 17 | Nicolas Vinokurov | XDS Astana Team | s.t. |
| 18 | Patrick Eddy | Team Picnic PostNL | s.t. |
| 19 | Ivo Oliveira | UAE Team Emirates-XRG | s.t. |
| 20 | Edward Planckaert | Alpecin-Deceuninck | s.t. |
| 21 | Joel Nicolau | Caja Rural-Seguros RGA | s.t. |
| 22 | Junior Lecerf | Soudal Quick-Step | s.t. |
| 23 | Kelland O'Brien | Team Jayco-AlUla | s.t. |
| 24 | Harold Tejada | XDS Astana Team | s.t. |
| 25 | Abel Balderstone | Caja Rural-Seguros RGA | s.t. |
| 26 | Alex Molenaar | Caja Rural-Seguros RGA | s.t. |
| 27 | Santiago Buitrago | Bahrain Victorious | s.t. |
| 28 | Nicolò Buratti | Bahrain Victorious | s.t. |
| 29 | Søren Kragh Andersen | Lidl-Trek | s.t. |
| 30 | Martin López | XDS Astana Team | s.t. |
| 31 | Ben Tulett | Team Visma | Lease a Bike | s.t. |
| 32 | Kevin Vermaerke | Team Picnic PostNL | s.t. |
| 33 | Torstein Træen | Bahrain Victorious | s.t. |
| 34 | Victor Langellotti | INEOS Grenadiers | s.t. |
| 35 | Jai Hindley | Red Bull-BORA-hansgrohe | s.t. |
| 36 | Jonas Vingegaard | Team Visma | Lease a Bike | s.t. |
| 37 | Madis Mihkels | EF Education-EasyPost | s.t. |
| 38 | João Almeida | UAE Team Emirates-XRG | s.t. |
| 39 | Elia Viviani | Lotto | s.t. |
| 40 | Bruno Armirail | Decathlon AG2R La Mondiale | s.t. |
| 41 | Julien Bernard | Lidl-Trek | s.t. |
| 42 | Clément Braz Afonso | Groupama-FDJ | s.t. |
| 43 | Matthew Riccitello | Israel-Premier Tech | s.t. |
| 44 | Tom Pidcock | Q36.5 Pro Cycling Team | s.t. |
| 45 | Sepp Kuss | Team Visma | Lease a Bike | s.t. |
| 46 | Jaume Guardeño | Caja Rural-Seguros RGA | s.t. |
| 47 | Louis Meintjes | Intermarché-Wanty | s.t. |
| 48 | Giulio Pellizzari | Red Bull-BORA-hansgrohe | s.t. |
| 49 | Louis Vervaeke | Soudal Quick-Step | s.t. |
| 50 | Sander De Pestel | Decathlon AG2R La Mondiale | s.t. |
| 51 | Rudy Molard | Groupama-FDJ | s.t. |
| 52 | Matteo Jorgenson | Team Visma | Lease a Bike | s.t. |
| 53 | Léo Bisiaux | Decathlon AG2R La Mondiale | s.t. |
| 54 | Max Schachmann | Soudal Quick-Step | s.t. |
| 55 | Eduardo Sepulveda | Lotto | s.t. |
| 56 | Chris Hamilton | Team Picnic PostNL | s.t. |
| 57 | Felix Grossschartner | UAE Team Emirates-XRG | s.t. |
| 58 | Finlay Pickering | Bahrain Victorious | s.t. |
| 59 | Felix Gall | Decathlon AG2R La Mondiale | s.t. |
| 60 | Antonio Tiberi | Bahrain Victorious | s.t. |
| 61 | Damien Howson | Q36.5 Pro Cycling Team | s.t. |
| 62 | Simone Petilli | Intermarché-Wanty | s.t. |
| 63 | Fausto Masnada | XDS Astana Team | s.t. |
| 64 | Gijs Leemreize | Team Picnic PostNL | s.t. |
| 65 | Pierre Thierry | Arkea-B&B Hotels | s.t. |
| 66 | Tim van Dijke | Red Bull-BORA-hansgrohe | s.t. |
| 67 | Marc Soler | UAE Team Emirates-XRG | @ 22sec |
| 68 | Alec Segaert | Lotto | s.t. |
| 69 | Callum Scotson | Decathlon AG2R La Mondiale | s.t. |
| 70 | Mauri Vansevenant | Soudal Quick-Step | s.t. |
| 71 | Jonas Rickaert | Alpecin-Deceuninck | s.t. |
| 72 | Nans Peters | Decathlon AG2R La Mondiale | s.t. |
| 73 | Timo Roosen | Team Picnic PostNL | s.t. |
| 74 | Patrick Gamper | Team Jayco-AlUla | s.t. |
| 75 | Roman Ermakov | Bahrain Victorious | 0:33 |
| 76 | Nickolas Zukowsky | Q36.5 Pro Cycling Team | s.t. |
| 77 | Johannes Staune-Mittet | Decathlon AG2R La Mondiale | s.t. |
| 78 | Mikel Landa | Soudal Quick-Step | s.t. |
| 79 | Dion Smith | Intermarché-Wanty | s.t. |
| 80 | Amanuel Ghebreigzabhier | Lidl-Trek | s.t. |
| 81 | Gal Glivar | Alpecin-Deceuninck | s.t. |
| 82 | Andrea Bagioli | Lidl-Trek | s.t. |
| 83 | Christopher Juul-Jensen | Team Jayco-AlUla | s.t. |
| 84 | Brieuc Rolland | Groupama-FDJ | s.t. |
| 85 | Léandre Lozouet | Arkea-B&B Hotels | s.t. |
| 86 | Giovanni Aleotti | Red Bull-BORA-hansgrohe | s.t. |
| 87 | Jake Stewart | Israel-Premier Tech | 0:51 |
| 88 | Pier-André Côté | Israel-Premier Tech | 0:55 |
| 89 | Nadav Raisberg | Israel-Premier Tech | 0:58 |
| 90 | Filippo Ganna | INEOS Grenadiers | 1:08 |
| 91 | Dries De Pooter | Intermarché-Wanty | s.t. |
| 92 | Bob Jungels | INEOS Grenadiers | s.t. |
| 93 | Jasper De Buyst | Lotto | 1:18 |
| 94 | Oscar Riesebeek | Alpecin-Deceuninck | s.t. |
| 95 | Mathijs Paasschens | Bahrain Victorious | s.t. |
| 96 | José Luis Faura | Burgos Burpellet BH | 1:26 |
| 97 | Jakub Otruba | Caja Rural-Seguros RGA | s.t. |
| 98 | Sergio Samitier | Cofidis | s.t. |
| 99 | Iván García Cortina | Movistar Team | s.t. |
| 100 | Edward Dunbar | Team Jayco-AlUla | s.t. |
| 101 | Wout Poels | XDS Astana Team | s.t. |
| 102 | Daan Hoole | Lidl-Trek | s.t. |
| 103 | Carlos Verona | Lidl-Trek | s.t. |
| 104 | Jack Haig | Bahrain Victorious | 1:56 |
| 105 | Michal Kwiatkowski | INEOS Grenadiers | s.t. |
| 106 | Finn Fisher-Black | Red Bull-BORA-hansgrohe | s.t. |
| 107 | Giulio Ciccone | Lidl-Trek | 2:13 |
| 108 | Jesus Herrada | Cofidis | s.t. |
| 109 | Marco Frigo | Israel-Premier Tech | s.t. |
| 110 | Bjoern Koerdt | Team Picnic PostNL | s.t. |
| 111 | Stefan Küng | Groupama-FDJ | s.t. |
| 112 | Mario Aparicio | Burgos Burpellet BH | s.t. |
| 113 | Remi Cavagna | Groupama-FDJ | s.t. |
| 114 | Victor Guernalec | Arkea-B&B Hotels | s.t. |
| 115 | Magnus Sheffield | INEOS Grenadiers | s.t. |
| 116 | Emanuel Buchmann | Cofidis | s.t. |
| 117 | Wilco Kelderman | Team Visma | Lease a Bike | s.t. |
| 118 | Nico Denz | Red Bull-BORA-hansgrohe | s.t. |
| 119 | Matteo Sobrero | Red Bull-BORA-hansgrohe | s.t. |
| 120 | Ben Zwiehoff | Red Bull-BORA-hansgrohe | s.t. |
| 121 | Juan Martinez | Team Picnic PostNL | s.t. |
| 122 | Markel Beloki | EF Education-EasyPost | s.t. |
| 123 | Alessandro Verre | Arkea-B&B Hotels | s.t. |
| 124 | Sergio Chumil | Burgos Burpellet BH | s.t. |
| 125 | Michel Hessmann | Movistar Team | s.t. |
| 126 | James Shaw | EF Education-EasyPost | 2:35 |
| 127 | David Gaudu | Groupama-FDJ | 2:53 |
| 128 | Louis Rouland | Arkea-B&B Hotels | s.t. |
| 129 | Jefferson Cepeda | Movistar Team | s.t. |
| 130 | Jan Hirt | Israel-Premier Tech | s.t. |
| 131 | Marcel Camprubí | Q36.5 Pro Cycling Team | s.t. |
| 132 | Lukas Nerurkar | EF Education-EasyPost | 2:59 |
| 133 | Carlos Canal | Movistar Team | 3:20 |
| 134 | Lars Craps | Lotto | 3:27 |
| 135 | Tobias Bayer | Alpecin-Deceuninck | s.t. |
| 136 | Luca Van Boven | Intermarché-Wanty | s.t. |
| 137 | Nicola Conci | XDS Astana Team | 3:44 |
| 138 | Juan Ayuso | UAE Team Emirates-XRG | 4:47 |
| 139 | Lorenzo Fortunato | XDS Astana Team | s.t. |
| 140 | Mikkel Bjerg | UAE Team Emirates-XRG | s.t. |
| 141 | Jonas Gregaard | Lotto | s.t. |
| 142 | Joan Bou | Caja Rural-Seguros RGA | s.t. |
| 143 | Kamiel Bonneu | Intermarché-Wanty | 5:13 |
| 144 | Liam Slock | Lotto | 5:55 |
| 145 | Dylan van Baarle | Team Visma | Lease a Bike | 6:13 |
| 146 | Brandon Rivera | INEOS Grenadiers | 6:34 |
| 147 | Egan Bernal | INEOS Grenadiers | s.t. |
| 148 | David de la Cruz | Q36.5 Pro Cycling Team | 7:06 |
| 149 | Jardi Van Der Lee | EF Education-EasyPost | s.t. |
| 150 | Jay Vine | UAE Team Emirates-XRG | 8:04 |
| 151 | Domen Novak | UAE Team Emirates-XRG | s.t. |
| 152 | Sean Quinn | EF Education-EasyPost | s.t. |
| 153 | Anders Foldager | Team Jayco-AlUla | 12:02 |
GC after stage 19:
2,875.3 kilometers raced so far at an average speed of 41.694 km/hr
| 1 | Jonas Vingegaard | Team Visma | Lease a Bike | 68hr 57min 44sec |
| 2 | João Almeida | UAE Team Emirates-XRG | @ 44sec |
| 3 | Tom Pidcock | Q36.5 Pro Cycling Team | 2:43 |
| 4 | Jai Hindley | Red Bull-BORA-hansgrohe | 3:22 |
| 5 | Giulio Pellizzari | Red Bull-BORA-hansgrohe | 4:23 |
| 6 | Matthew Riccitello | Israel-Premier Tech | 5:21 |
| 7 | Felix Gall | Decathlon AG2R La Mondiale | 5:24 |
| 8 | Sepp Kuss | Team Visma | Lease a Bike | 7:30 |
| 9 | Torstein Træen | Bahrain Victorious | 7:46 |
| 10 | Matteo Jorgenson | Team Visma | Lease a Bike | 10:21 |
| 11 | Junior Lecerf | Soudal Quick-Step | 12:28 |
| 12 | Harold Tejada | XDS Astana Team | 15:49 |
| 13 | Abel Balderstone | Caja Rural-Seguros RGA | 24:51 |
| 14 | Jaume Guardeño | Caja Rural-Seguros RGA | 26:24 |
| 15 | Santiago Buitrago | Bahrain Victorious | 34:23 |
| 16 | Louis Meintjes | Intermarché-Wanty | 36:04 |
| 17 | Kevin Vermaerke | Team Picnic PostNL | 40:10 |
| 18 | Egan Bernal | INEOS Grenadiers | 41:25 |
| 19 | Bruno Armirail | Decathlon AG2R La Mondiale | 42:06 |
| 20 | Giulio Ciccone | Lidl-Trek | 46:56 |
| 21 | Edward Dunbar | Team Jayco-AlUla | 52:15 |
| 22 | Marc Soler | UAE Team Emirates-XRG | 52:52 |
| 23 | Martin López | XDS Astana Team | 53:30 |
| 24 | Rudy Molard | Groupama-FDJ | 54:51 |
| 25 | Ben Tulett | Team Visma | Lease a Bike | 1:00:18 |
| 26 | Felix Grossschartner | UAE Team Emirates-XRG | 1:02:17 |
| 27 | Mikel Landa | Soudal Quick-Step | 1:15:55 |
| 28 | Damien Howson | Q36.5 Pro Cycling Team | 1:16:17 |
| 29 | Marco Frigo | Israel-Premier Tech | 1:19:21 |
| 30 | Finlay Pickering | Bahrain Victorious | 1:20:22 |
| 31 | Jefferson Cepeda | Movistar Team | 1:21:20 |
| 32 | Sergio Samitier | Cofidis | 1:24:02 |
| 33 | Jay Vine | UAE Team Emirates-XRG | 1:26:44 |
| 34 | Julien Bernard | Lidl-Trek | 1:30:05 |
| 35 | Louis Vervaeke | Soudal Quick-Step | 1:32:58 |
| 36 | Clément Braz Afonso | Groupama-FDJ | 1:33:50 |
| 37 | Johannes Staune-Mittet | Decathlon AG2R La Mondiale | 1:34:25 |
| 38 | Wout Poels | XDS Astana Team | 1:35:26 |
| 39 | Brieuc Rolland | Groupama-FDJ | 1:35:49 |
| 40 | Andrea Bagioli | Lidl-Trek | 1:37:58 |
| 41 | Fausto Masnada | XDS Astana Team | 1:45:47 |
| 42 | Lorenzo Fortunato | XDS Astana Team | 1:48:07 |
| 43 | Callum Scotson | Decathlon AG2R La Mondiale | 1:48:40 |
| 44 | Pierre Thierry | Arkea-B&B Hotels | 1:49:03 |
| 45 | Antonio Tiberi | Bahrain Victorious | 1:50:09 |
| 46 | Bob Jungels | INEOS Grenadiers | 1:50:19 |
| 47 | Jan Hirt | Israel-Premier Tech | 1:54:16 |
| 48 | Gijs Leemreize | Team Picnic PostNL | 1:57:27 |
| 49 | Léo Bisiaux | Decathlon AG2R La Mondiale | 1:57:55 |
| 50 | Markel Beloki | EF Education-EasyPost | 1:58:56 |
| 51 | Ben Zwiehoff | Red Bull-BORA-hansgrohe | 2:02:16 |
| 52 | Victor Langellotti | INEOS Grenadiers | 2:03:38 |
| 53 | José Luis Faura | Burgos Burpellet BH | 2:04:22 |
| 54 | Sander De Pestel | Decathlon AG2R La Mondiale | 2:06:17 |
| 55 | Chris Hamilton | Team Picnic PostNL | 2:06:35 |
| 56 | Juan Martinez | Team Picnic PostNL | 2:06:49 |
| 57 | Giovanni Aleotti | Red Bull-BORA-hansgrohe | 2:10:16 |
| 58 | Carlos Canal | Movistar Team | 2:10:17 |
| 59 | Carlos Verona | Lidl-Trek | 2:14:20 |
| 60 | Lars Craps | Lotto | 2:15:24 |
| 61 | Magnus Sheffield | INEOS Grenadiers | 2:16:24 |
| 62 | Eduardo Sepulveda | Lotto | 2:21:48 |
| 63 | Thomas Silva | Caja Rural-Seguros RGA | 2:23:55 |
| 64 | James Shaw | EF Education-EasyPost | 2:25:00 |
| 65 | Stefan Küng | Groupama-FDJ | 2:25:42 |
| 66 | Hugo de la Calle | Burgos Burpellet BH | 2:26:10 |
| 67 | Sean Quinn | EF Education-EasyPost | 2:27:02 |
| 68 | Mauri Vansevenant | Soudal Quick-Step | 2:27:25 |
| 69 | Finn Fisher-Black | Red Bull-BORA-hansgrohe | 2:28:46 |
| 70 | Brandon Rivera | INEOS Grenadiers | 2:29:10 |
| 71 | Juan Ayuso | UAE Team Emirates-XRG | 2:29:36 |
| 72 | Michel Hessmann | Movistar Team | 2:30:42 |
| 73 | Jack Haig | Bahrain Victorious | 2:31:10 |
| 74 | Alex Molenaar | Caja Rural-Seguros RGA | s.t. |
| 75 | Wilco Kelderman | Team Visma | Lease a Bike | 2:31:34 |
| 76 | David González | Q36.5 Pro Cycling Team | 2:32:52 |
| 77 | Max Schachmann | Soudal Quick-Step | 2:33:10 |
| 78 | Joan Bou | Caja Rural-Seguros RGA | 2:33:40 |
| 79 | Nico Denz | Red Bull-BORA-hansgrohe | 2:33:42 |
| 80 | Michal Kwiatkowski | INEOS Grenadiers | 2:33:53 |
| 81 | Jesus Herrada | Cofidis | 2:37:11 |
| 82 | Roman Ermakov | Bahrain Victorious | 2:37:18 |
| 83 | Nicola Conci | XDS Astana Team | 2:39:13 |
| 84 | Nans Peters | Decathlon AG2R La Mondiale | 2:41:44 |
| 85 | Bjoern Koerdt | Team Picnic PostNL | 2:43:38 |
| 86 | Sergio Chumil | Burgos Burpellet BH | 2:44:56 |
| 87 | Gal Glivar | Alpecin-Deceuninck | 2:45:14 |
| 88 | Orluis Aular | Movistar Team | 2:46:24 |
| 89 | Jordan Labrosse | Decathlon AG2R La Mondiale | 2:47:35 |
| 90 | Alec Segaert | Lotto | 2:48:42 |
| 91 | Mathijs Paasschens | Bahrain Victorious | 2:51:15 |
| 92 | David de la Cruz | Q36.5 Pro Cycling Team | 2:51:45 |
| 93 | Nicolas Vinokurov | XDS Astana Team | 2:51:57 |
| 94 | Kelland O'Brien | Team Jayco-AlUla | 2:52:26 |
| 95 | Jonas Rickaert | Alpecin-Deceuninck | 2:53:41 |
| 96 | Jakub Otruba | Caja Rural-Seguros RGA | 2:53:57 |
| 97 | David Gaudu | Groupama-FDJ | 2:55:06 |
| 98 | Simone Petilli | Intermarché-Wanty | 2:55:27 |
| 99 | Jonas Gregaard | Lotto | 2:55:28 |
| 100 | Thibaud Gruel | Groupama-FDJ | 2:55:38 |
| 101 | Lukas Nerurkar | EF Education-EasyPost | 2:56:11 |
| 102 | Emanuel Buchmann | Cofidis | 2:56:31 |
| 103 | Patrick Gamper | Team Jayco-AlUla | 3:00:38 |
| 104 | Ivo Oliveira | UAE Team Emirates-XRG | 3:00:39 |
| 105 | Pier-André Côté | Israel-Premier Tech | 3:02:53 |
| 106 | Jardi Van Der Lee | EF Education-EasyPost | 3:03:57 |
| 107 | Iván García Cortina | Movistar Team | s.t. |
| 108 | Mario Aparicio | Burgos Burpellet BH | 3:07:18 |
| 109 | Louis Rouland | Arkea-B&B Hotels | 3:09:21 |
| 110 | Christopher Juul-Jensen | Team Jayco-AlUla | 3:12:49 |
| 111 | Huub Artz | Intermarché-Wanty | 3:12:51 |
| 112 | Nicolò Buratti | Bahrain Victorious | 3:13:21 |
| 113 | Luca Van Boven | Intermarché-Wanty | 3:13:49 |
| 114 | Marcel Camprubí | Q36.5 Pro Cycling Team | 3:14:28 |
| 115 | Léandre Lozouet | Arkea-B&B Hotels | 3:15:11 |
| 116 | Alessandro Verre | Arkea-B&B Hotels | 3:15:44 |
| 117 | Nickolas Zukowsky | Q36.5 Pro Cycling Team | 3:15:51 |
| 118 | Victor Guernalec | Arkea-B&B Hotels | 3:17:35 |
| 119 | Remi Cavagna | Groupama-FDJ | 3:18:17 |
| 120 | Edward Planckaert | Alpecin-Deceuninck | 3:19:19 |
| 121 | Mads Pedersen | Lidl-Trek | 3:19:58 |
| 122 | Joel Nicolau | Caja Rural-Seguros RGA | 3:23:02 |
| 123 | Matteo Sobrero | Red Bull-BORA-hansgrohe | 3:24:05 |
| 124 | Dion Smith | Intermarché-Wanty | 3:24:36 |
| 125 | Kamiel Bonneu | Intermarché-Wanty | 3:24:40 |
| 126 | Madis Mihkels | EF Education-EasyPost | 3:26:05 |
| 127 | Jake Stewart | Israel-Premier Tech | 3:32:11 |
| 128 | Tobias Bayer | Alpecin-Deceuninck | 3:32:59 |
| 129 | Fabio Christen | Q36.5 Pro Cycling Team | 3:35:34 |
| 130 | Amanuel Ghebreigzabhier | Lidl-Trek | 3:36:28 |
| 131 | Bryan Coquard | Cofidis | 3:37:20 |
| 132 | Ben Turner | INEOS Grenadiers | 3:37:32 |
| 133 | Dries De Pooter | Intermarché-Wanty | 3:38:37 |
| 134 | Filippo Ganna | INEOS Grenadiers | 3:40:03 |
| 135 | Liam Slock | Lotto | 3:40:37 |
| 136 | Dylan van Baarle | Team Visma | Lease a Bike | 3:42:04 |
| 137 | Mikkel Bjerg | UAE Team Emirates-XRG | 3:43:40 |
| 138 | Timo Roosen | Team Picnic PostNL | 3:44:05 |
| 139 | Tim van Dijke | Red Bull-BORA-hansgrohe | 3:44:24 |
| 140 | Jasper De Buyst | Lotto | 3:46:09 |
| 141 | Nadav Raisberg | Israel-Premier Tech | 3:54:54 |
| 142 | Ethan Vernon | Israel-Premier Tech | 3:55:54 |
| 143 | Jenthe Biermans | Arkea-B&B Hotels | 3:56:26 |
| 144 | Domen Novak | UAE Team Emirates-XRG | 3:57:07 |
| 145 | Jasper Philipsen | Alpecin-Deceuninck | 3:58:02 |
| 146 | Arne Marit | Intermarché-Wanty | 3:59:50 |
| 147 | Søren Kragh Andersen | Lidl-Trek | 4:06:06 |
| 148 | Daan Hoole | Lidl-Trek | 4:07:11 |
| 149 | Anders Foldager | Team Jayco-AlUla | 4:08:55 |
| 150 | Elia Viviani | Lotto | 4:09:26 |
| 151 | Patrick Eddy | Team Picnic PostNL | 4:17:06 |
| 152 | Stanislaw Aniolkowski | Cofidis | 4:19:39 |
| 153 | Oscar Riesebeek | Alpecin-Deceuninck | 4:31:45 |
Stage 19 map & profile:

Stage 19 map

Stage 19 profile. No rated ascents.
Stage 19 photos by Fotoreporter Sirotti:

INEOS Grenadier riders head to the start. That should be Filippo Ganna on the right.

The scene near the start line.

Mads Pedersen signs autographs

Racing across dry countryside in northern Spain.

The pack approaches the finish line.

Jasper Philipsen is first to the line.

Jasper Philipsen celebrates his stage win.

Jonas Vingegaard was 36th in the stage, in the middle of the front group.

Stage winner Jasper Philipsen

GC leader Jonas Vingegaard has just two more stages to go.