|Cheetahs (16) 28|
|Tries: Small-Smith, Barry 2 Cons: Zeilinga 2 Pens: Zeilinga 3|
|Scarlets (11) 21|
|Tries: J Davies, Nicholas Cons: D Jones Pens: D Jones 2, Prydie|
Cheetahs condemned title-holders Scarlets to only their second Pro14 defeat of 2017-18 in a thrilling encounter in Bloemfontein.
However, the setback did not knock Wayne Pivac's side off top spot in Conference B.
The hosts led at the break as William Small-Smith and James Davies exchanged tries.
Wing Craig Barry's stunning 50-metre solo try was the highlight. He scored again after Ioan Nicholas' reply.
The Llanelli-based region had already met Pivac's target for their mini tour to South Africa by beating Southern Kings with a bonus point in the previous round.
A losing bonus point against the stronger of the two South African teams has followed.
The half-back issue was caused by injuries and international calls and they will welcome back Wales autumn players Gareth Davies and Aled Davies before their European Champions Cup campaign restarts when they host Benetton on Saturday, 9 December.
However, a shoulder injury ruled Gareth Davies out of Wales' win over South Africa, a Test victory gained as Scarlets awaited their kick-off.
Fly-half Dan Jones kicked the game's first points, but Fred Zeilinga put the hosts ahead with two penalties of his own before William Small-Smith scored the game's first try.
Flanker James Davies went over in his first appearance since September after shoulder surgery as the opening period drew to a close.
The next score proved crucial. It will also be a contender for try of the season in the tournament.
Barry gathered a long clearance, picked his line and weaved his way past a floundering defence.
Zeilinga's conversion gave the hosts a 12-point cushion with an hour gone and although Nicholas showed a clean pair of heels to the Cheetahs, they were not finished.
Barry's second was a short-range stroll, but wing Tom Prydie ensured the visitors went home with a losing bonus point with his 76th-minute penalty.
Cheetahs: Clayton Blommetjies; Craig Barry, William Small-Smith, Nico Lee, Makazola Mapimpi; Fred Zeilinga, Shaun Venter; Charles Marais, Torsten van Jaarsveld (capt), Johan Coetzee, Carl Wegner, Hugo Reniel, Paul Schoeman, Rynier Bernardo, Junior Pokomela.
Replacements: Jacques du Toit, Ox Nche, Tom Botha, Jasper Wiese, Daniel Maartens, Tian Meyer, Tertius Kruger, Sibhale Maxwane.
Scarlets: Johnny McNicholl; Tom Prydie, Steff Hughes (capt), Paul Asquith, Ioan Nicholas; Dan Jones, Mike Phillips; Dylan Evans, Ryan Elias, Werner Kruger, Lewis Rawlins, David Bulbring, Tadhg Beirne, James Davies, Will Boyde.
Replacements: Taylor Davies, Rhys Fawcett, Simon Gardiner, Steve Cummins, Josh Macleod, Herschel Jantjies, Ioan Hughes, Morgan Williams.
Referee: Quinton Immelman (SARU)
Assistant referees: Stephen Geldenhuys (SARU) and Jaco Kotze (SARU)
TMO: Marius Jonker (SARU)