Mark Trueman and Conor Sellars’ Bantams made it four-straight victories with a hard-fought 2-1 triumph at Walsall.
A goal in each half from Levi Sutton and Andy Cook was enough to see off the Saddlers - who rallied after a second-half goal from Dan Scarr.
The hosts enjoyed more of the ball in the opening stages and almost took the lead in the sixth minute as Derick Osei Yaw struck just wide of City's post.
Liam Roberts was called into action in the 16th minute as Levi Sutton flicked the ball towards Ollie Crankshaw.
Recalled to the starting 11, Crankshaw drove towards the hosts’ defence and took aim from 20 yards out - drilling it low into the arms of the Saddlers’ stopper.
City came close to taking the lead in the 22nd minute as the ball was passed neatly around the midfield, before Anthony O’Connor played it over to Crankshaw with a first-time pass. The 22-year-old ran forward before lashing his low effort wide of the upright.
The Bantams were ahead on the stroke of half-time as Andy Cook won possession in the final third. The ball was played to Crankshaw who got bundled over on the edge of the box.
Sutton picked up the loose ball and let fly with a 20-yard strike which crashed in emphatically off the underside of the crossbar.
The hosts had the ball in the back of the net just after the restart as the ball was looped towards City’s goal. Hornby jumped up to claim it and got knocked over, only for Josh Gordon to turn it home from close range.
Referee Scott Oldham ruled that the City stopper had been fouled and the goal was disallowed.
City extended their lead midway through the second half as Connor Wood picked up the ball on the left and laid it off to Sutton.
The Bantams goal-scorer picked out an unmarked Andy Cook in the centre of the box who took it under control and placed calmly beyond Roberts in the hosts’ goal.
Brian Dutton’s side pulled one back in the 77th minute as Dan Scarr rose highest to meet the inswinging corner. The Saddlers defender headed goalwards as the ball hit the inside of the post on its way in.
Walsall came close to levelling late on and began to throw more players forward.
Elliot Watt was dispossessed by Frank Vincent who darted forward and took aim from the edge of the penalty area, but his effort flew into the back of the stand - leaving City to clinch all three points at the Banks’s Stadium.
WALSALL: Liam Roberts; Callum Cockerill-Mollett (Cameron Norman 65’), Mat Sadler ©, Dan Scarr, Hayden White; Tyreik Wright, Alfie Bates, Sam Perry (Frank Vincent 64’), Wes McDonald; Derick Osei Yaw (Caolan Lavery 57’), Josh Gordon. Subs (not used): Jack Ross, Stuart Sinclair, Jack Nolan, Emmanuel Osadebe.
GOALS: Scarr 77’.
CITY: Sam Hornby; Connor Wood, Niall Canavan, Paudie O’Connor ©, Anthony O’Connor, Elliot Watt, Levi Sutton; Ollie Crankshaw (Clayton Donaldson 88’), Callum Cooke (Billy Clarke 72’), Charles Vernam (Jordan Stevens 87’); Andy Cook (Danny Rowe 72’). Subs (not used): Richard O’Donnell, Finn Cousin-Dawson, Kian Scales.
GOALS: Sutton 43’, Cook 66’.
REFEREE: Scott Oldham.