The Italian giants claim the deal has been done, although City sources say it will be completed on Wednesday morning once the Italian has passed a medical.
City had also been negotiating with Juventus, but Milan director Umberto Gandini insists the fee - believed to be around £20million - has been agreed and the 22-year-old has committed his future until the summer of 2017.
The deal will bring to an end Balotelli's two-year rollercoaster at the Etihad, a stint which saw him famously provide the crucial injury-time pass which set up Sergio Aguero for the dramatic Premier League title-winning goal against QPR last May.
That memorable afternoon came just five weeks after City boss Roberto Mancini said Balotelli would never play for the club again following the striker's red card at Arsenal.
Lapses in professionalism and numerous training-ground bust-ups have been characteristics of Balotelli's time at the club, the latest when he had to be separated from his manager after he lunged at team-mate Scott Sinclair.
Mancini has - for the most part - stood by the Italy international, who shone for his country in Euro 2012.
This season though he has barely featured, making just two substitute appearances since a dreadful performance against Manchester United at the beginning of December.
Italy coach Cesare Prandelli also believes Balotelli is making the right move.
"Now a lot depends on him. He has everything he needs to show his true worth," Prandelli said.
"It's what Mario was looking for. He's gone to a club which knows how to work with young players, including all the aspects off the pitch. Now it's up to him."