The German, who was widely tipped as one of the favorites for the grand slam, lost 6-3 7-6 (7-5) 6-3 to 14th seed Shapovalov in Melbourne.
It continues Zverev's wait for his maiden grand slam title, having won the gold medal at the Tokyo 2020 Olympic Games last year.
Producing some massive serves in key moments, the Canadian looked impressive throughout.
Having raced into a one-set lead, an important early break point victory in the second set for Shapovalov caused Zverev to take his anger out on his racket, smashing it on the ground until it was thoroughly ruined.
It was actually Zverev who was serving to win the second set with a 5-3 lead, but he produced two double faults which allowed Shapovalov to break back, before he rescued the second set in a tie break later on.
An early break in the third set allowed Shapovalov to control the third set, and at the first time of asking, was able to claim the stunning win when Zverev could only hit a forehand into the net.
Under the hot Australian sun, it took 22-year-old Shapovalov two hours and 21 minutes to complete the upset victory over Zverev.
"I'm happy to pull through and win today again," Shapovalov said after reaching his first career Australian Open quarterfinals.
"It's always better to finish in three ... this is probably the one I least expected to finish in three," he added.
Shapovalov will now face Rafael Nadal in the quarterfinals, after the Spaniard beat Adrian Mannarino in straight sets.
In his hunt for a record-breaking 21 grand slam titles, Nadal had to weather a mammoth 28-minute first set tie break before dispatching Mannarino in the next two sets.
After his victory over Zverev, Shapovalov paid his respects to the 35-year-old.
"It's always an honor to go up against a guy like Rafa," he said.
"It's always fun, it's always going to be a battle against him and yeah, it's going to be a tough one, definitely going to enjoy it."