The Bulls will host all-South African Super 14 rugby final after beating the Crusaders 39-24 in South Africa on Sunday.
They'll meet the Stormers, who beat the New South Wales Waratahs 25-6 in Cape Town on Saturday.
It will be only the third time in Super Rugby history that no New Zealand team is in the final.
In front of a capacity 40,000 crowd in Orlando Stadium in Soweto, the Bulls were quick to apply pressure, and number eight Pierre Spies stormed over the tryline just 126 seconds into the game for the defending champions.
Steyn converted and added a penalty before seven-time holders Crusaders hit back with a try from skipper and flanker Richie McCaw off a driving maul that fly-half Dan Carter converted.
But Bulls fullback Zane Kirchner touched down after an awkward bounce eluded numerous players. Another conversion and another penalty from Steyn lifted Bulls to a 20-7 advantage and after Carter landed his only penalty of the match, the Bulls pivot planted the ball between the posts from well inside his own half.
The Crusaders scored first in the second half, when slick handling and a missed Dewald Potgieter tackle allowed wing Sean Maitland to go over far out with Carter adding the conversion.
A Steyn penalty steadied Bulls nerves and the turning point came after 63 minutes when scrum-half Fourie du Preez made a blindside break from a scrum, brushed off a Kieran Read tackle and dived over for Steyn to convert.
The Crusaders were allowing the game slip away from them as they trailed 33-17 and Steyn added another couple of penalties before lock Sam Whitelock snatched a consolation try that Carter converted.