The Canadian racked up 35 winners over the course of the two-hour, 21 minute match while Zverev, a semifinalist in 2020, dropped to 4-15 against top 20 opponents at Grand Slam events.
Shapovalov produces superior tennis to upset lackluster Zverev
Zverev had a couple of break point opportunities in the beginning of the match, but Shapovalov's serve got him out of trouble and he broke at the first time of asking when the German dumped a forehand into the net.
Leading 3-1, the Canadian continued to play quality tennis and serving for the set at 5-3, he held to love, closing it out with a simple volley to take a one-set lead.
The momentum continued for the underdog as he broke in the opening game of the second set, Zverev again misfiring with his forehand and smashing his racquet in the process.
Out of nowhere, the world number three surged in front, winning five of the next six games to go in front 5-3. He couldn't serve out the set, throwing in a pair of double faults to get broken.
The set would be decided in a tiebreaker and after an exchange of minibreaks, Shapovalov soared ahead 4-1 on the strength of a forehand approach winner.
Ahead 6-2, he double-faulted on his first set point, but on the second, a shanked forehand from the 2020 US Open finalist handed the Canadian a two-set lead and the upset was now well and truly on.
An early break in the third set and Shapovalov went up 2-0 after a Zverev backhand went wide. Holds were exchanged through the remainder of the contest and the Canadian served for the match.
Despite a double-fault, Shapovalov sealed the victory when Zverev sent a final forehand into the net, the Canadian into the final eight at Melbourne Park for the first time.