Frederik Andersen made 31 saves for the Maple Leafs (8-4-0), who had won two in a row and were 7-2-0 in their previous nine games.
"I think just all around we didn't play very well," center John Tavares said. "We just didn't execute and just got away from some of the things we do well. They came out hard, ready to play and took advantage of our mistakes."
The Flames outshot the Maple Leafs 12-4 in the first period and 24-15 through the second.
"I thought we were great defensively," Calgary captain Mark Giordano said. "Honestly, they're a great team, we know what they've been doing all year, but they had one good shift in the second at the end, and until they got those power plays late, I think we were doing a good job of shutting them down."
Asked whether it was their best defensive game, Flames coach Bill Peters said, "I agree with that, but I thought we were pretty tight against Washington too. Both these teams, Washington and Toronto, have a lot of high-end skill, so if you're not structured and committed to playing away from the puck and doing it right, they can hurt you and hurt you in a hurry.
"So if our group can wrap their head around the fact that we've got to check and be proud about the way we play in our defensive zone, I think we have a chance to be real good."
Monahan gave the Flames a 1-0 lead on the power play at 5:39 of the third when he scored from the slot on the rebound of a Lindholm shot.
Lindholm one-timed a pass from Johnny Gaudreau in the slot to put Calgary up 2-0 at 6:34. It was his third goal in four games.
The Maple Leafs had a 5-on-3 power play for 1:09 beginning at 14:57 when Giordano was called for interference, and Nazem Kadri scored to make it 2-1 at 16:07, one second after Matthew Tkachuk's holding penalty ended. Kadri put in a cross-crease pass from Mitchell Marner at the side of the net for his third goal in as many games.