Pressure is mounting on Bayern head coach Niko Kovac whose side are four points behind Dortmund.
Bayern are winless in their last four games in all competitions and suffered back-to-back league defeats for the first time since May 2015, when they had already won the Bundesliga title.
“We are making too many individual mistakes,” said Kovac. “Everyone is trying, but at the moment we just aren’t bringing it together on the pitch.”
Bayern were 2-0 down after just 16 minutes at the Allianz Arena. Gladbach striker Alassane Plea beautifully curled a long-range shot around the dive of Munich goalkeeper Manuel Neuer on 10 minutes.
The second came six minutes later when Bayern midfielder Thiago Alcantara lost possession near his own box.
Jonas Hofmann pounced on the loose ball and squared for club captain Lars Stindl, minute aking his return after long-term injury, to score and stun the Munich crowd.
Gladbach are now second, three points behind leaders Dortmund who needed a 96th-minute free kick from Alcacer to seal a stunning 4-3 win over Augsburg.
Bayern Munich 0
Moenchengladbach 3 (plea 10, Stindl 16, Herrmann 88)
Borussia Dortmund 4
(Alcacer 62, 80, 90+6, Goetze 84)
(Finnbogason 22, Max 71, Gregoritsch 87)
(Wood 30, 45+1, Bebou 90+1)
VfB Stuttgart 1
Hertha Berlin 0
Fortuna Dusseldorf 0
(Mckennie 48, Burgstaller 53)