Six penalties from Morne Steyn and a controversial try by Chiliboy Ralepelle handed the Bulls a 25-17 win over the Stormers at Loftus Versfeld on Friday.
It was a disappointing start to the Super Rugby season in South Africa as an error-strewn game failed to live up to the hype surrounding a clash between the three-time champions and last year's conference winners.
A man-of-the-match display from Steyn proved the difference between the sides as he landed all seven of his attempts at goal.
Television match official Johan Greeff was also massively influential as it was his rubber stamp on Ralepelle's 68th minute try that killed off any hope the trailing Stormers had of getting back into the game.
The Stormers will head back to the Cape with only themselves to blame as their own errors cost them victory despite outscoring their hosts two tries to own.
A scrappy first half came to and end with the Bulls leading 9-0 thanks to three penalties from Steyn, who was pin-point accurate with his kicking both out of hand and from tee.
The scoreline was flattering to the Stormers, who were looking decidedly rusty and really should have been made to pay for their 10 handling errors in the opening 40 minutes.
Steyn extended the lead to 12-0 shortly after the restart with another long-range effort as the Stormers scrum buckled.
The visitors' cause was not helped by woeful place-kicking of Elton Jantjies, who missed all four of his kicks in his first game in the blue and white hoops.
Skipper Jean de Villiers finally put the Stormers on the board when he scored an opportunistic try after Bryan Habana was stopped just inches short. Joe Pietersen took over the kicking duties from Jantjies and landed the conversion and a penalty soon afterward to narrow the gap at 12-10.
Steyn replied with his fifth and sixth successful kicks however to leave the Bulls eight points ahead on the hour mark.
Ralepelle's try would be the killer blow as he collected Francois Hougaard's grubber from an offside position and dive in under the sticks. The TMO ruled that the ball had connected with the leg of Frans Malherbe, putting Ralepelle onside, and the try was approved.
A late consolation try from Andries Bekker when the Bulls defence finally cracked proved too little too late for the visitors to salvage a losing bonus point and they head to the Shark Tank next week empty handed.
Pens: Steyn 6
Tries: de Villiers, Bekker
Cons: Pietersen 2
Bulls: 15 Zane Kirchner, 14 Lionel Mapoe, 13 JJ Engelbrecht, 12 Wynand Olivier, 11 Bjorn Basson, 10 Mornè Steyn, 9 Francois Hougaard, 8 Pierre Spies (c), 7 Dewald Potgieter, 6 Deon Stegmann, 5 Juandrè Kruger, 4 Flip van der Merwe, 3 Werner Kruger, 2 Chiliboy Ralepelle, 1 Mornè Mellett.
Replacements: 16 Willie Wepener, 17 Frik Kirsten, 18 Grant Hattingh, 19 Arno Botha, 20 Jano Vermaak, 21 Louis Fouchè, 22 Francois Venter.
Stormers: 15 Jaco Taute, 14 Gio Aplon, 13 Jean de Villiers (c), 12 Damian de Allende, 11 Bryan Habana, 10 Elton Jantjies, 9 Nic Groom, 8 Duane Vermeulen, 7 Rynhardt Elstadt, 6 Siya Kolisi, 5 Andries Bekker, 4 De Kock Steenkamp, 3 Pat Cilliers, 2 Deon Fourie, 1 Steven Kitshoff.
Replacements: 16 Martin Bezuidenhout, 17 Frans Malherbe, 18 Don Armand, 19 Nizaam Carr, 20 Dewaldt Duvenage, 21 Gerhard van den Heever, 22 Joe Pietersen.
Venue: Loftus Versfeld, Pretoria
Referee: Jaco Peyper (South Africa)