Both sides scored two tries, but Halifax, who led 12-4 at the break, were indebted to some superb kicking from centre Steve Tyrer, who converted both their first- half tries from the sideline.
The Bulls had dominated the early part of the game, taking a sixth-minute lead through Etu Uaisele, the centre diving in after Halifax ran out of numbers on their right flank.
Danny Addy’s conversion drifted wide in a strong breeze, but the visitors were still on top when Halifax scored on their first visit to the Bradford 20-metre area.
Captain Scott Murrell was the provider, looping round behind the ruck to put winger Jake Eccleston over in the corner.
Tyrer kicked the conversion off the sideline and Halifax might have scored again if Miles Greenwood had not been recalled for a forward pass in the next set.
Bradford continued to enjoy plenty of pressure, but it was the part timers who took a 12-4 interval lead when half-back Gareth Moore’s kick set up a try for Dane Manning, Tyrer obliging with the conversion from the opposite sideline.
Halifax stretched their lead to 14-4 with a Tyrer penalty with half an hour to go, but after that the game became increasingly tense as the home side began to struggle with both the interpretations of referee John Roberts and their own handling.
Bradford finally cracked their hosts 10 minutes from time through a James Clare try, which Addy coolly converted to leave the game poised at 14-10. After that, it was mainly Bradford as they began to pen Halifax in their own half, with Gaskell’s late chip and chase effort setting up a frantic finish which was only defused when desperate defence forced the ball free from Dale Ferguson.
Halifax: Greenwood; Eccleston, Smeaton, Tyrer, Saxton; G. Moore, Murrell; Cahalane, Kaye, Ambler, Manning, Tangata, Fairbank. Subs: Barber, B. Moore, R. Moore, Morris
Bradford Bulls: Mathers; Campbell, Clare, Uaisele, Caro; Gaskell, Addy; Clough, O’Brien, Clark, Haggerty, Olbison, Pitts. Subs: Ferguson, Fleming, Crossley, Baile.
Referee: John Roberts (RFL).