The Bantams extended their unbeaten run to eight matches with a 1-1 draw at table-topping Swindon Town.
Substitute Shay McCartan's late free-kick rescued a credible point for Gary Bowyer's side, who deservedly took a share of the spoils.
The hosts began the affair quickly and were ahead with 11 minutes on the clock.
Lloyd Isgrove's cross was adjudged to have struck Connor Wood's arm - inside the penalty area - allowing Yates to convert from 12 yards out.
Bowyer's men went close to drawing level 10 minutes later when Chris Taylor's jinking run and shot drifted just wide of the far post.
City then were inches away from equalising 10 minutes before half-time, when Jake Reeves' free-kick was helped onto the post by Ben Richards-Everton.
After pushing hard for a goal following the restart, the visitors were given their just reward with two minutes of normal time remaining.
McCartan stepped up from 25 yards out to send a sublime free-kick into the top corner, sparking jubilant celebrations.
City now remain fourth in Sky Bet League Two, three points above Cheltenham Town.
CITY: Richard O’Donnell; Adam Henley, Anthony O’Connor, Ben Richards-Everton, Connor Wood; Callum Cooke, Jake Reeves (booked 13’, Aramide Oteh 59’), Matt Palmer, Chris Taylor (Shay McCartan 73’, booked 89'); Dylan Connolly, James Vaughan (c). Subs (not used): George Sykes-Kenworthy (GK), Paudie O’Connor, Hope Akpan, Jermaine Anderson, Jordan Gibson.
GOALS: McCartan (88').
SWINDON: Steven Benda; Paul Caddis, Anthony Grant, Zeki Fryers (Tom Broadbent 40’), Rob Hunt (booked 73’); Lloyd Isgrove (Adam May 87'), Danny Rose (c, booked 42’), Jordan Lyden (dismissed 90+3'), Diallang Jaiyesimi (booked 61’, Michael Doughty 76’); Kaiyne Woolery (booked 90+6'), Jerry Yates. Subs (not used): Luke McCormick (GK), Scott Twine, Taylor Curran, Cameron McGilp.
GOALS: Yates (11’ pen).
ATTENDANCE: 8,407 (404 visitors).
REFEREE: Darren Drysdale (Lincolnshire).