South Africa needed just over an hour to take the seven remaining wickets as England collapsed from their overnight 52 for three to 101 all out.
Fast bowler Rabada took six for 32 after taking seven for 112 in the first innings.
The win was consolation for South Africa as England won the series 2-1.
England’s collapse started in the third over of the day when James Taylor gloved a lifting delivery from Morne Morkel to wicketkeeper Quinton de Kock.
In the next over Joe Root edged off-spinner Dane Piedt to Dean Elgar at slip.
The 20-year-old Rabada, who took two of the three wickets that fell on the fourth evening, thought he had completed his first ten-wicket haul in Tests when Jonny Bairstow edged him to slip where AB de Villiers took a leaping catch.
But Bairstow won a reprieve when a review showed that Rabada had sent down a no-ball.
With his next delivery, though Rabada had Bairstow caught behind.
Ben Stokes was caught on the midwicket boundary off Morkel and Rabada wrapped up the match by dismissing Chris Woakes and James Anderson off successive deliveries.
Morkel finished with three for 36.