El germano tuvo su oportunidad en el desempate del segundo set, pero el canadiense de 19 años superó ese momento para ganar después y colocarse por tercera vez este año en una semifinales (Delray Beach y Madrid).
El ruso Daniil Medvedev, que venció al también canadiense Milos Raonic, sexto favorito y finalista de este torneo en tres ocasiones, por 7-6 (4) y 6-3, será el rival de Shapovalov en la penúltima ronda.
En la otra semifinal se medirán el francés Richard Gasquet, que derrotó al sudafricano Kevin Anderson, segundo cabeza de serie, por 7-6 (6) y 7-6 (4), y el japonés Kei Nishikori, que doblegó al griego Stefanos Tsitsipas, por 6-3 y 6-3.