St Helens recorded just a second win in nine games to go above Bradford in the Super League table.
Willie Manu, Tommy Makinson and Sia Soliola went over for the hosts before the break, Brett Kearney responding for the Bulls.
Josh Jones appeared to have made the game safe when he ran in from his own half shortly after the interval.
Matty Blythe and Elliot Kear responded for Bradford but Jon Wilkin's late try was enough for Saints.
Both teams came into the game struggling for form, the hosts having won just one in eight, while the Bulls had recorded just one win in their last six league matches.
Saints, who started the match one point and one place behind Bradford in ninth, made a strong start and deservedly went in front when Manu crashed over.
With the Bulls struggling to get into the game the hosts increased their lead when Jonny Lomax, returning from three months out with a hamstring injury, and Jordan Turner combined for Makinson to finish.
Bradford got onto the scoreboard when Kearney showed good opportunism to go over by the posts.
The hosts were not to be held back for long, Soliola re-establishing their two-try lead when he showed good strength just before the break.
Jones intercepted a loose pass in his own half to run in his side's fourth score of the day just after the restart before Blythe replied for Bradford.
The Bulls were improving and Kear latched on to a kick to touchdown just in front of the deadball line.
Just when it appeared the Saints were in danger of throwing the game away Wilkin finished off from close range with 10 minutes to go to effectively put the game beyond Bradford.
Victory sees Nathan Brown's side return to the top eight at the expense of the Bulls.
VIEW FROM THE DRESSING ROOM
St Helens coach Nathan Brown:
"We created 60 or 70 points, which was pleasing from where we've been.
"We were far the better side, we just did far too much defending in the second half. A little bit of attention to detail, such as the final pass, wasn't so great.
"Obviously the game was in the balance when we were only a try ahead but I thought our edges and our middle held up pretty well."
Bradford coach Francis Cummins:
"I say it most weeks about the character of this team, that they do fight back.
"Saints obviously dominated the first half and, with 17 offloads in warm conditions, we were always chasing our tail.
"I'm happy with the response, but we were second best."
St Helens: Wellens, Makinson, Turner, Jones, Meli, Lomax, O'Brien, Puletua, Roby, McCarthy-Scarsbrook, Soliola, Manu, Wilkin.
Replacements: Walmsley, Hand, Clough, Howarth.
Bradford: Kearney, Kear, Blythe, Lulia, Platt, Addy, Gale, Scruton, L'Estrange, Langley, Bateman, Olbison, Donaldson.
Replacements: Diskin, Evans, Roberts, Sidlow.
Referee: Thierry Alibert (RFL).