Glasgow Warriors fell to a second successive defeat in South Africa as Bulls won 29-17 to move second in the United Rugby Championship table.
Bulls led 17-10 at the break, Zak Burger and Madosh Tambwe crossing after Warriors' opening penalty try.
Walt Steenkamp added the hosts' third try and Cyle Brink secured them a bonus point.
Glasgow rallied in the closing stages and Ollie Smith's converted try brought them back to within 12 points.
Danny Wilson's side slip a place to seventh. Munster can finish Friday second if they beat Cardiff at home.
Warriors were seeking the win that would move them up four places, with second-placed Stormers - who beat them last Friday - only two points better off at start of play.
And they got off to a fine start by winning a penalty from the first scrum and eventually forcing a penalty try. Steenkamp was yellow carded for his role in collapsing the maul.
Despite their numerical disadvantage, Bulls levelled with Burger diving over after Ruan Nortje had been held up on the line and Morne Steyn converting.
Duncan Weir and Steyn traded penalties - with the Bulls kicker missing another - but the hosts did lead at the break.
Zander Fagerson was sin binned for repeated offences and the hosts moved left to right to put the overlapping Tambwe in for the score. Steyn converted.
Thomas Gordon had come off the bench for Glasgow but had to be replaced following a head injury and Kiran McDonald took over.
Tambwe thought he had stretched the Bulls lead when he latched on to a grubber kick to touch down but the TMO ruled he was offside.
The hosts did not have to wait much longer for their third try as Steenkamp burst through a couple of defenders off a maul to get over the line.
Bulls sensed a bonus point was in the offing and a series of phases led to substitute Brink creeping over. Steyn's replacement Chris Smith hit the outside of the post with the conversion attempt.
Glasgow had been overpowered for much of the match but finally built some momentum that finished with Sione Tuipulotu offloading for Smith to run in near the posts. Substitute Ross Thompson converted.
Smith thought he had picked up another five points moments later but a forward pass by Tuipulotu to Josh McKay earlier in the move gave Bulls a put-in at a scrum and they soon had the ball in touch for full-time.
Bulls: Moodie, Verity-Amm, Mapoe, Hendricks, Tambwe, Steyn, Z Burger; Steenekamp, J Grobbelaar, M Smith, W Steenkamp, Nortje, Coetzee, Botha, Louw.
Replacements: Wessels, Matanzima, D Smith, Swanepoel, Brink, Papier, C Smith, Vorster.
Glasgow Warriors: Smith, McKay, Tuipulotu, McDowall, Forbes, Weir, Price; Bhatti, Turner, Z. Fagerson, Harley, Gray, Wilson, Darge, Dempsey.
Replacements: Brown, Kebble, Berghan, McDonald, Gordon, Dobie, Thompson, Johnson.