Despite being four places below their opponents at the start of play, Toulouse started the brighter of the two sides at the Stadium Municipal.
They made that domination count in the ninth minute courtesy of Pantxi Sirieix, who slotted the ball into the bottom right-hand corner of the net from 12 yards out.
Les Pitchouns went on to double their advantage 13 minutes later. On this occasion Sirieix was the creator, crossing for Emmanuel Riviere to head into the net from close range.
Mouhamadou Dabo had Lyon's best chance to pull a goal back before the break, but he shot over from 18 yards out.
Paulo Machado and Riviere both went close to putting match out of Lyon's reach early in the second half, but both were denied by defensive blocks.
As the match drew to a close Lyon striker Alexandre Lacazette saw his curling effort graze the post before bouncing to safety, while Michel Bastos wasted their final chance to salvage something from the game when he shot wide from 12 yards.
The home side made sure of the points in stoppage time when Umut Bulut added their third of the match.