| # | Rider | Team | Time | Gap |
|---|---|---|---|---|
| 1 | Alexander Kristoff | Uno-X Pro Cycling Team | 04:49:25 | |
| 2 | Jordi Meeus | BORA-hansgrohe | + 00 | |
| 3 | Søren Wærenskjold | Uno-X Pro Cycling Team | + 00 | |
| 4 | Fabio Jakobsen | Soudal Quick-Step | + 00 | |
| 5 | Pavel Bittner | Team dsm-firmenich | + 00 | |
| 6 | Paul Penhoët | Groupama-FDJ | + 00 | |
| 7 | Natnael Tesfazion | Lidl-Trek | + 00 | |
| 8 | Timo Kielich | Alpecin-Deceuninck | + 00 | |
| 9 | Edward Theuns | Lidl-Trek | + 00 | |
| 10 | Tim van Dijke | Jumbo-Visma | + 00 | |
| 11 | Luis Mendonça | Glassdrive / Q8 / Anicolor | + 00 | |
| 12 | Stefan Bissegger | EF Education-EasyPost | + 00 | |
| 13 | Hugo Hofstetter | Team Arkéa-Samsic | + 00 | |
| 14 | Matteo Trentin | UAE Team Emirates | + 00 | |
| 15 | Mathias Vacek | Lidl-Trek | + 00 | |
| 16 | Rui Oliveira | UAE Team Emirates | + 00 | |
| 17 | Tobias Bayer | Alpecin-Deceuninck | + 00 | |
| 18 | Madis Mihkels | Intermarché-Circus-Wanty | + 00 | |
| 19 | Tom Bohli | Tudor Pro Cycling Team | + 00 | |
| 20 | Milan Vader | Jumbo-Visma | + 00 | |
| 21 | Jon Barrenetxea | Caja Rural-Seguros RGA | + 00 | |
| 22 | Daniel Babor | Caja Rural-Seguros RGA | + 00 | |
| 23 | Iuri Leitao | Caja Rural-Seguros RGA | + 00 | |
| 24 | Stefan Küng | Groupama-FDJ | + 00 | |
| 25 | Joao Matias | Tavfer - Ovos Matinados - Mortágua | + 00 | |
| 26 | Petr Kelemen | Tudor Pro Cycling Team | + 00 | |
| 27 | Kobe Goossens | Intermarché-Circus-Wanty | + 00 | |
| 28 | Jai Hindley | BORA-hansgrohe | + 00 | |
| 29 | Charles-etienne Chrétien | Human Powered Health | + 00 | |
| 30 | Michael Mørkøv | Soudal Quick-Step | + 00 | |
| 31 | Owen Geleijn | Jumbo-Visma | + 00 | |
| 32 | Tobias Foss | Jumbo-Visma | + 00 | |
| 33 | Thibault Guernalec | Team Arkéa-Samsic | + 00 | |
| 34 | Mike Teunissen | Intermarché-Circus-Wanty | + 00 | |
| 35 | Elie Gesbert | Team Arkéa-Samsic | + 00 | |
| 36 | Tomas Contte | Aviludo - Louletano - Loulé Concelho | + 00 | |
| 37 | Bauke Mollema | Lidl-Trek | + 00 | |
| 38 | Valentin Madouas | Groupama-FDJ | + 00 | |
| 39 | Miles Scotson | Groupama-FDJ | + 00 | |
| 40 | Owain Doull | EF Education-EasyPost | + 00 | |
| 41 | Iversby Hvideberg Jonas | Team dsm-firmenich | + 00 | |
| 42 | Kristian Aasvold | Human Powered Health | + 00 | |
| 43 | Quinten Hermans | Alpecin-Deceuninck | + 00 | |
| 44 | Filippo Ganna | INEOS Grenadiers | + 00 | |
| 45 | Kasper Asgreen | Soudal Quick-Step | + 00 | |
| 46 | Eduard Prades | Caja Rural-Seguros RGA | + 00 | |
| 47 | Nils Eekhoff | Team dsm-firmenich | + 00 | |
| 48 | Lukasz Owsian | Team Arkéa-Samsic | + 00 | |
| 49 | Jake Stewart | Groupama-FDJ | + 00 | |
| 50 | Gijs van Hoecke | Human Powered Health | + 00 | |
| 51 | Matthew Gibson | Human Powered Health | + 00 | |
| 52 | Joao Almeida | UAE Team Emirates | + 00 | |
| 53 | Sam Oomen | Jumbo-Visma | + 00 | |
| 54 | Dries de Pooter | Intermarché-Circus-Wanty | + 00 | |
| 55 | Simon Guglielmi | Team Arkéa-Samsic | + 00 | |
| 56 | Rui Costa | Intermarché-Circus-Wanty | + 00 | |
| 57 | Kristian Sbaragli | Alpecin-Deceuninck | + 00 | |
| 58 | Matis Louvel | Team Arkéa-Samsic | + 00 | |
| 59 | Nicola Conci | Alpecin-Deceuninck | + 00 | |
| 60 | Oscar Onley | Team dsm-firmenich | + 00 | |
| 61 | Sergio Higuita | BORA-hansgrohe | + 00 | |
| 62 | Thymen Arensman | INEOS Grenadiers | + 00 | |
| 63 | Sebastien Reichenbach | Tudor Pro Cycling Team | + 00 | |
| 64 | Rafael Silva | Efapel Cycling | + 00 | |
| 65 | Rodrigo Caixas | Credibom / LA Alumínios / Marcos Car | + 00 | |
| 66 | Miguel Salgueiro | AP Hotels & Resorts / Tavira / SC Farense | + 00 | |
| 67 | Tiago Antunes | Efapel Cycling | + 00 | |
| 68 | Michal Schlegel | Caja Rural-Seguros RGA | + 00 | |
| 69 | Vicente Hernaiz | Radio Popular - Paredes - Boavista | + 00 | |
| 70 | Simon Pellaud | Tudor Pro Cycling Team | + 00 | |
| 71 | Leangel Linarez | Tavfer - Ovos Matinados - Mortágua | + 00 | |
| 72 | John Degenkolb | Team dsm-firmenich | + 00 | |
| 73 | Remi Cavagna | Soudal Quick-Step | + 00 | |
| 74 | Julius van den Berg | EF Education-EasyPost | + 00 | |
| 75 | Santiago Mesa | ABTF Betão - Feirense | + 00 | |
| 76 | Sergio Martin | Caja Rural-Seguros RGA | + 00 | |
| 77 | Ilan van Wilder | Soudal Quick-Step | + 00 | |
| 78 | Rune Herregodts | Intermarché-Circus-Wanty | + 00 | |
| 79 | Christian Eiking Odd | EF Education-EasyPost | + 00 | |
| 80 | Daniel Martinez | INEOS Grenadiers | + 00 | |
| 81 | Finn Fisher-black | UAE Team Emirates | + 00 | |
| 82 | Xandro Meurisse | Alpecin-Deceuninck | + 00 | |
| 83 | Jose Sousa | Kelly - Simoldes - UDO | + 00 | |
| 84 | Adrián Bustamante | Kelly - Simoldes - UDO | + 00 | |
| 85 | Anders Skaarseth | Uno-X Pro Cycling Team | + 00 | |
| 86 | Gage Hecht | Human Powered Health | + 00 | |
| 87 | Kevin Vermaerke | Team dsm-firmenich | + 00 | |
| 88 | Halland Johannessen Tobias | Uno-X Pro Cycling Team | + 00 | |
| 89 | Anthon Charmig | Uno-X Pro Cycling Team | + 00 | |
| 90 | Francisco Morais | Tavfer - Ovos Matinados - Mortágua | + 00 | |
| 91 | Mark Padun | EF Education-EasyPost | + 00 | |
| 92 | Merhawi Kudus | EF Education-EasyPost | + 00 | |
| 93 | Artem Nych | Glassdrive / Q8 / Anicolor | + 00 | |
| 94 | Hugo Nunes | Radio Popular - Paredes - Boavista | + 00 | |
| 95 | Goncalo Amado | Tavfer - Ovos Matinados - Mortágua | + 00 | |
| 96 | Henrique Casimiro | Efapel Cycling | + 00 | |
| 97 | Laurens de Plus | INEOS Grenadiers | + 00 | |
| 98 | Aloïs Charrin | Tudor Pro Cycling Team | + 00 | |
| 99 | Diogo Barbosa | AP Hotels & Resorts / Tavira / SC Farense | + 00 | |
| 100 | João Medeiros | Credibom / LA Alumínios / Marcos Car | + 00 | |
| 101 | Fabio Oliveira | ABTF Betão - Feirense | + 00 | |
| 102 | Ivo Pinheiro | ABTF Betão - Feirense | + 00 | |
| 103 | Casper Pedersen | Soudal Quick-Step | + 00 | |
| 104 | João Macedo | Credibom / LA Alumínios / Marcos Car | + 00 | |
| 105 | Magnus Cort | EF Education-EasyPost | + 00 | |
| 106 | Guillermo Garcia Janeiro | Radio Popular - Paredes - Boavista | + 00 | |
| 107 | Frederik Wandahl | BORA-hansgrohe | + 00 | |
| 108 | Rasmus Tiller | Uno-X Pro Cycling Team | + 00 | |
| 109 | Warren Barguil | Team Arkéa-Samsic | + 00 | |
| 110 | Roel van Sintmaartensdijk | Intermarché-Circus-Wanty | + 00 | |
| 111 | Afonso Silva | Kelly - Simoldes - UDO | + 00 | |
| 112 | Sasha Weemaes | Human Powered Health | + 00 | |
| 113 | Joaquim Silva | Efapel Cycling | + 00 | |
| 114 | Emanuel Duarte | Efapel Cycling | + 00 | |
| 115 | Luís Gomes | Kelly - Simoldes - UDO | + 00 | |
| 116 | Antonio Barbio | Tavfer - Ovos Matinados - Mortágua | + 00 | |
| 117 | Goncalo Carvalho | Tavfer - Ovos Matinados - Mortágua | + 00 | |
| 118 | Gaspar Goncalves | Efapel Cycling | + 00 | |
| 119 | Nicolas Saenz | Tavfer - Ovos Matinados - Mortágua | + 00 | |
| 120 | Noah Campos | Kelly - Simoldes - UDO | + 00 | |
| 121 | Carlos Oyarzun | Aviludo - Louletano - Loulé Concelho | + 00 | |
| 122 | Samuel Blanco | AP Hotels & Resorts / Tavira / SC Farense | + 00 | |
| 123 | Lewis Askey | Groupama-FDJ | + 00 | |
| 124 | Olivier Le Gac | Groupama-FDJ | + 00 | |
| 125 | Tony Gallopin | Lidl-Trek | + 00 | |
| 126 | Ruben Simao | AP Hotels & Resorts / Tavira / SC Farense | + 00 | |
| 127 | Filippo Baroncini | Lidl-Trek | + 00 | |
| 128 | Michal Kwiatkowski | INEOS Grenadiers | + 00 | |
| 129 | Nils Politt | BORA-hansgrohe | + 00 | |
| 130 | Jacopo Mosca | Lidl-Trek | + 00 | |
| 131 | Pedro Andrade | ABTF Betão - Feirense | + 00 | |
| 132 | Gonçalo Leaça | Credibom / LA Alumínios / Marcos Car | + 00 | |
| 133 | Jonas Koch | BORA-hansgrohe | + 00 | |
| 134 | Ivo Oliveira | UAE Team Emirates | + 00 | |
| 135 | Tom Pidcock | INEOS Grenadiers | + 00 | |
| 136 | Francisco Moreira | ABTF Betão - Feirense | + 28 | + 28 |
| 137 | Marco Haller | BORA-hansgrohe | + 40 | + 40 |
| 138 | Erik Resell | Uno-X Pro Cycling Team | + 54 | + 54 |
| 139 | Tim Declercq | Soudal Quick-Step | + 54 | + 54 |
| 140 | Jimmy Janssens | Alpecin-Deceuninck | + 54 | + 54 |
| 141 | Valter Pereira | AP Hotels & Resorts / Tavira / SC Farense | + 54 | + 54 |
| 142 | Rafael Lourenço | AP Hotels & Resorts / Tavira / SC Farense | + 01:34 | + 01:34 |
| 143 | Chad Haga | Human Powered Health | + 01:36 | + 01:36 |
| 144 | Casper van Uden | Team dsm-firmenich | + 00 | |
| 145 | Cesar Martingil | Aviludo - Louletano - Loulé Concelho | + 01:44 | + 01:44 |
| 146 | Mauricio Moreira | Glassdrive / Q8 / Anicolor | + 02:05 | + 02:05 |
| 147 | Frederico Figueiredo | Glassdrive / Q8 / Anicolor | + 02:05 | + 02:05 |
| 148 | Luis Fernandes | Radio Popular - Paredes - Boavista | + 02:05 | + 02:05 |
| 149 | François Vie | Credibom / LA Alumínios / Marcos Car | + 02:05 | + 02:05 |
| 150 | Diogo Narciso | Credibom / LA Alumínios / Marcos Car | + 02:05 | + 02:05 |
| 151 | Pedro Silva | Glassdrive / Q8 / Anicolor | + 02:05 | + 02:05 |
| 152 | Sergio Garcia | Glassdrive / Q8 / Anicolor | + 02:42 | + 02:42 |
| 153 | Jonathan Castroviejo | INEOS Grenadiers | + 00 | |
| 154 | Alexander Kamp | Tudor Pro Cycling Team | + 03:24 | + 03:24 |
| 155 | Cesar Fonte | Radio Popular - Paredes - Boavista | + 03:24 | + 03:24 |
| 156 | Tiago Leal | Radio Popular - Paredes - Boavista | + 05:03 | + 05:03 |
| 157 | Afonso Eulalio | ABTF Betão - Feirense | + 05:03 | + 05:03 |
| 158 | Fabio Costa | Glassdrive / Q8 / Anicolor | + 05:03 | + 05:03 |
| 159 | Jesus Del Pino | Aviludo - Louletano - Loulé Concelho | + 05:14 | + 05:14 |
| 160 | Helder Goncalves | Kelly - Simoldes - UDO | + 07:52 | + 07:52 |
| 161 | Antonio Ferreira | Kelly - Simoldes - UDO | + 07:52 | + 07:52 |
| 162 | Yesid Pira | Caja Rural-Seguros RGA | + 07:55 | + 07:55 |
| 163 | Miguel Lopes Pedro | Radio Popular - Paredes - Boavista | + 07:55 | + 07:55 |
| 164 | Marc Hirschi | UAE Team Emirates | + 07:55 | + 07:55 |
| 165 | Venceslau Fernandes | AP Hotels & Resorts / Tavira / SC Farense | + 09:16 | + 09:16 |
| 166 | Barry Miller | ABTF Betão - Feirense | + 10:08 | + 10:08 |
| 167 | Andre Ramalho | Credibom / LA Alumínios / Marcos Car | + 12:32 | + 12:32 |
| 168 | Aleksandr Grigorev | Efapel Cycling | + 16:33 | + 16:33 |
| 169 | Daniel Viegas | Aviludo - Louletano - Loulé Concelho | + 18:33 | + 18:33 |
| 170 | Nuno Meireles | Aviludo - Louletano - Loulé Concelho | + 18:33 | + 18:33 |
| 171 | Joel Suter | Tudor Pro Cycling Team | + 19:12 | + 19:12 |