A late try by Ruan Nortje ensured that the Bulls turned around a ten-point halftime deficit to beat the Stormers 31-27 at Loftus.
The result ensures the Bulls will top the Pro14 Rainbow Cup SA standings and will represent South Africa in the tournament’s North vs South final.
After dominating possession in the first half, the Bulls would have been disappointed to go into the break trailing 7-17.
The Stormers opened the scoring through the boot of Tim Swiel before Damian Willemse crossed for the first try of the match and added the conversion himself.
On his return to SA rugby Marcell Coetzee was impressive, and it was him who put the Bulls on the board with a well-deserved try just after Willemse was sent to the sin bin. The Stormers were made to pay for persistent infringing, but the Bulls couldn’t leverage the extra man into more points.
Edwill van der Merwe scored a superb try that left the Stormers ten points to the good at the break, but the Bulls would not lay down.
Johan Grobbelaar scored the Bulls second try in trademark fashion, after a rolling maul and just before the hour, the men in blue produced a near carbon copy to ensure the hooker had his second and the Bulls hit the lead for the first time in the match.
Morne Steyn made it 24-17 in the Bulls favour with a penalt goal that went over with less than 15 minutes on the clock.
Tim Swiel burst over from short range to get the Stormers back into the game but missed what would have been a game-levelling conversion.
It seemed it wouldn’t matter when Van der Merwe, who has enjoyed a terrific season with the Stormers, crossed for his second.
However the Bulls were relentless and eventually Ruan Nortje burst over with seconds remaining to clinch the match and top spot for the Bulls.
Bulls 31-27 Stormers – Match facts
Bulls 31 (7)
Tries: Marcell Coetzee, Johan Grobbelaar (2), Ruan Nortje
Conversions: Morne Steyn (4)
Stormers 27 (17)
Tries: Damian Willemse, Edwill van der Merwe (2), Tim Swiel
Conversion: Tim Swiel (2)
15 David Kriel, 14 Madosh Tambwe, 13 Marco Jansen van Vuren, 12 Cornal Hendricks, 11 Stravino Jacobs, 10 Morne Steyn, 9 Ivan van Zyl, 8 Duane Vermeulen (captain), 7 Elrigh Louw, 6 Marcell Coetzee, 5 Ruan Nortje, 4 Walt Steenkamp, 3 Mornay Smith, 2 Johan Grobbelaar, 1 Gerhard Steenekamp
Substitutes: 16 Schalk Erasmus, 17 Jacques van Rooyen, 18 Trevor Nyakane, 19 Janko Swanepoel, 20 Marco van Staden, 21 Zak Burger, 22 Chris Smith, 23 Gio Aplon
15 Damian Willemse, 14 Rosko Specman, 13 Ruhan Nel, 12 Rikus Pretorius, 11 Edwill van der Merwe, 10 Tim Swiel, 9 Herschel Jantjies, 8 Evan Roos, 7 Pieter-Steph du Toit, 6 Willie Engelbrecht, 5 Marvin Orie, 4 David Meihuizen, 3 Neethling Fouche, 2 Bongi Mbonambi, 1 Steven Kitshoff (captain)
Substitutes: 16 Andre-Hugo Venter, 17 Ali Vermaak, 18 Frans Malherbe, 19 Ernst van Rhyn, 20 Marcel Theunissen, 21 Godlen Masimla, 22 Dan du Plessis, 23 Sergeal Petersen