The first chance of the game fell to Roma, as Leandro Paredes’ shot from the edge of the box dipped just over. The Argentine would then get a better opportunity to score from the penalty spot, after Ali Dembele was deemed to be too aggressive in his challenge in the area.
Paredes stepped up and made no mistake as he struck right into the corner, giving the visitors a half-time lead.
Unfortunately for them, Juventus were also winning their match at the break, meaning Roma remained outside of the UCL places.
The Wolves started the second half strongly and quickly doubled their advantage through Alexis Saelemaekers.
He pounced on a lofted pass from Matias Soule and rifled home from close range, giving Vanja Milinkovic-Savic no chance.
The goalkeeper did stop another Saelemaekers effort just minutes later, as Roma looked to put the match to bed with news that Venezia drew level with Juventus, meaning they had jumped into the UCL spots as things stood.
Torino did not offer much in response, but thought they should have had a penalty after the hour mark, which was waved away. Soulé - whose five goals this season have all come away from home - also went close, but curled just wide.
The hosts did push in the latter stages though as Sergiu Perciun and Che Adams forced decent saves from Mile Svilar.
Roma did have the ball in the net again through Bryan Cristante, but his goal was disallowed for offside, while Adams also hit the post for Torino.
Still, Roma held on for victory, but Juventus also found a winner in their match, meaning the visitors just missed out on UCL qualification. Still, they qualified for the UEFA Europa League in fifth in Ranieri’s final game in charge, while Torino slipped to 12th after a fifth successive match without a win.
Flashscore Man of the Match: Matias Soule (AS Roma)
