Andrea Petagna’s penalty gave the visitors a shock lead late in the first half but goals from Lorenzo Pellegrini, Diego Perotti and Henrikh Mkhitaryan turned the game on its head after the break.
Roma move above Cagliari into fourth on 32 points, but the Sardinian side (29) will move ahead of them again if they beat third-placed Lazio (33) on Monday evening.
SPAL are without a league win in nine matches and are rooted to the bottom of the table with just nine points, six adrift of safety.
After dominating the first half, Roma were punished on the stroke of halftime when Aleksandar Kolarov tripped Thiago Cionek inside the box to gift the visitors a penalty, which Petagna dispatched calmly.
Roma continued to press after the break and found a fortuitous breakthrough when SPAL defender Nenad Tomovic diverted a Pellegrini cross into his own net after 53 minutes.
Perotti completed the turnaround from the penalty spot on 66 minutes after Edin Dzeko was bundled over in the box by Francesco Vicari, before substitute Mkhitaryan tapped in a third seven minutes from time.