The visitors started the game off well and they had the first chance of the game in the 6th minute. John Stefan Medina played in Dorlan Pabón, but his shot went straight to goalkeeper Nicolás Vikonis.
The Rayados had another good chance in the 12th minute from a corner kick, but Hugo Isaác Rodríguez made an excellent defensive play to preserve the draw.
Puebla had a good opportunity of their own in the 33rd minute through José Francisco Torres, but his shot was easily handled by Marcelo Barovero.
Then, in the 41st minute, the visitors took the lead. Avilés Hurtado took the ball up-field before laying it off for Luis Madrigal, who made it 0-1 for Monterrey just before halftime.
In the second half, it looked like Hurtado was about to make it 0-2, but this time Vikonis was able to intervene. Then, in the 68th minute, Puebla found the equalizer.
Rodolfo Pizarro lost the ball as he tried to play out of the back and Lucas Cavallini pounced on the loose ball in the box, laying it off for Christian Tabó, who made it 1-1.
The game remained level as time wound down and it looked like the two teams would have to settle for a share of the spoils. Then, in stoppage time, Puebla sent the ball into the box, Monterrey failed to clear, and Tabó made it 2-1 for the hosts in the 92nd minute.
With the 2-1 win, Puebla reaches 10 points while Monterrey still has 16.
Puebla: Nicolás Vikonis, Brayan Angulo, Daniel Arreola, José Pallas (Jorge Espericueta 57′), Hugo Isaác Rodríguez, Vladimir Loroña, Alejandro Chumavero, José Francisco Torres, Lucas Cavallini, Omar Fernández (Francisco Acuña 45′), Cristian Palacios (Christian Tabó 45′).
Monterrey: Marcelo Barovero, Nicolás Sánchez (César Montes 88′), José María Basanta, John Stefan Medina (Eric Cantú 25′), Jesús Gallardo, Jesús Molina, Jonathan González (Jonathan Urretaviscaya 77′), Dorlan Pabón, Avilés Hurtado, Luis Madrigal, Rodolfo Pizarro.