Matt Duchene scored into an empty net with 1.9 seconds to play in the third period to secure the Avalanche's 13th win in 15 games.
The Flames didn't look like a team that played Thursday, or one playing the final game of a four-game road trip that had lost eight of its previous 11.
"Give them a lot of credit," Avalanche coach Patrick Roy said. "It's a team that works really hard. For a back-to-back game I thought they had great legs. They were skating well. At the same time, I thought we played a good game too."
The Avalanche were determined to rebound from a 6-4 loss to the Nashville Predators on Wednesday, when they made more defensive mistakes than in any game this season.
"It's big. That was a big game for us," said goalie Jean-Sebastien Giguere, who made 30 saves Friday, including a tough one in tight against Flames forward Jiri Hudler with 2:35 left in the third period, for his fifth win in as many starts. "After going 12-1 and you lose a game, it would be easy to go into bad habits. We should be pretty happy with this."
The Avalanche built leads of 2-0 and 3-1, but the Flames kept coming back and were within 3-2 on two goals by Mike Cammalleri.
"This League, it's not a feel-good League," Flames coach Bob Hartley said. "Moral victories do not exist, you need to put points on the board."
The Avalanche killed off a Paul Stastny holding penalty that began with 35 seconds remaining in the second period and carried into the third. Giguere made 10 third-period saves, and his teammates blocked six shots to prevent the Flames from tying the score as they buzzed around his net.
"They kind of took it to us for a lot of the game, actually," said Avalanche forward John Mitchell, who gave Colorado a 3-1 lead at 7:16 of the second period with his first goal since the Oct. 2 season opener. "But these are games that we have to learn to win. You're going to get up and you might not deserve to be up, but you have to bend and not break and play smart."
"We had a little bit of offensive-zone pressure and I just tried to find a little quiet area in the slot," Mitchell said. "I was just kind of standing there and [MacKinnon] came around and we made eye contact and he got me the puck. I just tried to get it off as quick as I could."
Cammalleri made it 3-2 at 9:46 with his fourth goal in four games. Hudler got Mikael Backlund's pass behind the Avalanche net, moved to the right side and slipped the puck to Cammalleri for a chip shot behind Giguere.
Cammalleri nearly scored again at 17:37 from in close after he received a pass from Hudler, but Giguere came up with a big stop.
"Our opponent has been rated near the top of the League and is earning a lot of respect around the League, and there's reasons for that," Cammalleri said. "They've performed well, so you can't spot anybody a lead, let alone some of these teams who are playing really well.”
The Avalanche made it 2-0 at 1:09 of the second period when Stastny scored during a two-man advantage for his fifth goal in the past five games. David Jones and Backlund were in the penalty box for separate tripping calls when Colorado defenseman Erik Johnson fired a puck off the end boards. It came to Stastny near the right post and he flipped it by Ramo.
The Avalanche went 1-for-15 on power plays in the previous six games.
"It just came to me and I tried to take my time," Stastny said. "I didn't want to rush it."
Cammalleri, who had seven shots, scored his first goal at 6:07, connecting against Giguere from the base of the right circle after taking a pass from Backlund.
Ramo made 23 saves.
"We got another great effort," Hartley said. "I feel sorry for them. We wasted a good effort. A couple of mistakes in our own zone, but we carried the play and we played a pretty solid road game. We had some real bad turnovers that ended up in our net. No one does it on purpose, but it's a game of mistakes."