The hosts faded after a good start and a penalty scored by David Pizarro gave Fiorentina the lead after an hour's play.
Marcelo Larrondo made it two 10 minutes later as Fiorentina reduced the arrears on third-placed AC Milan to three points.
Atalanta remain in mid-table, but will have to do without striker German Denis in at least their next game against Genoa after he received a red card in the last minute.
Denis was Atalanta's dangerman in the first half with two efforts saved by Emiliano Viviano as the Nerazzurri started brightly.
Fiorentina changed tactics in a bid to do some attacking of their own, and the move, with Alberto Aquilani pushed further forwards, worked with a marked improvement towards the end of the first 45 minutes.
Aquilani had two chances to put the Viola in front before the break, but Andrea Consigli denied him on both occasions.
Consigli was on guard again early in the second half to repel Mohamed Sissoko's effort from distance as Vincenzo Montella's side began to push.
Their efforts were rewarded with a penalty on the hour mark with Guglielmo Stendardo booked for handling the ball inside the area.
Worse punishment followed with Pizarro beating Consigli from the spot to give the visitors the lead.
Larrondo made it two in the 72nd minute with a powerful effort which left Consigli no chance, and Atalanta's heads dropped.
Adem Ljajic only just missed the target as Fiorentina threatened to add a third late on before Denis lost his temper and received a red card for a foul on Pizarro.