Pep Guardiola’s side were teetering on the brink of blowing the title after falling 2-0 behind midway through the second half at the Etihad Stadium.
But Ilkay Gundogan sparked an astonishing City revival as the German midfielder reduced the deficit before Rodri grabbed the equaliser.
Gundogan turned in City’s third goal in the space of five minutes in the 81st minute, triggering wild celebrations and rendering second-placed Liverpool’s 3-1 victory against Wolves irrelevant.
City finished with 93 points, one point ahead of Liverpool as they ended their rivals hopes of winning an unprecedented quadruple.
On a breathtaking final day, Burnley were relegated as Leeds beat the drop, while Tottenham qualified for the Champions League at the expense of their north London rivals Arsenal.
It was City who hogged the spotlight on a day their fans, who spilled onto the pitch in delight, will never forget.
Guardiola’s men can rightly be called a dynasty after joining Manchester United as the only clubs in the Premier League era to have won four titles in five seasons, with Alex Ferguson’s teams doing it on three separate occasions.
The eighth league title in City’s history is Guardiola’s ninth major trophy since arriving at the club in 2016.
Once again, City saved the best until last as they edged Liverpool out on the final day of the season for the second time after beating them to the finish line in 2019.
It was 10 years since Sergio Aguero’s famous last-second goal against QPR sealed City’s first title since 1968 and this jaw-dropping success was almost as unlikely.
Guardiola had called on City’s fans to be “loud, loud, loud” in their bid to retain the crown, but they were stunned into silence in the 37th minute.
Lucas Digne whipped in a cross from the left and Matty Cash got in front of Joao Cancelo to score with a bullet header.
Former Liverpool star Philippe Coutinho doubled Villa’s lead with a cool finish in the 69th minute.
The shell-shocked Guardiola slumped into his seat, but City would not surrender and Ilkay Gundogan headed them back into contention in the 76th minute.
Rodri’s low strike from the edge of the area two minutes later set up a nerve-jangling finale.
And in the 81st minute, Kevin de Bruyne’s low cross reached Gundogan at the far post and the substitute tapped home to send City into ecstasy.
Having already won the FA Cup and League Cup, Liverpool can still enjoy a memorable season of their own if they beat Real Madrid in the Champions League final in Paris on Saturday (Phuket time: 2am Sunday, May 29).
Liverpool trailed City by 14 points in January, but Klopp’s side pushed them to the wire, showing the fortitude that earned them the nickname “mentality monsters” from their manager.
Liverpool were rocked after just three minutes when Pedro Neto produced a close-range finish from Raul Jimenez’s cross.
Sadio Mane equalised with a clinical strike from just inside the area after sprinting onto Thiago Alcantara’s pass in the 24th minute.
Mohamed Salah poked Liverpool ahead with six minutes left but by then news of City’s extraordinary recovery had reached Anfield, which was in subdued mood by the time Andrew Robertson scored in stoppage-time.
Tottenham’s 5-0 rout of relegated Norwich secured fourth place at Carrow Road.
Just a few weeks ago, Antonio Conte had insisted it would take a “miracle” for Tottenham to finish in the top four, but the Italian has masterminded a superb run that ends his club’s two-year absence from the Champions League.
Dejan Kulusevski’s 16th minute tap-in from Rodrigo Bentancur’s pass put Tottenham ahead before Harry Kane struck with a diving header in the 32nd minute.
Kulusevski curled a sublime shot into the far corner in the 64th minute and Golden Boot winner Son Heung-min scored in the 70th and 75th minutes.
Tottenham’s victory left north London rivals Arsenal in fifth place despite their 5-1 win against Everton.
Burnley’s six-season stay in the top tier ended with a 2-1 home defeat against Newcastle, with Leeds staying up after a 2-1 win at Brentford.
Leeds started the day below Burnley on goal difference, but the Clarets were beaten by Callum Wilson’s brace, while Jesse Marsch’s team escaped thanks to Raphinha’s penalty and Jack Harrison’s last-gasp strike.
Manchester United lost 1-0 at Crystal Palace, but qualified for the Europa League thanks to West Ham’s 3-1 defeat at Brighton.