Zenit agreed an undisclosed fee with City for Garcia, who has passed a medical and "will join up with the team in the near future."
"Spanish midfielder Javi Garcia has left City to join Zenit St Petersburg on a permanent basis," a statement on City's website confirmed.
The Spanish international, who joined City from Benfica in 2012, has struggled to force his way into Manuel Pellegrini’s first team and has opted to join Zenit who are managed by former Tottenham boss Andre Villas-Boas.
Pellegrini has already signed Eliaquim Mangala, Bacary Sagna, Fernando, Willy Caballero, Frank Lampard and Bruno Zuculini during the summer, but has been forced to trim his squad in order to keep in line with Financial Fair Play constraints.
City are attempting to stay within the £49million spending limit imposed by UEFA for last term's FFP breaches and Pellegrini is also mindful of sticking to the reduced 21-man squad cap.
27-year-old Garcia becomes Zenit's second signing of the summer following the arrival of Argentina defender Ezequiel Garay who joined from Benfica.