Chris Martin notched his eighth goal of the season to level the game after a training ground corner routine allowed him to nod past Simon Moore just after the hour mark.
However, Viktor Gyokeres won the game for the away side with minutes left on the clock as he slid the ball home to send the away end into raptures.
Nigel Pearson's Robins remain 16th in the table despite the defeat, whereas Mark Robins' Coventry move up from 10th to 8th ahead of Wednesday's games.
Story of the match
Bristol City started the game on the front foot, penning the Sky Blues in their own half, and this pressure resulted in the first chance of the game.
Alex Scott's free kick was met by Andi Weimann at the back post but the Austrian forward could only head wide.
Against the run of play though, Maatsen opened the scoring. Gustavo Hamer's weighted ball over the defence found the Dutchman who fired across Dan Bentley to give the away side the lead.
It could and should have been 2-0 moments later too. Maatsen was at the heart of it again as his flick on released Gyokeres but the Swede fired wide.
The second half began much like the first. Scott's free kick into the area was met by Antoine Semenyo this time, but his header cannoned off the bar.
City could have doubled their advantage soon after, though. Callum O'Hare was played in down the left hand side and skipped past two Bristol defenders but could only fire his shot straight at Bentley.
Despite that chance, the Robins' early second half pressure paid dividends.
A well-worked corner found Weimann in space at the back post, who headed across goal for Chris Martin to nod home and level the scoreline.
Set-piece chances were the order of the day it seemed, as Gustavo Hamer's deep corner was met by Dom Hyam but it was the defender's turn to have his header denied by the woodwork.
The hosts had a big chance with five minutes to go but Martin saw his effort smothered by Moore.
But the biggest chance fell to Gyokeres. Hamer drove forwards on the counter-attack and found the Sky Blues' top scorer who slotted home to seal a vital win in their play-off push.
Gyokeres scores again
Coventry's top scorer has finally started to hit form again.
A 15-game drought raised questions over the former Brighton man's place in Mark Robins' team.
However, the Swede has notched four goals in his last eight games in all competitions and it has coincided with an upturn in fortunes for a team that had been faltering.
Pearson made just the one change to his side ahead of the game, with Ayman Benarous replacing Joe Williams in midfield.
Starting XI: Bentley (GK) (C), Bell, Kalas, Klose, Dasilva, Massengo, Benarous, Scott, Weimann, Semenyo, Martin
Starting XI: Moore (GK), Clarke-Salter, McFadzean (C), Allen, O'Hare, Hyam, Gyokeres, Maatsen, Kane, Bidwell, Hamer