Jack Edwards took his maiden one-day international five-wicket-haul (5/67 off 10 overs) but David Millar smashed nine sixes on his way to 142 off 93 balls and captain Temba Bavuma contributed 103 off 116.
Edwards went wicketless in his ODI debut, but was the pick of the bowlers for Australia on Sunday and took the important wickets of both centurions.
Josh Hazlewood took 3/70 from his 10 overs which included the wicket of Aiden Markram with the first ball of the innings, when he was caught by Cooper Connolly who leapt high in the air at cover.
Australia's attack was depleted after Nathan Ellis had a side issue and was only able to bowl four overs.
Skipper Mitch Marsh, who won the toss and sent South Africa in, turned to Connolly (0/27 off four) and Matt Renshaw to help get through the overs.
Adam Zampa was the most expensive of the bowlers, conceding 77 runs from his nine overs, without taking a wicket.
Australia trail the best-of-three ODI series 1-0 and made two changes to their side after losing in Durban.
Alex Carey replaced wicketkeeper Josh Inglis who will miss the rest of the ODIs due to a broken finger, while Xavier Bartlett (1/70 off 10 overs) was brought in to help lead the attack, replacing Mitchell Starc.