Nadal, 29, will meet another Italian in Sunday's final, with 32nd-ranked Fabio Fognini beating French youngster Lucas Pouille 6-2, 7-6 (7/2) in the other last-four showdown.
Fognini, seeded eighth, is a familiar foe for the Spaniard, having already beaten Nadal twice this season in Rio de Janeiro and Barcelona.
For Nadal, it will be the 96th final of his career and his third in Hamburg, where he last won the title in 2008.