Mark Hughes’ Bantams returned to winning ways and extended their unbeaten run away from home, as Andy Cook’s 20th goal of the season secured a 1-0 victory over Yorkshire neighbours, Doncaster Rovers.
City controlled proceedings throughout, and were rewarded with their efforts just after 70 minutes, as top goal-scorer Cook met Adam Clayton’s inviting corner to take control of the derby.
Dara Costelloe and Jamie Walker had chances to add to the scoreline, but City saw out the game to send the sold-out away end back to West Yorkshire happy.
The Bantams - with the backing of just under 4,000 travelling supporters - started the stronger.
Walker’s curled effort towards the far post was partially dealt with by Donny’s No.1 Jonathan Mitchell. The rebound fell to the busy Costelloe, but the Irishman could not direct a effort goalwards.
The two threatened again though, 10 minutes later, as Costelloe’s lay-off found Walker on the edge of the box, but the Scotsman saw his side-footed effort whistle wide of the post.
Danny Schofield’s side responded as the half advanced, but it was City who looked most likely to break the deadlock in Doncaster.
Richie Smallwood’s deep cross caused the hosts issues as Costelloe’s attempted overhead kick was blocked, and Andy Cook was denied a tap-in, moments before City’s No.9 hammered his speculative half-volley wide.
City’s first-half authority translated into the second, as Brad Halliday’s whipped cross found the lively Costelloe, but his header failed to trouble Rovers' No.1.
Still pushing for the game’s opener, Doncaster’s failed clearance found Smallwood with space on the edge of the box, who drilled an effort towards the near post forcing Mitchell to beat away.
Cook was then next to test the home goalkeeper, and thought he had broken the deadlock when crashing a header goalwards after rising to meet Halliday's ball in, though Mitchell sprung to make an acrobatic stop and keep the score level.
Cook’s aerial threat proved difficult for Doncaster to manage, and with 20 minutes remaining on the clock, Hughes’ Bantams broke the deadlock.
Adam Clayton’s inswinging corner found the head of City’s No.9, who powered home - in front of an ecstatic sold-out away end - to secure his 20th goal in all competitions.
With City looking to double their advantage as the clock ticked, Liam Ridehalgh’s hooked delivery towards Costelloe at the far post was only just hooked clear by Mitchell, before Smallwood saw an effort cleared off the line.
Then with two minutes of normal time remaining came City's only substitution of the match, as Emmanuel Osadebe was introduced for his first appearance since suffering a double leg break against the same opponents on the opening day of the season, to a rousing reception from a raucous away end.
Rovers piled pressure in the closing stages - in search of a last-gasp equaliser - but City hung on valiantly to secure the vital three points, and sending 3,990 Bantams fans home pleased.
DONCASTER: Jonathan Mitchell (GK), James Brown, Tom Anderson (C), Joseph Oluwu (booked 39' ,Caolan Lavery 82’), George Miller, Tommy Rowe, Harrison Biggins (booked 7’, Luke Molyneux 70’) , Ben Nelson, Kyle Hurst (booked 60’, Todd Miller 87’), Charlie Lakin, Ben Close. Subs not used: Jake Oram, Adam Long, Aidan Barlow, Charlie Seaman.
CITY: Harry Lewis, Brad Halliday, Liam Ridehalgh, Matty Platt, Richie Smallwood (C, booked 60'), Andy Cook, Jamie Walker (booked 6’), Alex Gilliead, Dara Costelloe (booked 46’, Emmanuel Osadebe 87’), Sam Stubbs, Adam Clayton (booked 11’). Subs not used: Colin Doyle, Scott Banks, Ryan East, Harry Chapman, Romoney Crichlow, Ciarán Kelly.
GOALS: Andy Cook (71’).
ATTENDANCE: 10,655 (3,990 travelling Bantams).