Hosts’ batsmen falter again in a 61-run loss that allows South Africa an unbeatable 2-0 lead in the three-match series.
Quinton de Kock tied a One-Day International record as South Africa beat Zimbabwe by 61 runs to take a 2-0 lead in the three-match series.
The 21-year-old wicketkeeper made 38 to equal the mark of England’s Jonathan Trott in reaching the landmark of 1,000 runs in only 21 ODIs.
Faf du Plessis top-scored with 55 as South Africa were bowled out for 257 in 49.4 overs after being put in to bat.
It was only the third time in 34 ODI meetings that Zimbabwe had bowled out their southern African rivals.
Out-of-form South Africa captain AB de Villagers was involved in a bizarre dismissal.
He missed a delivery from spinner Prosper Utseya and, in the mistaken belief that Richmond Mutumbami did the same, set off for a single only for the bemused wicketkeeper to run him out for one.
Sean Williams (55) then passed 50 for the second successive match but Zimbabwe were bowled out for 196 in 49.1 overs.
Pace man Wayne Parnell took three for 28 while all-rounder Ryan McLaren picked up three for 21.
The final match is also in Bulawayo on Thursday before South Africa and Zimbabwe are joined by Australia for a triangular series that stars in Harare on Monday.