Flynn Downes scored early in the second half with his second of the season, before Kuryu Matsuki doubled the advantage five minutes from time.
But a Victor Torp penalty in stoppage time set up a nervous finish, with goalkeeper Daniel Peretz producing several crucial stops to win the tie.
It ensured Tonda Eckert’s side did not fall further than three points behind sixth-placed Wrexham, and extended their unbeaten run to 12.
That was an excellent battle! 👏#SaintsFC pic.twitter.com/A3GornjHLW
— Alfie House (@AlfieHouseEcho) March 14, 2026
Eckert made three changes to the team that drew 1-1 with West Brom on Wednesday, in order to facilitate a tactical switch to a 4-1-4-1 formation.
Cam Bragg and Caspar Jander came in for the benched Shea Charles and the injured Leo Scienza, while Cyle Larin replaced absent Ross Stewart.
Naming Finn Azaz and Matsuki as wingers meant it was a narrow system for Saints, who had one eye on nullifying Coventry’s many wide threats.
It was Saints who had the first sight at goal inside 10 minutes, but Larin volleyed wide after controlling Matsuki’s knockdown from a corner.
The two sides were evenly matched for most of the half, but Coventry started to assert their dominance and should have scored before the break.
Tatsuhiro Sakamoto and Luke Woolfenden missed with decent headed chances at the back-post, before Daniel Peretz produced a wonder save.
The Israeli international somehow dived to his left at full-strength to bat Liam Kitching’s close-range header from a recycled corner-kick around the post.
And Saints made them pay within three minutes of the restart, when Downes smashed into an open goal to give his side the lead against the run of play.
The chance came from Matsuki’s in-swinging cross into Larin, with Carl Rushworth pushing the Canadian’s touch onto the post and back into the area.
Jander and Wright both hit the respective goalkeepers with chances to score as both teams hunted the second goal in the immediate aftermath.
Saints got the second in the 85th minute, after good work from Cam Archer, Ryan Manning and Finn Azaz to win a corner for James Bree to deliver.
His cross skimmed the head of Archer at the front-post and fell to Matsuki to tap home for his third goal of the Championship season, to make it two.
However, substitute Shea Charles was controversially adjudged to have fouled in the box for a penalty in the first of seven minutes of added time.
Torp stepped up and fired hard past Peretz to set up a grandstand finish, but a succession of chances somehow fell into Peretz’s grateful hands.
Coventry: Rushworth, Van Ewuk, Kitching, Woolfenden, Dasilva, Grimes, Onyeka (Torp, 76), Eccles (Thomas-Asante, 56), Sakamoto (Esse, 76), Mason-Clark, Wright (Simms, 62).
Unused subs: Wilson, Kesler-Hayden, Bidwell, Latibeaudiere, Markelo.
Booked: Kitching, Woolfenden, Simms.
Saints: Peretz; Bree, Harwood-Bellis, Stephens, Manning; Bragg (Charles, 67), Matsuki (Wood, 95), Downes, Jander, Azaz; Larin (Archer, 67).
Unused subs: Long, Quarshie, Romeu, Edozie, Fellows, Oyekunle.
Booked: Peretz.
Referee: Farai Hallam.