Napoli dominated the second half as substitute Dries Mertens also deflected an effort on to the crossbar.
The hosts had the better chances throughout as Fabian Ruiz and Arkadiusz Milik had shots saved by Liverpool goalkeeper Alisson.
Jose Callejon’s volley was also kept out later in the second half.
Liverpool’s best effort came via Mohamed Salah, who shot wide after the break, but Jurgen Klopp’s side failed to record a single effort on target in Italy.
Home goalkeeper David Ospina also reacted quickly to prevent Sadio Mane and Salah running on to throughballs late on.
Liverpool’s defence eventually unlocked
Callejon had also threatened but he was caught offside as he sprinted away down the right before Alisson produced a fine save to deny him from close range.
Liverpool calmed things down, sending throughballs to Mane and Salah as they tried to silence a hostile crowd in Naples.
But they came under pressure again when Mertens and Piotr Zielinski were introduced with 20 minutes to go.
Centre-back pairing Joe Gomez and Virgil van Dijk had been Liverpool’s standout performers before the break, but they were forced deeper into their own half as the match went on.
Insigne’s goal was just the sixth conceded by the pair in their eighth appearance alongside each other.
Disappointment for Keita
Klopp made just one change to the side that drew 1-1 with Chelsea in the Premier League on Saturday as Naby Keita replaced Jordan Henderson in midfield.
Keita, who joined from RB Leipzig for £48m this summer, was making his first appearance in the Champions League for Liverpool but it came to a premature end when he was taken off on a stretcher after just 17 minutes.
He looked in some distress, appearing to point to his lower back as he received treatment on the pitch for a minute or more.
The 23-year-old had struggled to settle into the game before falling to the ground without contact.
He had made just seven passes and lost possession five times before his evening came to an end but, after his promising displays throughout pre-season, Liverpool fans will hope the injury is not too serious.
Improved Napoli deserved win
It was only Napoli’s third win in their past 10 Champions League games but they deserved all three points.
Liverpool looked disjointed from the off and lacked fluidity in attack, as well as muscle in midfield.
The early injury to Keita caused disruption and although Henderson added guile, he was unable to create much going forward.
Instead, Napoli used the width well as Milik, Callejon and Ruiz all saw lots of the ball.
There were early signs of danger in the first half when Marek Hamsik’s fizzing diagonal ball found its target before Callejon was ruled offside.
Callejon was able to cross into the box on five occasions before eventually picking out Insigne for the winner.
Mario Rui was equally effective on the opposite wing, providing six crosses of his own, while Insigne had five shots before hitting the back of the net with his first on target.
It was a much improved performance from Napoli following their disappointing 0-0 draw with Red Star Belgrade in their opening group match.
The best of the stats
Napoli have won nine of their 13 Champions League group stage home games (D2 L2).
Liverpool failed to muster a single shot on target in a Champions League game for the first time since February 2006 (0-1 vs Benfica).
Liverpool lost a Champions League game thanks to a 90th-minute winner for the first time since December 2009, when Alberto Gilardino scored for Fiorentina.
David Ospina has kept a clean sheet in both of his Champions League games for Napoli – just one fewer than he managed in 13 starts with Arsenal in the competition.
‘We caused the intensity ourselves’ – What they said
Liverpool manager Jurgen Klopp: “We had our moments, but too often the formation was not right or we moved in the wrong spaces. The job of the midfield three was nearly impossible. You have to stay calm in a situation like that, but we were too hectic with the ball.
“We had good moments, but not enough. A 0-0 away from home is OK, but we made a mistake before their goal. That’s the second time this season that we have conceded a goal like that.
“It was intense, but we caused the intensity of the game ourselves. It was an interesting looking group before we started and it’s still interesting now. We want to play better than we did tonight, but even if we don’t play brilliantly, we want a result. Tonight we weren’t as good as we could be.”
Man of the match – Lorenzo Insigne