BERLIN — Hoffenheim stunned Bayern Munich 2-0 in the Bundesliga on Saturday, the second consecutive win at home over the defending champion overseen by coach Julian Nagelsmann.

Counterpart Carlo Ancelotti was left pondering how his side lost after 23 efforts at goal.

Meanwhile, 10-man Freiburg halted Borussia Dortmund’s promising start in a 0-0 draw, and Kevin-Prince Boateng earned Eintracht Frankfurt a hard-fought 1-0 win at Borussia Moenchengladbach but couldn’t finish the game due to injury

Bayern dominated the opening half hour but the visitors were caught out by Hoffenheim on a lapse from Mats Hummels.

The ball was already out of play when Hummels belted it high back into Hoffenheim’s half. The Bayern defender turned his back and was jogging back toward his goal when Andrej Kramaric took the throw-in quickly with another ball for Mark Uth to blast inside Manuel Neuer’s near post.

“Andre was really quick, the ballboy, too,” said Uth, who said the ballboy would be rewarded for his speed in providing the second ball to Kramaric.

Bayern again looked more like scoring after the break when Uth scored his second. Nadiem Amiri Amiri combined with Steven Zuber, who pulled the ball back for the Hoffenheim forward to fire inside the left post.

Ancelotti responded by sending on Arjen Robben. Franck Ribery and James Rodriguez followed with just over 10 minutes remaining. All in vain.

“It was an outstanding evening for us. We used the few chances we had,” Uth said.

DORTMUND KNOCKED OVER

Dortmund defenders Marc Bartra and Marcel Schmelzer went off in the first half and are doubtful for the Champions League opener at Tottenham on Wednesday.

Bartra and Schmelzer were victims of a home side which pulled no punches.

French midfielder Yoric Ravet was sent off on his Bundesliga debut for a cynical challenge on Schmelzer after referee Benjamin Cortus consulted with his video assistant. Cortus at first showed a yellow card but TV replays showed Ravet stamped on Schmelzer’s right ankle. Freiburg coach Christian Streich applauded sarcastically, but Schmelzer was unable to continue. He was replaced by new signing Dan-Axel Zagadou.

Down to 10 men, the hosts sat back, stayed compact, and defended with every man they had.

Dortmund is yet to concede a goal after three games but dropped points for the first time.

“I’m disappointed,” Dortmund coach Peter Bosz said. “When you play for an hour with an extra man you have to win.”

BOATENG IS BACK

Boateng fired home from close range in the 13th minute for his first Bundesliga goal since his return to Frankfurt after spells at AC Milan and Las Palmas.

He celebrated with a tribute to Ajax midfielder Abdelhak Nouri, who suffered severe brain damage after collapsing during a friendly match against Werder Bremen in July.

Boateng lifted his jersey to reveal a shirt with “Nouri” written on it: “I don’t know him but the story really moved me.”

The midfielder had to go off early in the second half. He received treatment toward the end of the first after receiving a blow from Jannik Vestergaard’s elbow.

FINNBOGASON ON FIRE

Augsburg defeated Cologne 3-0 thanks to a hat trick from Iceland striker Alfred Finnbogason, and Mainz came from behind to beat visiting Bayer Leverkusen 3-1.

Germany striker Mario Gomez injured himself in Wolfsburg while going for goal after missing the ball and colliding with Hannover goalkeeper Philipp Tschauner in the teams’ 1-1 draw.