The Blitzboks showed great fighting spirit to beat England 29-19 to advance to the London Sevens final on Sunday at Twickenham.
They will take on Fiji at 6.57pm SA time on Sunday evening, after the Fijians beat 38-12 in the other semi-final.
Missing a number of players through injury, and having lost Cecil Afrika and Branco du Preez during the tournament, the South Africans started the semi-final with one reserve short, but still came up trumps.
But that didn't deter them, as they surged into a 12-7 halftime lead through tries by Werner Kok and captain Philip Snyman.
England made a number of mistakes in the second half, and the Blitzboks benefited as Seabelo Senatla and Stedman Gans put the game beyond their reach with further tries.
Blitzboks will meet @WorldRugby7s leaders @Fiji7sTeam in final of @LondonSevens after a clinical performance against the hosts @EnglandRugby . @CastleLagerSA @FNBSA @ASICS_ZA #WePlayForYou pic.twitter.com/mxHJ32LnxL
Phil Burgess levelled the scores at 7-7 in the first half for England, and added another touchdown after the break, but it was too late.
Even a late consolation try from Dan Norton didn't affect the result, with Justin Geduld rounding things off for Neil Powell's team.
Blitzboks 29 - Tries: Werner Kok, Philip Snyman, Seabelo Senatla, Stedman Gans, Justin Geduld. Conversions: Geduld (2).
England 19 - Tries: Phil Burgess (2), Dan Norton. Conversions: Tom Mitchell (2).