Cape Town - England edged the Proteas by two wickets in a thrilling semi-final match that went down to the last over in Bristol on Tuesday.
The hosts will play the winners of the second semi-final between India and Australia at Lord's on Sunday.
South Africa were restricted to a modest 218/6 at the end of their innings after winning the toss and electing to bat first.
The main contributions came from Mignon du Preez (76*) and Laura Wolvaardt (66), whose half-centuries came as the side lost big hitters, Lizelle Lee (7), captain Dane van Niekerk (27) and Chloe Tryon (1).
The first was Lee, who was bowled by Anya Shrubsole (1/33) in the sixth over.
Her partner, Wolvaardt and Trisha Chetty added 27 for the second wicket before the loss of the latter for 15, stumped off Natalie Sciver for 15.
Eighteen-year-old Wolvaardt and Mignon du Preez pulled back the innings well, sharing a 77-run stand for the third wicket before the youngster lost hers when she was bowled by Heather Knight (1/8) in the 32nd over.
Marizanne Kapp lasted just two deliveries as miscommunication between her and Du Preez saw her run out for one.
Van Niekerk hit 21 runs from 25 deliveries, but another misunderstanding with Du Preez saw the skipper run out in the 42nd.
Chloe Tryon followed two balls later when she hit the ball straight into the bowler, Jenny Gunn’s hands.
Du Preez and Suné Luus (21*) knuckled down, hitting 48 from 47 balls, ending the innings on a positive note.
The Proteas will be the first to admit that they felt they
were 30 runs short going into the English innings, but early strikes by
birthday girl, Ayabonga Khaka gave the visitors hope early on.
The right-armer accounted for openers Lauren Winfield (20) and Tammy Beaumont (15) in the ninth and 13th overs.
England looked to be cruising on 139/2 in the 33rd.
Twenty-five runs in extras, including 17 wides and three no balls helped them along, but the Proteas began to roar.
The dangerous Sarah Taylor was run out by Van Niekerk on 54 in the 33rd over, followed by a magical follow-up over by Luus, who dismissed Heather Knight and Natalie Sciver for 30 and three respectively.
Kathrine Brunt entered the fray at 145/5 and hit 12 runs before she was clean bowled by Moseline Daniels seeing the hosts later slip to 173/7.
Fran Wilson and Jenny Gunn brought composure to the innings, adding 40 runs for the seventh wicket.
The latter struck 27 at a run a ball, while the former added 30 from 38 to creep their side closer.
Marizanne Kapp threw a spanner in the works at the end of the 48th over, removing Wilson and the drama escalated when Shabnim Ismail took out Laura Marsh with England needing two runs from the last three deliveries.
But in the end, the experienced Shrubsole hit a boundary from her first delivery to give her side victory.