Schalke had the first chance of the game inside four minutes when a penalty was called for a tackle on Leroy Sane, but Bernd Leno was on-guard to save Klaas-Jan Huntelaar's penalty.
It didn't take long for Schalke to make their dominance count, however, and Eric Maxim Choupo-Moting gave the home-side the lead after 14 minutes.
Leroy Sane then showed composure from a quick counter attack to double Schalke's lead at the break.
The hosts looked well on their way to a comfortable win, but in a space of six minutes, Bayer Leverkusen turned the game upside down. First, Karim Bellarabi sent a pass for Julian Brandt, who finished through Ralf Fahrmann to put the visitors within one.
Two minutes later, a Wendell cross found Bellarabi who somehow squeezed his shot past the goalkeeper to equalize the score.
The momentum was with Bayer Leverkusen, and in the counter attack Javier Chicharito scored his 17th league goal of the season to give Bayer Leverkusen an emphatic win away from home.
With the result, Leverkusen can clinch a place in the Champions League with a victory against Hertha Berlin next week
You can watch Chicharito's goal below:
What a comeback! Chicharito gives Leverkusen a third goal in quick succession. Down 0-2, they now lead Schalke, 3-2! https://t.co/2yrOqPrADH— FOX Soccer (@FOXSoccer) April 23, 2016