Bayern Munich travelled to Frankfurt, who have enjoyed a very good run of games lately, being the only Bundesliga side to remain unbeaten this year. They were looking to get their fifth straight league win and extend their unbeaten run in the Bundesliga to 11 games.
A win for Hansi Flick's men at the Commerzbank Arena would see them go eight points clear at the top of the table.
Bayern Munich began the game in a surprisingly sluggish manner and seemed more interested in keeping possession than searching for the opening goal.
The hosts looked hungrier and were rewarded with a goal in the 12th minute when Daichi Kamada simply turned home a perfectly-weighted cross from Filip Kostić.
Bayern Munich still opted for the calm approach, but their hosts were not of the same mind as they aggressively fought back to win the ball and repeatedly hit Bayern on the break.
Frankfurt doubled their lead at the half-hour mark after catching Bayern on the break for the umpteenth time in the half.
Amin Younes got the second goal for the hosts with a belter from inside the box to beat Bayern Munich goalkeeper Manuel Neuer.
Bayern Munich came alive after the two goals and upped the tempo, but were denied by an inspired Kevin Trapp in the Frankfurt goal.
Frankfurt capitalized on the acres of space Bayern Munich left behind in search of a goal, and should have made it three but were guilty of wasteful finishing before the half-time whistle.
In the second half, Bayern Munich came out with more intensity and charged at the opposition in search of their first goal.
They were rewarded for their constant probing through Robert Lewandowski less than 10 minutes into the half.
The Pole was on hand to tap-in a cross from Sane after wonderful work from the German.
Bayern Munich did not ease the pressure, but were met with resolute defending from the home side and ultimately fell to their first league defeat in seven games.
Bayern Munich remain top of the league with 49 points but could see their lead cut to just two if second-placed Leipzig win on Sunday.
Frankfurt remain fourth in the league, keeping their European dreams alive.
Bayern Munich Player Ratings
Manuel Neuer - 5/10
The Bayern Munich captain was faultless for both Frankfurt goals, and he did well to prevent the hosts from getting a third.
Niklas Sule - 5/10
Playing in an unfamiliar right-back position, Sule struggled to deal with the ever-lively Kostic and goalscorer Amin Younes, as the pair repeatedly took advantage of his lack of mobility.
He did fairly well going forward and was dominant in the air during corners, but could not direct them goalwards.
Jerome Boateng - 5/10
The Bayern Munich veteran defender was solid occasionally but failed to deal with the pace of Frankfurt's attackers for the most part of the game. He should have done better closing down Kamada in the box for the first goal.
David Alaba - 5/10
Alaba was solid for the most part but struggled to cope with the numerous counters of the home side. He failed to deal with Kostic's cross for the hosts' first goal.
Alphonso Davies - 5/10
The Bayern Munich pacey full-back was his ever-electric self as he constantly drove forward on the left and looked to cause problems.
However, he failed defensively, as he left loads of space behind for the Frankfurt attackers to exploit. He was lucky not to have given away a penalty late in the game.
Joshua Kimmich - 6/10
The Bayern Munich midfield maestro was dominant as usual and repeatedly drove his side forward on the attack. He created a joint team-high five chances and had the most touches and passes on the pitch.
Marc Roca - 5/10
The Spaniard struggled on just his second league start for the Bundesliga giants. Although he was tidy enough in possession, he looked lost during Frankfurt's transitions. He was replaced by Leon Goretzka in the second half.
Leroy Sane - 6.5/10
The best Bayern Munich player on the pitch by a mile. Sane provided the assist for Bayern's goal after some outstanding dribbling on the right, before squaring the ball into the box for a simple tap-in for Lewandowski.
Kingsley Coman - 6/10
Coman was also a vivacious personality for the Bavarians on the afternoon, but he failed to impact the game in any noteworthy form. He got a chance to level the scores midway through the second half, but could only hit his first-time shot straight at Trapp.
Eric Maxim Choupo-Moting - 4/10
The Cameroonian extended his scoreless run to eight games as he looked an inadequate partner to Robert Lewandowski upfront. He was substituted after 82 minutes of an underwhelming display.
Robert Lewandowski - 6/10
Bayern Munich’s go-to man for goals did not disappoint on the afternoon, but his goal proved insufficient. The striker scored his 26th league goal of the campaign with a tap-in from close range to halve the deficit for his team. He could not provide the spark needed for a second, however.
Player ratings for Bayern Munich substitutes
Leon Goretzka - 6/10
The midfielder came on for the second half of the game and provided the much-needed energy to Bayern's midfield.
He was almost flawless as he won duels and quickened the tempo of the game with his relentless probing as he managed 4 shots in his 45 minutes. Should have started the game.
Lucas Hernandez - 5/10
The Frenchman was brought in late in the game to push Alphonso Davies higher up the pitch. Did his bit for the team.
Jamal Musiala - 5.5/10
The 17-year-old replaced Choupo-Moting in the final eight minutes of normal time and looked to have more of an impact on the game than the striker. He completed every action he attempted on the pitch, missing only one pass.
Javi Martinez - 4/10
He came on late and had no impact.