Liverpool leapfrogged Manchester City in the Premiership table after John Arne Riise's goal settled the game.
After Darius Vassell missed an early header, Liverpool's defence stifled City who struggled to create chances.
Late in the first half Steven Gerrard might have given Liverpool the lead, but his curling shot was narrowly wide.
Just past the hour the Liverpool captain made up for his miss by cleverly laying the ball into the path of Riise who rifled the ball home.
If the win lacked panache, Liverpool can point to a sixth successive cleansheet, their fourth in the Premiership, as they continue to climb the table.
Given the game attracted over 47,000 people, City will be disappointed they so rarely tested the Liverpool keeper Jose Reina.
Lee Croft did provide some early impetus for City down their right with a couple of promising runs.
Stephen Warnock curbed the first of those thrusts and then Jamie Carragher had to come across to block the second.
City's point of attack switched to the left and Kiki Musampa deceived Finnan to swing the ball into the penalty box.
Vassell managed to get in between Carragher and Warnock to reach Musampa's cross, but the City striker's header lacked direction.
Early in the second half Vassell tried his luck with a shot, an effort that had Reina scampering across his goal to save.
While City employed width, Liverpool deployed a more narrow approach in the opening period, trying to play their way through the home side's defence.
But despite enjoying plenty of possession they struggled to create chances for Peter Crouch and Djibril Cisse.
Crouch did manage to find his striking partner, but Cisse's attempted flick lacked sufficient power.
Just before half-time Gerrard burst into the box, turned inside Richard Dunne, only to curl his shot wide.
City were quickly back on the attack, Vassell riding a succession of tackles, before Steve Finnan ended the City striker's run.
Five minutes into the second half Liverpool manager Rafael Benitez withdrew Cisse, introducing Harry Kewell in an attempt to bring more width to the Liverpool attack.
Cisse seemed flabbergasted by the switch, shaking his head at his removal as he walked to the bench.
The change gave more penetration to the Liverpool attack and just past the hour the visitors took the lead.
Riise exchanged passes with Gerrard before firing the ball past David James with a superbly-taken shot.
With 10 minutes to go Fernando Morientes replaced Crouch, who is now without a goal for over 22 hours.
In stoppage time Joey Barton's shot was bravely blocked by Warnock as Liverpool held on to claim the three points.
Manchester City manager Stuart Pearce:
"The key for us is to provide the service to Andy Cole and Darius Vassell. We didn't do that and we have to try and improve that area.
"We matched them in the first-half, but in the second they had more nous.
"We have to acquire that know-how and learn how to keep possession in certain areas of pitches."
Liverpool manager Rafael Benitez:
"It was a difficult game, but in the second half we played well between the lines and created chances.
"The idea was to control the game in the first half and then use fresh legs in the second half to attack more."
Man City: James, Mills (Wright-Phillips 83), Dunne, Distin, Jordan (Jihai 75), Croft, Barton, Ireland, Musampa (Sinclair 68), Cole, Vassell.
Subs Not Used: Sibierski, Onuoha.
Liverpool: Reina, Finnan, Hyypia, Carragher, Warnock, Gerrard, Hamann, Sissoko, Riise (Luis Garcia 77), Cisse (Kewell 51), Crouch (Morientes 81).
Subs Not Used: Dudek, Potter.
Booked: Cisse, Crouch.
Goals: Riise 61.
Ref: A Wiley (Staffordshire).