Kiprusoff has won 10 starts in a row against St. Louis and ended what had been a three-game winning streak for the Blues.
The only goal during the first two periods came from Calgary's Tom Kostopoulos with 5:15 left in the second.
Roman Horak gave the Flames a 2-0 lead with 7:44 to go in the third, but Alexander Steen scored 12 seconds later to get St. Louis back within one. It was Steen's sixth of the season.
Calgary put the game away when Olli Jokinen scored into an empty net with 1:16 to play.
Brian Elliott stopped 15-of-17 shots for the Blues.