It was the second time in five days that the host nation put their powerful neighbours to the sword in a warm-up event for the ICC World Twenty20 in Sri Lanka this September and October.
Zimbabwe won by 29 runs last Wednesday in the pool phase of a tournament that included Bangladesh, but lost by six wickets to South Africa on Saturday and entered the final as outsiders.
South Africa made 146-6 off 20 overs with Faf du Plessis (66) top scoring and Zimbabwe reached 150-1 with 17 balls to spare thanks to a superb unbeaten partnership between captain Brendan Taylor (59) and Hamilton Masakadza (58).
Many South African cricket writers had argued against the Proteas going to Harare, saying Zimbabwe and Bangladesh were too weak to provide meaningful opposition.
"I am over the moon after beating a quality team and so proud of the boys," said No 3 batsman-cum-wicketkeeper Taylor. "We don't get days like these very often so we are going to enjoy ourselves tonight."
"The squad has been working really hard over the past three months and we accept that we must put in more hard yards than some other teams. After losing on Saturday, I just told the boys to remain calm."
It was a dismal tournament for South Africa opener and captain Hashim Amla as an 88 not out was followed by a string of low scores and he made just three runs in the final after big hitter Richard Levi went for a duck off his first ball.
"I thought 146 was a defendable total so hats off to Zimbabwe," said Amla. "While Zimbabwe were the better team on the day, we have learnt a lot regarding who should go to Sri Lanka and who should hot."
Taylor was voted Man of the Match and the four half-centuries of No 1 batsman Masakadza during the eight-day tournament earned him the Man of the Series award.
South Africa 146-6 (20 overs) (F. du Plessis 66, A. Morkel 34 not out, C. Ingram 19; K. Jarvis 2-22) v Zimbabwe 150-1 (17.1) (B.Taylor 59 not out, H. Masakadza 58 not out, V. Sibanda 23)
Hamilton Masakadza, Vusi Sibanda, Brendan Taylor (captain and wk), Stuart Matsikenyeri, Malcolm Waller, Elton Chigumbura, Graeme Cremer, Prosper Utseya, Kyle Jarvis, Christopher Mpofu, Richard Muzhange.
Hashim Amla (captain), Richard Levi, Faf du Plessis, Colin Ingram, Justin Ontong, Albie Morkel, Dane Vilas (wk), Robin Peterson, Wayne Parnell, Chris Morris, Lonwabo Tsotsobe.Post published in: Cricket