Attendance: 17,703 (282 visitors)
The Bantams moved to within one point of the top of Sky Bet League One after picking up their third league victory on the trot thanks to a home win over Shrewsbury Town.
Nicky Law's first goal of the season in the opening half gave Stuart McCall's men the advantage before Haris Vuckic's penalty deep into stoppage time sealed all three points.
McCall's side played some fantastic high-energy football in the first period and could have added to Law's opener through Filipe Morais but he was denied by via an important goal-saving clearance from Jack Grimmer.
Morais' scoring chance came just a minute or so after he'd played a role in City's breakthrough goal from Law.
After playing a one-two with Marshall, Morais shot for goal from inside the box but his shot was blocked. With Shrewsbury 'keeper Jayson Leutwiler grounded following Morais' effort, Law was on hand to fire home on the rebound.
City looked in control at the break but Shrewsbury improved and took the game more to McCall's men in the second half.
The visitors saw a penalty appeal turned down ten minutes after the restart when the ball appeared to bounce up and accidentally hit the out-stretched arm of Stephen Darby inside the box.
James Meredith, Mark Marshall and Nathaniel Knight-Percival all had openings later in the half for City but Shrewsbury continued to have a say in the game, with substitute Antoni Sarcevic firing onto the top of Colin Doyle's net with a drive just outside the box.
City maintained their slender advantage in the match going into the closing stages before making the points safe with virtually the last attack of the game.
Substitute Daniel Devine was bundled over from behind by Sarcevic just inside the area and fellow second half replacement Vuckic confidently converted the resulting spot-kick.
FT: Bradford City 2 Shrewsbury Town 0
90+5min: GOAL!!!!!!!!!!!!!!! Bradford City 2 Shrewsbury Town 0 - Vuckic makes no mistake with the kick, firing low into the corner as Leutwiler dives the wrong way.
90+4min: PENALTY TO THE BANTAMS - City are awarded a spot-kick when Sarcevic bundles into the back of Devine just inside the box after City work an opening from the resulting free-kick.
90+3min: YELLOW CARD - Ogogo is booked for bringing down Marshall after the winger had done brilliantly to travel with the ball high in Shrewsbury territory from City's own half.
90+2min: Sadler's cross into the box is headed not too far wide of Doyle's near post via a downward header from Riley.
90+1min: SUB - Shrewsbury bring on Andrew Mangan for Black.
90min: There will be four minutes of time added on at the end of the match.
88min: SUB - The Bantams bring on Haris Vuckic for Billy Clarke.
84min: Law's cross into the middle eventually drops into the path of McNulty on the edge of the box. The Scottish striker helps it goal-wards, Billy Clarke tries to help himself by getting a head on the effort but the ball goes over.
78min: SUB - The Bantams bring on Marc McNulty for Hiwula.
78min: Sarcevic has the ball in the net after latching onto Toney's pass but the Shrewsbury substitute is rightly flagged offside before he fired home.
77min: Law sees an initial shot blocked by El-Abd deep inside the box. The midfielder loops the ball across goal with a cushioned cross but the centre is just too high for Hiwula, who was looking for a close range header by the far post, and the ball goes out for a goal-kick.
75min: YELLOW CARD - Grimmer is booked for clipping Hiwula as the City striker looked to burst into space in Shrewsbury's half of the pitch.
72min: Hiwula plays a one-two with Billy Clarke before firing in a looping shot on the half-volley from an angle inside the box that flies not too far over Leutwiler's goal.
71min: SUB - Shrewsbury bring on Mat Sadler for Brown.
68min: Close for Shrewsbury from Sarcevic! Leutwiler's goal kick eventually drops at the path of the substitute and his looping half-volley hits the top of Doyle's net before bouncing behind.
66min: SUB - The Bantams bring on Daniel Devine for Morais.
62min: YELLOW CARD - Hiwula is booked for challenging the 'keeper as he went to kit clear from outside his hands just inside the box.
61min: Marshall turns in-field inside the box before firing in a curling drive on left foot which is held by Leutwiler.
61min: YELLOW CARD - Marshall is booked for a late tackle on Brown just inside Shrewsbury's half of the pitch.
60min: Leaning back and on the stretch, Knight-Percival fires over on the half-volley from Morais' corner delivery.
59min: Ogogo tries to burst into the box and in with a sight of Doyle's goal after collecting Waring's pass but touch is too heavy and City's shot-stopper is able to dive on the ball.
55min: Morais' cross into the box is headed out by El-Abd but James Meredith is onto the loose ball and fires for goal with a shot that is deflected behind for a corner.
55min: Penalty appeals from the away supporters as the ball appears to accidentally bounce up and hit Darby's arm inside the box. Referee Mr Dean Whitestone is unmoved and allows play to continue.
54min: Black turns into shooting space outside the area but his rising drive is clung onto by Doyle at the second attempt.
54min: Toney has a free-kick from outside the box but his effort for goal hits the Bantams wall.
51min: YELLOW CARD - Toney is booked for a late tackle on Marshall midway into City's half of the pitch.
50min: Riley's clipped ball into the box from a free-kick is aimed towards El-Abd, the ball breaks free to Abu Ogogo on the edge of the area but he pokes comfortably over the bar while under pressure.
48min: Toney finds himself in behind City's offside trap for a second after latching onto a hook forward. Toney tries to beat a recovering Knight-Percival with a trick inside the area but only results in running the ball out of play.
46min: The Bantams restart the match.
46min: HT SUB - Shrewsbury bring on Antoni Sarcevic for O'Brien before the start of the second half.
HT: Bradford City 1 Shrewsbury Town 0
45min: There will be two minutes of time added on at the end of the first half.
45min: Marshall turns in-field away from Brown but his left-footed drive from the edge of the area isn't cleanly struck and the ball bobbles through into Leutwiler's grasp.
43min: Billy Clarke's plays a low curling delivery from just outside the box towards Leutwiler's near post. He appears to be trying to pick out the run of Morais but the Shrewsbury shot-stoppper is just able to cling on ahead of the Portuguese winger.
41min: Riley's cross into the middle is headed comfortably wide of Doyle's far post by Waring, who seems to be leaning back as he made connection with the ball.
39min: Marshall's driven shot towards goal from the edge of the area takes a touch off the out-stretched boot of Junior Brown before going through into the clutches of Leutwiler.
30min: YELLOW CARD - Black is booked for a late lunging tackle on Law a few yards outside Shrewsbury's penalty area. Morais plays the resulting free-kick into the box, Nathaniel Knight-Percival heads back into the middle from past the far post but Shrewsbury are able to clear.
27min: City have another sight of goal after Leutwiler fails to cling onto Morais' free-kick for goal from outside the box. Dieng is onto the loose ball ahead of the Shrewsbury shot-stopper and stands a cross up from the byline into the middle but Billy Clarke heads over from roughly eight yards out while under pressure.
22min: Morais is in with a sight of goal after being played into space by Marshall. As he makes his way into the box, Morais turns into shooting space but his effort for goal is vitally knocked behind by Jack Grimmer after the ball had beaten Leutwiler's dive.
21min: GOAL!!!!!! Bradford City 1 Shrewsbury Town 0 - Nicky Law gives City the lead! As City clear their lines from Toney's free-kick, the ball eventually drops into the path of Morais, who plays a one-two with Marshall inside the box. Morais receives the ball back and shoots for goal, his effort is blocked but Law is on hand to fire home the rebound.
21min: Ivan Toney has a free-kick in a decent position outside the box but his effort for goal is blocked by the Bantams wall.
18min: Darby tries to play a one-two with Hiwula, the ball breaks free to Timothee Dieng around the edge of the area but his low first-time shot is comfortably held by Jayson Leutwiler.
15min: Marshall knocks the ball past Olly Lancashire before whipping in a teasing cross into the six yard box that Black has to head behind for a corner. Adam El-Abd heads away the resulting Filipe Morais' resulting set-piece delivery.
9min: Stephen Darby has the ball in the net for City but Marshall had already been flagged for offside before crossing low into the box for the full back.
7min: Nice play from the Bantams sees Mark Marshall in good space down City's right flank. The winger stands the ball up towards the far post but Jordy Hiwula is dispossessed by Joe Riley as the looks to control the cross.
6min: Jim O'Brien feeds the ball forward into the path of Ian Black but the midfielder's shot on the turn from outside the area bounces comfortably wide of Colin Doyle's goal.
0min: Shrewsbury Town kick off the match. The Bantams will attack towards the T L Dallas Stand end in the first period.
BRADFORD CITY LINE UP:
Doyle, Darby, Vincelot, Knight-Percival, Meredith, Morais, Law, Dieng, Marshall, B Clarke, Hiwula
Subs: Sattelmaier, N Clarke, McNulty, Vuckic, McArdle, Devine, Kilgallon
Bradford City substitutions:
Devine for Morais (66), McNulty for Hiwula (78), Vuckic for B Clarke (88)
Bradford City cautions:
Marshall (61), Hiwula (62)
SHREWSBURY TOWN LINE UP:
Leutwiler, Riley, Grimmer, El-Abd, Lancashire, Brown, Ogogo, Black, O'Brien, Waring, Toney
Subs: Halstead, Sadler, Sarcevic, Mangan, Leitch-Smith, Choulay, Ebanks-Blake
Shrewsbury Town substitutions:
Sarcevic for O'Brien (46), Sadler for Brown (71), Mangan for Black (90+1)
Shrewsbury Town cautions:
Black (30), Toney (51), Grimmer (75), Ogogo (90+3)
Referee: D Whitestone
Assistant Referee: M Parry
Assistant Referee: P Newhouse
Fourth Official: S Rushton