The struggling Scarlets suffered their fourth successive Pro 12 defeat as Treviso moved into the top six.
Treviso took charge when the Scarlets were a man down after Rhys Thomas was sinbinned as Ludovico Nitoglia's try quickly followed Kris Burton's penalty.
But Welsh under-20 wing Liam Williams dragged the Scarlets back into the game with a try that Dan Newton converted.
Brendan Williams' try won it for the Italians as the Australian wing added to the ten points kicked by Burton.
The Treviso fly-half converted both tries and bagged a second penalty in the second-half.
Treviso: Ludovico Nitoglia, Tommaso Iannone, Ezio Galon, Luca Morisi, Brendan Williams, Kris Burton, Alberto Chillon, Marco Filippucci, Francesco Minto, Manoa Vosawai, Benjamin Vermaak, Antonio Pavanello, Augusto Allori, Enrico Ceccato, Michele Rizzo
Replacements: Diego Vidal, Matteo Muccignat, Carlo Fazzari, Valerio Bernabò, Gonzalo Padrò, Willem De Waal, Simon Picone, Alberto Di Bernardo
Scarlets: Dan Newton, Lee Williams, Nick Reynolds, Gareth Maule, Liam Williams, Aled Thomas, Ruki Tipuna, Iestyn Thomas (Capt), Emyr Phillips, Rhys Thomas, Lou Reed, Damian Welch, Rob McCusker, Richie Pugh, Ben Morgan.
Replacements: Craig Hawkins, Phil John, Rhodri Jones, Craig Price, Johnathan Edwards, Gareth Davies, Adam Warren, Dale Ford.
Referee: David Wilkinson (IRFU)
Assistant Referees: Matteo Liperini, Simone Colantonio (SRU)
Citing Commissioner: Alberto Recaldini (FIR)