Scarlets' impressive run of form continued as they secured a bonus-point victory over Bulls in Llanelli.
The hosts had led with first-half tries from Dan Davis, Kemsley Mathias and Gareth Davies.
But the South African side bullied their way back into the contest with Cyle Brink and Janko Swansepol adding to Zak Burger and Stravino Jacobs' efforts.
Johnny McNicholl scored late on to give Scarlets a much needed league win.
Dwayne Peel's side have now won seven of their last eight games, including a clean sweep in the European Challenge Cup Pool stage.
The result also lifted Scarlets above Dragons to 15th in the URC table, while Bulls are fourth.
Bulls had beaten Scarlets 57-12 when the two sides last met at in South Africa, but the visitors' busy travel schedule looked to have taken its toll in west Wales.
Scarlets started with confidence in front of a good home crowd and took an early lead when Bulls conceded a penalty on the kick chase, which Sam Costelow slotted over in what was an impressive 15 point haul for the young fly-half.
Bulls hit back on their first attack, a gap opened up in the Scarlets defence which allowed Burger an easy snipe under the posts.
Uncharacteristic Bulls errors
Scarlets re-took the lead through in-form flanker Davis, who cut through the defence with a neat sidestep before twisting and turning his way to the line for a try awarded by the Television Match Official (TMO).
Scarlets added another as Mathias muscled over after a spell of forward pressure.
Scarlets continued to express themselves in an entertaining first half, with Dan Davis again making good inroads on a counter attack before Costelow kicked downfield to a willing chaser in Gareth Davies who scooped up the ball before crossing.
Bulls looked dangerous, but their uncharacteristic errors let the the hosts off the hook.
Scarlets kept the scoreboard ticking over, opting for posts when Bulls conceded a penalty at the breakdown, with Costelow continuing his 100% record from the tee.
The hosts' momentum was halted five minutes before the half when centre Joe Roberts was shown a yellow card for diving through the ruck when Bulls were on a promising attack.
Bulls made them pay almost immediately, a cross-field kick saw Jacobs outleap Costelow to crash over the line.
Roberts returned shortly after the break to boost Scarlets, who after scuppering a five metre driving lineout, chose to kick for posts when the next penalty came on offer. Costelow was on target once more.
Scarlets then repaid the favour after conceding a penalty on the restart, but Bulls blew their chance.
Bulls then grew into the game and looked a different side as they started to dominate and eventually converted pressure into points when their big forward carriers gave Brink the opportunity to crash over.
Sending the crowd wild
Costelow made way for Dan Jones as Scarlets looked to re-take control of territory and possession, but they began to cough up penalties as Bulls piled on the pressure.
They bagged a deserved bonus-point try on the hour when the giant prop Swansepol crashed over, Smith adding the extras to give Scarlets a narrow lead.
Bulls could have taken the lead with a kickable penalty, but in a buoyant mood they kicked for the corner, but Scarlets defended well and Dafydd Hughes won a vital turnover which allowed them to clear their lines.
Bulls continued to turn down kickable penalties, once again opting for the corner, but knocked on much to Scarlets' relief as the clock ticked on.
Those decisions proved costly as Scarlets broke on a rare counter attack, with Bulls wing David Kriel shown a yellow card for an illegal tackle on Ryan Conbeer.
Scarlets took advantage of the extra man and quick hands released McNicholl on the far side to score and send the crowd wild.
McNicholl almost added a second in a breathless finale, but the final ball failed to find Dane Blacker, but it did not matter as the final whistle blew for a hard-fought victory for the home side.
Scarlets head coach Dwayne Peel told BBC Sport Wales: "It was a tale of two halves, I thought first half we were particularly good, we started really sprightly and got over the line.
"And then second half, I felt like they came after us physically in those tight areas, which we knew they would.
"I did feel like we were a bit naive, we didn't respect territory enough. But I am really pleased to come back at the end, credit to the forwards, there were a couple of times when they ignored going for three points, and we held them out, it was a huge defensive set up.
"I am delighted with the win because they are a top-end team, they came here fully-loaded, so it's a big, big win for us, this season and in general."
Scarlets: Johnny McNicholl; Steff Evans, Joe Roberts, Ioan Nicholas, Ryan Conbeer; Sam Costelow, Gareth Davies; Kemsley Mathias, Daf Hughes, Sam Wainwright, Vaea Fifita, Sam Lousi, Aaron Shingler (capt), Dan Davis, Sione Kalamafoni.
Replacements: Taylor Davies, Steff Thomas, Harri O'Connor, Morgan Jones, Carwyn Tuipulotu, Dane Blacker, Dan Jones, Eddie James.
Bulls: Johan Goosen; David Kriel, Lionel Mapoe, Harold Vorster, Stravino Jacobs; Chris Smith, Zak Burger; Gerhard Steenekamp, Johan Grobbelaar, Mornay Smith, Ruan Vermaak, Ruan Nortje (capt), Marco van Staden, Cyle Brink, Elrigh Louw.
Replacements: Jan Hendrik Wessels, Francois Klopper, Simphiwe Matanzima, Janko Swanepoel, Nizaam Carr, Embrose Papier, Cornal Hendriks, Wandisile Simelane.
Match officials
Referee: Andrew Brace (Ireland)
Assistants: Adam Jones (Wales) & Ben Breakspear (Wales)
TMO: Brian McNeice (Ireland)