Ox Nché, despite often catching the attention of the referee, had a busy evening. Captain Siya Kolisi also made some telling contributions before he made way for Jasper Wiese in the 70th minute.
The Boks lost Damian Willemse inside the first 20 minutes when he left the field for a head injury assessment. The knock was severe enough to prevent his return, which paved the way for Frans Steyn.
He made a huge impact, as did scrumhalf Cobus Reinach, although his box kicks, much like that of Herschel Jantjies, failed to hit the spot.
Jesse Kriel, however, played like a man short of game-time and out of position,
This was an error strewn match, albeit in atrocious conditions, and the Boks only got a firm footing in the closing stages.
Before that, fortunes fluctuated as the teams traded penalties.
The Boks often found themselves on the wrong side of the law in the first half, and matters reached near boiling point when they conceded a succession of penalties which led to a yellow card for Nché.
Wales prop Rhys Carre returned the favour five minutes later when he illegally removed Springboks from a maul.
Apart from conceding too many penalties, the Springboks didn't capitalise on the opportunities they had in the Welsh 22. Although the Boks line-out was solid with Lood de Jager standing tallest, Wales succeeded in repelling the tourists' driving maul in the first half. Wales took liberties in that regard as they often interfered with the support players in an attacking Boks line-out.
The Boks' tactical kicking could have been sharper.
Wales almost got over the try line on a few occasions, but fell short for different reasons.
Louis Rees Zammit came close in the ninth minute, but desperate Springbok defence in the nick of time shepherded him into touch.
Wales saw a potential try scoring opportunity go begging when a pitch invader and his pursuers put Liam Williams off his stride, giving the Boks cover defence time to recover.
WALES (12) 18
SA (9) 23
Wales - Penalties: Dan Biggar (6).
Springboks - Try: Malcolm Marx. Penalties: Handré Pollard (4), Frans Steyn, Elton Jantjies.