Left-arm spinner Ravi Jadeja took 5-30 as the Proteas, who have passed 200 only once in six innings during the series, again failed with the bat.
AB de Villiers top scored with 42 after India were taken to 334 by Ajinkya Rahane's 124, his first Test century on home soil.
India already have an unassailable 2-0 series lead.
If they wrap up a 3-0 series victory they will climb to second in the world rankings behind South Africa, who will lose top spot if they are beaten in their next Test series at home to England.
After all 20 South Africa wickets fell to spin in their third-Test defeat in Nagpur, the top order was again found wanting against the turning ball as Jadeja accounted for four of the top five.
Paceman Umesh Yadav had opener Dean Elgar caught behind before Jadeja got to work.
Recalled opener Temba Bavuma was bowled, captain Hashim Amla was caught behind looking to cut and Faf du Plessis was out sweeping for his third duck of the series.
De Villiers watched most of the carnage from the other end but his counter-attack ended when he was caught in the deep off Jadeja, the ninth wicket to fall.
Earlier, Rahane not only added the 11 runs he needed for a century, but also combined with Ravichandran Ashwin for 98 valuable eighth-wicket runs.
At number five, his chance of batting again in the match may hinge on whether India opt overnight to enforce the follow on.
South Africa are 231 behind and their top score in the series in 214.
India bowled South Africa out for 121 on day two to take firm control of the fourth and final Test in Delhi.