The visitors completely dominated the match, and led twice through goals from Yaya Toure and Edin Dzeko, both of which came from Samir Nasri corners.
But Villa netted with each of their three shots on target, the first from an offside Karim El Ahmadi, the second a beautiful free-kick by Leandro Bacuna and the third a tap-in for Andreas Weimann after a comical defensive mix-up between Matija Nastasic and Vincent Kompany.
The result leaves City three points short of the summit, although that could increase further with Arsenal in action later. Villa, meanwhile, move into the top half.
Pre-match: Bacuna continued as a make-shift right-back for Villa, who were still without the injured Christian Benteke. City made a late change to the starting XI as Nasri replaced Jesus Navas, while James Milner was handed a start against his former club in the absence of David Silva.
40’ – CHANCE: One of countless opportunities for City as two Villa defenders clear the ball off the line after Toure nearly forces a corner past Guzan.
45’ – GOAL (Villa 0-1 City): Finally they break the deadlock as Toure rifles it in off Guzan from Nasri’s corner, which was City’s ninth of the half.
51’ – GOAL (Villa 1-1 City): El-Ahmadi is offside when Bacuna played him in, but the flag stays down and the midfielder finishes low to the left.
56’ – GOAL (Villa 1-2 City): City move back in front as Dzeko heads Nasri’s corner beyond Guzan.
73’– GOAL (Villa 2-2 City): Wonderful free-kick from Bacuna, curled past Joe Hart, after a needless foul from Nastasic on Weimann.
75’ – GOAL (Villa 3-2 City): Idiotic defending by Nastasic and Kompany to let a Guzan punt bounce between them. Weimann gobbles it up.
Manchester City had 67% possession, 21 shots on target and scored twice. Villa had 33% possession, three shots on target and scored all three.
Manuel Pellegrini has not won away in the league for eight matches, both as Malaga and City boss.
TALKING POINT: Should El Ahmadi’s goal have stood? Clearly not, as he was offside when Bacuna played him through. Got Villa level the first time, and had it not counted the match may well have shaped up differently.
MAN OF THE MATCH
Leandro Bacuna (Aston Villa): Despite playing out of position as a right wing-back, the Dutchman was a real threat going forward, assisting El Ahmadi’s goal and opening his Villa account with a stunning free-kick.
Aston Villa: Guzan 5, Bacuna 8, Vlaar 6, Baker 6, Clark 6, El Ahmadi 7, Weimann 7, Luna 6, Delph 6, Sylla 6, Kozak 6; Subs: Bowery 6
Manchester City: Hart 6, Zabaleta 6, Kompany 5, Nastasic 4, Kolarov 6, Nasri 7, Fernandinho 6, Toure 7, Milner 7, Negredo 6, Dzeko 6; Subs: Navas 7, Jovetic 6
THE MATCH IN A TWEET