Paris St-Germain lost in the league for just the second time this season as Nantes profited from a superb opening 45 minutes to upset the leaders.
Mauricio Pochettino’s side – unbeaten in Ligue 1 since October – fell behind to a smart Randal Kolo Muani finish.
Nantes keeper Alban Lafont was inspired all night and made key saves before Quentin Merlin fired in a superb second and Ludovic Blas slammed in a penalty.
Neymar struck just after half-time but had a tame penalty saved on the hour.
Brazilian Neymar’s woeful effort was weak and summed up a testing night for PSG, who were rocked by Nantes’ adventurous first-half approach.
Much credit must go to keeper Lafont, who denied Lionel Messi at 1-0, Kylian Mbappe at 2-0 and then stood tall to save and hold another Neymar effort when the frontman had an age to size up a chance before the interval.
That miss from Neymar was further punished when Georginio Wijnaldum handled in the area in stoppage time, allowing Blas to open up a three-goal lead at the break.
Messi – making an 800th club appearance of his career – fed Neymar in the build-up to PSG’s goal two minutes after the interval.
And it looked like they would build momentum when Dennis Appiah brought down Mbappe in the box.
But Lafont stood up to the penalty and has now saved three of the last four spot-kicks he has faced in Ligue 1.
Mbappe missed another superb opportunity when a loose ball fell his way seven yards out and Lafont was again on hand to turn away a late strike from Julian Draxler.
Nantes jump from 10th to fifth in Ligue 1, while Marseille can cut the gap to PSG at the top to 10 points if they beat Clermont at home on Sunday.