Midfielder Andrea Lazzari struck late to earn Fiorentina a 2-1 victory and dent Roma's European ambitions Wednesday afternoon.
Stevan Jovetic got the Viola off to a dream start with a glancing header from Lazzari's cross to put the visitors ahead after two minutes.
Roma struggled to break down a resolute Fiorentina defence but captain Francesco Totti managed to equalise 19 minutes from time.
Fiorentina then stunned the home crowd at the Stadio Olimpico with Lazzari making no mistake in front of goal.
Roma ended the game with only 10 men after striker Daniel Osvaldo was sent off for dissent in the closing seconds.
Fiorentina's third away win this season has lifted the club three places and six points clear of the drop zone with four games left to play.
Roma, meanwhile, have dropped to seventh, five points behind city rivals Lazio who hold the last Champions League qualifying spot.
The hosts went into the game looking to bounce back from Sunday's 4-0 humiliation at Juventus, but they had to do without goalkeeper Maarten Stekelenburg and strikers Erik Lamela and Bojan, with all of the players suspended.
Fiorentina took a surprise lead when Jovetic headed past Roma goalkeeper Gianluca Curci.
Jovetic then missed a chance to double his team's advantage as he struck the ball just wide of the far post from the six-yard box.
In the 10th minute, Fiorentina goalkeeper Artur Boruc kept out Leandro Greco's hard drive from 30 yards.
Roma pressed forward and almost pulled level on the half-hour mark but Daniel Osvaldo's eight-yard header from Greco's dangerous cross was off target.
Fiorentina would have gone into the break with a 2-0 advantage had Curci not kept out Jovetic's goal-bound attempt from the right side of the box.
Roma pressed forward after the re-start and were rewarded in the 71st minute when Totti got a touch to Fernando Gago's shot and the ball went past Boruc.
Boruc then made a save to clear Totti's 12-yard effort with nine minutes remaining.
And it was the visitors who had the last say when Curci was unable to hold on to substitute Adem Ljajic's powerful strike and the ball fell to Lazzari, who fired into the back of the net.