The reigning champion Bulls gave their hopes of playing in the Super Rugby play-offs a shot in the arm on Saturday, edging the Stormers 19-16.
Bulls fly-half Morne Steyn knocked over 14 points, passing 200 for the season and helping his side to a sixth-straight win in a fine late-season surge.
It was his half-back partner Francois Hougaard who arguably sealed victory though after he capitalised on a poor Stormers line-out to put the Bulls in command on 65 minutes after a tense derby looked set to be decided by the boot.
But the home side weren't done and set up a dramatic finish when lock Andries Bekker powered over in the 78th minute to put the Stormers within two points. It ultimately wasn't enough though as they remain in second spot while the Bulls strengthened their chances of making the cut following a hearty showing.
The Bulls opened the scoring when Steyn converted a penalty in the sixth minute. Stormers fly-half Kurt Coleman, who was pulled from the action early into the second-half, evened the scores with a penalty goal in the 25th minute.
Steyn then missed two chances to regain the lead for his side, and the two teams ground it out for most of the first-half with neither able to make many inroads.
Shortly before half-time, Springbok fly-half Steyn secured the lead with his second penalty conversion of the evening to cap what was a disappointing 40 minutes.
After the break, Coleman had a chance to even the scores with a penalty but could not find the direction. Stormers coach Allister Coetzee reacted by substituting Coleman with regular scrum-half Dewald Duvenhage, who again stepped in well.
Minutes later Duvenhage had his first stab at the posts and the hosts drew level at 6-6. However, the Stormers continued to struggle with their lineout, which led to their undoing.
Hougaard dove over the try-line in the 65th minute after another set-piece calamity. The nippy scrum-half grabbed a loose ball and darted towards the line to make one of his trademark dives for the five-pointer.
Steyn's conversion gave the Bulls a seven-point cushion, which was soon cut back to four after Duvenhage added three with another penalty.
With less than 10 minutes left in the match, the Bulls received another shot at goal and Steyn regained their seven-point lead as the clock wound down.
The Stormers, however, did not throw in the towel as Bekker scored his team's only try at the death. Duvenhage converted to reduce the deficit to three points but it was too little too late.
Pen: Coleman, Duvenage 2
Pen: Steyn 4
Stormers: 15 Conrad Jantjes, 14 Gio Aplon, 13, Jaque Fourie, 12 Jean de Villiers, 11 Bryan Habana, 10 Kurt Coleman, 9 Ricky Januarie, 8 Duane Vermeulen, 7 Francois Louw, 6 Schalk Burger (captain), 5 Andries Bekker, 4 Rynhardt Elstadt, 3 Brok Harris, 2 Deon Fourie, 1 Wicus Blaauw.
Replacements: 16 Tiaan Liebenberg, 17 Steven Kitshoff, 18 Frans Malherbe, 19 Anton van Zyl, 20 Nick Koster, 21 Dewaldt Duvenage, 22 Juan de Jongh.
Bulls: 15 Zane Kirchner, 14 Gerhard van den Heever, 13 Jaco Pretorius, 12 Wynand Olivier, 11 Bjorn Basson, 10 MornÃ© Steyn, 9 Francois Hougaard, 8 Pierre Spies, 7 Dewald Potgieter, 6 Deon Stegmann, 5 Victor Matfield (c), 4 Danie Rossouw, 3 Werner Kruger, 2 Gary Botha, 1 Dean Greyling.
Replacements: 16 Chiliboy Ralepelle, 17 Rossouw de Klerk, 18 Flip van der Merwe, 19 Derick KuÃ¼n, 20 Dustin Jinka, 21 Francois Brummer, 22 Stephan Dippenaar.
Referee: Jonathan Kaplan