The Bulls trailed 13-2 at the break after being forced onto the back foot for the majority of the opening half. But Danny Williams and Jay Pitts crossed immediately after the break to turn the game completely on its head.
Full-back Ryan Shaw converted both to put James Lowes’s side 14-13 ahead, with half-back Lee Gaskell stretching their lead to 20-13 with a 50th-minute touchdown, converted by Shaw.
Adam Henry and Ben Heaton traded tries before Shaw sealed things for the Bulls.
It was Halifax who had taken the lead on nine minutes when the Bradford winger Chris Ulugia spilled a Scott Murrell kick and the Halifax captain teed up Australian prop Mitch Cahalane for a barging try under the posts.
Centre Steve Tyrer kicked the conversion for a 6-0 lead, although Ulugia was hauled down by Halifax full-back James Saltonstall soon after as the Bulls made a rare line break.
The visitors doubled their advantage on the half hour when winger Gareth Potts made a 70-metre break. Shaw got back to save the Bulls’ line, but held on too long and went to the sin bin.
That was all the invitation Halifax needed, Murrell again firing the final pass for back rower Ross Divorty to score. Tyrer converted, and then Murrell kicked a drop goal just before the break.
A penalty on the final play of the half from Shaw got Bradford on the scoreboard at 13-2, but the real drama was still to come.
Bradford Bulls: Shaw; Williams, Purtell, Henry, Ulugia; Gaskell, Siejka; Clough, O’Brien, Sidlow, Olbison, Pitts, Addy. Substitutes: Ferguson, Baile, Lauaki, Fleming.
Halifax: Saltonstall; Brown, Heaton, Tyrer, Potts; Johnston, Murrell; Cahalane, Kaye, Ambler, Divorty, Manning, Moore. Substitutes: Robinson, Spencer, Bracek, Maneely
Referee: Matthew Thomason (RFL).