Cape Town - South Africa lost opener Dean Elgar at the stroke of lunch to reach 48 for one at the break on the second day of the third and final test in reply to West Indies' first innings total of 329.
Alviro Petersen scored a brisk unbeaten 26 before the visitors broke through with paceman Jason Holder trapping Elgar leg before wicket for eight runs.
Petersen hit his 26 off 44 balls as South Africa also profited from some sloppy bowling, which saw West Indies give away 14 extras in 11.5 overs.
Earlier, the tourists lost their remaining four wickets for the addition of 53 runs as they were bowled out inside the first hour of play at Newlands, where early cloud was quickly replaced by bright sunshine.
Fast bowler Dale Steyn claimed two more wickets as West Indies spent just 49 minutes at the crease in adding to their overnight total of 276 for six.
Jermaine Blackwood, restored to the side after being dropped for the last test, top scored on 56 before being trapped leg before wicket by Steyn for the first scalp of the day.
The tail followed in quick procession after that, although the last three wickets were interspersed with some lusty blows off the South African pace attack.
Morne Morkel took the last two wickets as the West Indies innings was concluded one ball short of 100 overs.
Steyn on Friday had taken two wickets to become his country's second highest wicket taker and two more on Saturday increased his career tally to 393. He is now 28 behind Shaun Pollock's record of 421.
South Africa lead the three-test series 1-0 after success in the first test in Pretoria and a rain-affected draw in the second test in Port Elizabeth last week.