The Argentinian stabbed home from close range with five minutes of a tight contest remaining, securing a first win at the Britannia Stadium in seven visits.
Yet victory may still have come at a cost for Roberto Mancini's men after captain Vincent Kompany limped off in the first half. City are already short on defenders with Kolo Toure at the African Nations Cup, and Kompany's absence saw the controversial three-man back line deployed again.
City had the better chances in the game with David Silva hitting a post and Stoke may have been lucky not to have Glenn Whelan sent off for a bad tackle on Javi Garcia.
City suffered a serious blow just after the half-hour when Kompany signalled that he could not continue with what appeared to be a leg injury. The Belgian limped off down the tunnel and was not immediately replaced.
Mancini sent on Sergio Aguero in the hope of giving his side more of a cutting edge and Gareth Barry did get behind the Stoke defence only to run into Sorensen.
Edin Dzeko struck a good effort from the left but had it deflected wide before Aguero fired a powerful shot into the side-netting. Stoke also freshened up their attack as Cameron Jerome and Peter Crouch entered the fray in search of a late winner.
Crouch immediately made his presence felt as he stood above Joleon Lescott to reach a Ryan Shotton cross but headed narrowly over.
And Stoke were made to pay as Zabaleta found himself in the right place to snatch the winner five minutes from time.
Aguero and Silva combined outside the area and the ball was played in for Dzeko, whose touch may have been unintentional but proved a perfect pass for Zabaleta, who smashed home unchallenged six yards out. Stoke pressed until the end but Jerome skied a good opportunity just as the game went into five minutes of injury time.