The Astana Pro rider, who finished in 5:46:02, came around Landa in the sprint to the finish to claim his second stage victory at the tour.
Movistar’s Landa was left with second best while Trek-Segafredo’s Giulio Ciccone finished in third.
Bilbao, Landa and Ciccone were part of a leading group of nine – who also included Richard Carapaz, Vincenzo Nibali, Valentin Madouas, Mikel Nieve, Eddie Dunbar and Amanuel Gebrezgabihier – at 2km remaning.
Carapaz started to set the pace in the final kilomtre with Nibali and teammate Landa right behind. He was attempting to set up a stage victory for Landa.
His efforts enabled Spain’s Landa to lead out the sprint in the final metres but with compatriot Bilbao lurking behind, he lost out on the opportunity to take the win.
In other news, Ecuador’s Carapaz maintains to lead the overall standings in 89:38:28 while Nibali (+1:54) lies second and Landa (+2:53) third.
More results can be viewed below.
Stage 20 results
1. Pello Bilbao (Spa) Astana Pro Team 5:46:02
2. Mikel Landa (Spa) Movistar Team
3. Giulio Ciccone (Ita) Trek-Segafredo +0:00:02
4. Richard Carapaz (Ecu) Movistar Team +0:00:04
5. Vincenzo Nibali (Ita) Bahrain-Merida
6. Tanel Kangert (Est) EF Education First +0:00:15
7. Mikel Nieve (Spa) Mitchelton-Scott
8. Valentin Madouas (Fra) Groupama-FDJ +0:00:25
9. Rafal Majka (Pol) Bora-Hansgrohe +0:00:44
10. Domenico Pozzovivo (Ita) Bahrain-Merida
109. Ryan Gibbons (RSA) Dimension Data +0:40:46
1. Richard Carapaz (Ecu) Movistar Team 89:38:28
2. Vincenzo Nibali (Ita) Bahrain-Merida +0:01:54
3. Mikel Landa (Spa) Movistar Team +0:02:53
4. Primoz Roglic (Slo) Team Jumbo-Visma +0:03:06
5. Bauke Mollema (Ned) Trek-Segafredo +0:05:51
6. Miguel Angel Lopez (Col) Astana Pro Team +0:07:18
7. Rafal Majka (Pol) Bora-Hansgrohe +0:07:28
8. Simon Yates (GBr) Mitchelton-Scott +0:08:01
9. Pavel Sivakov (Rus) Team Ineos +0:09:11
10. Ilnur Zakarin (Rus) Katusha-Alpecin +0:12:50
91. Ryan Gibbons (RSA) Dimension Data +3:38:25