Harmer dismissed Devon Smith (47) and Leon Johnson (54), while part-timer Stiaan van Zyl claimed the important wicket of Marlon Samuels.
The first wicket fell to fast bowler Dale Steyn, who became the joint second-highest Test wicket-taker for South Africa when he had Kraigg Braithwaite caught at gully.
It was his 390th Test wicket, equal with Makhaya Ntini on South Africa’s all-time list, which is headed by Shaun Pollock, who took 421.
Harmer, 25, was added to the South African squad after the rain-hit second Test in Port Elizabeth ended in a draw. He replaced leg-spinner Imran Tahir in the only change in the South African team.
His first wicket came off the last ball before lunch when Smith tried to cut a ball too close to his body and chopped the ball onto his stumps. Smith and Johnson had put on 50 for the second wicket.
Johnson played some handsome strokes in making 54 off 84 balls with nine fours. He added 51 for the third wicket with Samuels before he was deceived by a quicker ball from Harmer which curved in with the arm and struck the batsman on his pad deep in his crease.
The leg before wicket decision was so obvious that Johnson did not even contemplate asking for a review, departing for the dressing room immediately.
Samuels looked in good form in making 43 off 70 balls but he hung his head in shame after playing a loose drive against the first ball sent down by van Zyl, bowling at a gentle medium pace. The ball went straight to Faf du Plessis at cover. -AFP