Lyon's annual capitulation at the Stadium Municipal saw Wissam Ben Yedder bag a brace as Toulouse climbed up to seventh in Ligue 1.
Ben Yedder's double and Etienne Capoue's last-minute strike goal made it 11 goals conceded without reply from Lyon's last seven trips to the south west, as Remi Garde's men missed the opportunity to dislodge Paris St Germain from the top of the table.
Lyon, who remain in third place, were in search of a first win on the road since the opening day of the season, but the early omens were not promising.
Ben Yedder had the ball in the back of the net within nine minutes as he turned home Franck Tabanou's rebound. The linesman's flag saved the visitors on that occasion but they remained under the cosh throughout.
Toulouse carved out a solid chance in the 32nd minute, the move beginning as Moussa Sissoko fed Etienne Didot on the right flank.
Lyon goalkeeper Remy Vercoutre was stranded as Didot chipped him from close range, but Mouhamadou Dabo raced back to clear the ball off the line.
The visitors were rattled and two minutes later so was their woodwork as Capoue cannoned a powerful header against the bar. Ben Yedder rifled the rebound back at Vercoutre but the ball sailed into the stands.
Garde had a few minutes to motivate his players over the break but whatever he said did not work as Toulouse continued to dominate.
And the hosts took a deserved lead five minutes after the restart as Tabanou picked out Ben Yedder to head the ball home off the inside of a post.
Lyon enjoyed their first shot on goal as Yoann Gouffran drove a free-kick in at Ali Ahamada, but to no avail.
A second goal was inevitable and Ben Yedder notched his ninth goal of the season with a confident finish thanks to a fine interception from Serge Aurier.
There was still time for somebody else to add gloss to the scoreline but Ben Yedder was heavily involved once again.
The 22-year-old jinked past Vercoutre, only to slip at the last minute, but not before spilling the ball to Capoue who poked the ball into an empty net to rubberstamp Lyon's second defeat of the season.