The Flames had one goal during a four-game losing streak that ended when Mike Cammalleri scored a power-play goal with 3:30 remaining in the third period.
Jiri Hudler, who scored a second-period goal, passed to Cammalleri in the slot for a one-timed shot that beat goalie Jean-Sebastien Giguere after the Avalanche were penalized for having too many men on the ice.
Cammalleri's goal also snapped the Flames' 0-for-11 drought on the power play.
"We had talked about our power plays as something that needed to be better," Cammalleri said. "To have a chance to win this game, I thought it started with our competitive level on the power play. We won a series of battles on the power play, down low digging out pucks. On the last one, the puck's going to Hudler and we all know how talented Hudler is at finding the open guy, so I just tried to go to an open space and he made a great play.
"It feels very good. It's been a tough little stretch for sure. When things like that happen, it's easy to get negative. The best way to build trust is to get results, so it was nice to get some results tonight."
Flames coach Bob Hartley said he spoke with Hudler regarding his disappointment about not being selected Monday morning to the Czech Republic Olympic team.
"Right before the game we took a little walk with Jiri and I explained to him," Hartley said. "He knows that people sit in the room, there's debate, you get picked, you don't get picked. Obviously everyone wants to be in the Olympics to represent their country, so you're disappointed. But we saw that he's a pro and he did it in a very good way."
The Avalanche won their three previous games and were 3-0-1 in the first four games of a seven-game homestand. It was their first regulation loss at home since Dec. 10 against Phoenix. The Avalanche went 5-0-2 in the previous seven home games.
Avalanche coach Patrick Roy showed more emotion after the game than he had following other defeats. He wasn't happy about the too-many-men penalty or with the play of Giguere, who made 15 saves while losing his fourth consecutive start.
"I thought tonight was a game that should finish 2-1 for us," Roy said. "We should not have given up more than one goal tonight."
When told Giguere said he thought the Flames showed more hunger in front of both nets, Roy snapped.
"Jiggy should have played better tonight," Roy said. "I’m not going to look at our team. We may not have had the jump that we should have, but Jiggy should have been better. He hasn't played well in the past four or five games and he should stand up and say, 'I'm not playing up to what I should.' He needs to be better and we need to have him playing better. Period."
Roy also was concerned because rookie Nathan MacKinnon, who scored two power-play goals in the first period, took a shot on the ankle late in regulation and was having X-rays taken.
"I have no idea (of MacKinnon's status)," he said. "He's getting X-ray’s right now. He got the puck on the ankle at the end of the game. We'll have more details [Tuesday]."
The Avalanche tied the game 3-3 at 9:33 of the third period on a goal by Paul Stastny, his third point of the game. Gabriel Landeskog passed to Stastny, who was alone in front of the Flames net, and he slid a backhanded shot between goalie Karri Ramo's pads.
But Stastny said that he and Matt Duchene "had a little miscommunication" and were responsible for the late penalty.
"That can't happen with five minutes left," he said. "When penalties like that happen, they tend to get scored on."
Joe Colborne and Hudler scored for the Flames 2:28 apart late in the second period to take a 3-2 lead.
Colborne tied the game at 15:10 when he deflected TJ Galiardi's shot over Giguere's right shoulder. The goal was Colborne's first in 18 games.
Hudler scored his team-leading 12th goal at 17:38. Defenseman Mark Giordano took a shot from the left point that hit Hudler, who was with Avalanche defenseman Tyson Barrie in front of the net. The puck dropped to the ice and Hudler poked it across the goal line.
"There is no easy game in this League," Giguere said. "We have to learn this sometimes the hard way. You beat some good teams and then after that, you have a day off and you come up against a team that's behind you in the standings, sometimes it's a little harder to get going. It is disappointing that way. We have to find a way to win those games."
MacKinnon tied the game at 7:17. He was at the left side of the net when he accepted a pass from Stastny, moved in front and slipped the puck under Ramo.
The Stastny-MacKinnon connection clicked again at 14:32 after the Flames were penalized for having too many men on the ice. The Avalanche worked the puck around and Stastny eventually fed MacKinnon just above the right hash marks for a shot that went by Ramo's left pad.
MacKinnon leads all NHL rookies in scoring with 28 points. He has eight goals and two assists in the past 11 games.