With 87 minutes on the clock, City were edging their way to a narrow victory in what was a derby clash hugely lacking in quality and bereft of excitement, with Josko Gvardiol’s first-half header the difference.
But United came to life in the final stages, Bruno Fernandes equalising from the spot after Matheus Nunes gave the ball away and then compounded the error by conceding a penalty.
The celebrations had barely died down in the away end when Amad was then played in behind by Lisandro Martinez, and the winger took it past Ederson before squeezing a finish in from a tight angle.
The rivals came into the match both struggling for form and it showed, with it 20 minutes into the match before either side managed to even muster a shot.
It was no surprise, then, that the opening goal came not in free-flowing fashion but from a set-piece. Kevin De Bruyne took a shot corner and when he did then swing a cross into the middle, it deflected up for Gvardiol to nod past the motionless Andre Onana.
United saw plenty of the ball but did little to threaten a vulnerable City defence, lining up with Matheus Nunes at left-back. Ruben Amorim’s decision to leave Marcus Rashford and Alejandro Garnacho out of the squad, which he confirmed was not injury related, also left him limited in his options to change the match off the bench.
The big chance to equalise fell to Bruno Fernandes with 15 minutes remaining, as he played clean through by Rasmus Hojlund. The United captain dinked a finish over the onrushing Ederson, but could only watch as the ball trickled wide of the far post.
City did not look like finding a second goal and, while for much of the afternoon that did appear to be a problem, the late show from Fernandes and Amad left them stunned. Pep Guardiola’s side have won just once in their last 11 matches.