Chasing 186, the hosts finished on 171/9, undone by a brilliant spell from Deepti Sharma, who returned figures of 5/16 - her second five-wicket haul in T20 internationals.
The off-spinner, previously wicketless in her last five matches, struck early by removing Sune Luus, who still top-scored with a fluent 40 off 24 balls.
Sharma then tore through the middle order, halting momentum despite useful contributions from Tazmin Brits (30) and Kayla Reyneke (21). Captain Laura Wolvaardt managed just 18 in a rare low return.
Earlier, India had set a competitive 185/5, thanks largely to a decisive late partnership. Sharma starred with the bat as well, striking an unbeaten 36 off 26 deliveries, combining with Richa Ghosh (34* off 18) in a 65-run stand for the sixth wicket that shifted the momentum. Jemimah Rodrigues also impressed with 43 off 29 balls.
Reyneke was South Africa's standout bowler, taking 2/10, including the key wicket of Harmanpreet Kaur (22).
Sharma's outstanding all-round effort - reminiscent of her Player of the ODI World Cup-winning form last year - proved decisive as India claimed the win, with the final match set for Benoni on Monday.