South Africa, who won the toss and elected to bat, set an imposing target of 164-4, with Brits scoring 68, and then held on in an exciting finish as England fell short with 158-8 from their 20 overs.
Brits took important catches, including a spectacular one-handed diving effort, while seamer Ayabonga Khaka claimed three wickets in the 18th over to put the brakes on England’s chase. She finished with figures of 4-29.
It is the first time that South Africa have reached the final, where they face the defending champions at Newlands.
“We had to be brave and be free in our approach and we are proud of our achievement,” said captain Sune Luus in the post match celebrations.
“It’s a massive result, every game we play we keep making history and hopefully this is a turning point for women’s sport in South Africa,” she added.
The game ended in a nail-biting spectacle but started off tepidly as England restricted South Africa’s openers to just three scoring shots in the first 20 balls faced, before Laura Wolvaardt and Brits began to breach the field and accumulate runs.
They eventually put on 96 for the opening partnership before Wolvaardt played a leading edge and looped the ball up to be caught by Charlie Dean off Sophie Ecclestone for 53 runs.
Brits was backed up by an unbeaten 27 off 13 balls from veteran Marizanne Kapp as South Africa posted a defendable target while Ecclestone was England’s best bowler with 3-22.
In response, England got off to a blistering start with 53 runs in their first five overs before Sophia Dunkley holed out to Brits off Shabnim Ismail for 28 runs.
England stayed on course, however, with Danni Wyatt scoring 34 and Nat Sciver-Brunt 40 but Khaka’s last over, where she took the wickets of Amy Jones, Ecclestone and Katherine Sciver-Brunt turned the outcome in the home’s team favour.
Defending champions Australia, who have won five of the seven previous editions, beat India by five runs in Thursday’s first semi-final, also played at Newlands.