After electing to bat first, South Africa were bowled out for 98 in the 17th over, with spin trio Lakshan Sandakan, Dhananjaya de Silva and Akila Dananjaya combining to take seven wickets.
Quinton de Kock scored three boundaries in the first over but, for the second time in space of two days, his opening partner Hashim Amla departed for a duck.
De Kock was run out with 30 on the board before left-arm wrist-spinner Sandakan swept aside the Proteas middle order with three wickets in the 11th over of the innings.
The visitors finished two runs short of their previous low score of 100 against Pakistan in 2013.
Proteas fast bowler Kagiso Rabada responded by removing openers Kusal Perera and Kusal Mendis in the first over before Dinesh Chandimal, who was returning from a six-match suspension, steadied the innings alongside De Silva.
Seamer Junior Dala broke a 53-run partnership with the wicket of De Silva but Chandimal’s unbeaten 36 ensured the hosts finished the tour with a third consecutive victory.