Matt Jansen made his Coventry debut to form City's 18th strike partnership of the season with Julian Joachim, and the pair looked lively in the opening minutes.
But Bradford forced their way back into the match and came close on 14 minutes when Andy Gray's free-kick was headed goalwards by David Wetherall, only for Barry Quinn to clear off the line.
City nearly broke the deadlock minutes later when Gary Caldwell volleyed Richie Partridge's cross from the left but Aidan Davison saved comfortably.
The Bantams did take the lead on 23 minutes through the impressive Gray.
Lewis Emanuel broke from deep and his run caused confusion in the City defence, as the ball took a deflection to break kindly for Gray.
With the defence flat-footed and looking for an offside flag, Gray had time and space to pick his spot past Morten Hyldgaard.
Coventry rallied slightly and Joachim's venomous deflected shot forced a save from Davison before Vicente Engonga cleared off the line for City from Ashley Ward's header.
The pattern of play was repeated in the second half as Coventry dominated possession but failed abjectly to create any chances.
Both Caldwell and Mo Konjic came close with headers from set-pieces, but again it was Bradford who came closest when Claus Jorgensen struck the woodwork from the edge of the box.
But he got his name on the scoresheet after 83 minutes thanks to a dubious refereeing decision.
Gray was clearly offside as he latched on to a through-ball, but the game was allowed to continue and he squared to Jorgensen whose finish was clinical.