Barca hoped to reach an 11th Champions League semi-final, their last one coming three years back where they went all the way to lift their fifth continental crown in Berlin.
Roma were faced with the unenviable task to breach the Spaniards with three unanswered goals for a spot in the last four after losing the reverse fixture 4-1.
The Italians made the perfect start with an early lead through Edin Dzeko, who staved off the challenge of Nelson Semedo to poke past an on-rushing Marc Andre Ter Stegen.
With their tails up, Roma went in search of the second, giving little space to the visitors as Patrick Schick saw his glancing header go narrowly wide minutes later.
The Slovakian found yet another opportunity from a similar position following a cross from the right, but was still not able to head on target after 28 minutes.
The first half ended with Barca continuing their battle to break down the defensive Italians, as they went into the break trailing.
The Catalan giants were handed a further setback after 57 minutes when Gerard Pique brought down Dzeko in the box, with the match official awarding a penalty.
Veteran midfielder Danielle De Rossi stepped up to blast the ball in the top corner, beating Ter Stegen hands down.
It set up an exciting last quarter, with all to play for both sides, particularly Eusebio De Francesco’s team, who needed only one more goal to advance.
The Spaniards were being suffocated from all angles and had little room to go about their business amidst the best efforts of talisman Lionel Messi.
There was no stopping Kostas Manolas, who snuck in at the far post to head home a corner, capitalizing on poor defending on 82 minutes as De Francesco’s men pulled off a major upset.
This is the first time Rome side advance to the semi-finals of Europe’s premier club tournament since the 1983/84 season.