It was a terrific first-half performance from the home side, with goals from Pione Sisto, Iago Aspas and a Jermey Matheiu own goal inside 33 minutes, shocking Luis Enrique's side.
The comeback seemed on at the beginning of the second period, with Gerard Pique and a Neymar penalty getting two goals back. The tie was decided by Pabolo Hernandez, despite a late goal from Pique.
Shock start to proceedings
Many will have expected Enrique's side to win all three points on Sunday as they looked to keep up with current leaders Atletico Madrid, after their win over Valencia, and Real Madrid's draw with Eibar. They looked to be heading for the win in the 12th minute when Arda Turan and Luis Suarez played beautifully with each other, with the latter trying the effort but it was straight at Sergio Alvarez.
However, it was José Luis Mendilibar's side that managed to take the lead. It was the beginning of a bad night for Marc-Andre ter Stegen, as his poor ball to Sergio Busquets was picked up as the ball passed through to Sisto, who coolly slotted his shot low into the bottom corner.
On it's head
Aspas almost made it two on the 24th minute, with the former Liverpool man trying it from 20 yards, but ter Stegen did well this time to tip it over the crossbar.
However, he made it second time lucky as he doubled the lead. It was a good move from the the home side as the ball made it to Aspas from their own area and he did well to put it into the bottom corner from outside the area.
The shock result seemed to be sealed only moments later as Vigo added a third. The defesnsive display from Barcelona was hopeless as the ball was given away to Daniel Wass. The midfielder put the ball into area and Mathieu somehow managed to put into his own net.
Barcelona looked a team reborn as they headed out for the second period, and were right back in the game within 20 minutes of the restart.
Pique was Barca's first goalscorer of the evening just before the hour mark. Andres Iniesta marked his 600th appearance with an assist, as Pique got across the goalkeeper to head home his cross.
Barca were right back in it moments later, as Inaki Vicandi Garrido pointed to the spot as Nemanja Radoja brings down Andre Gomes and Neymar slotted home.
Barca didn't really kick on from there, and Vigo seemed to have rounded off the match as they added their fourth.
Ter Stegen finished off a very bad night for the German, as he stalled on the goal kick and managed to kick it into the head of Hernandez to round off the tie in the most embarrassing circumstances.
It could of been five as Aspas was put through on goal, but ter Stegen went on his way to reedem himself as he closed the angle and saved well.
Late fight back
Barca looked down and out, but Pique headed home three minutes from time from Denis Suarez's cross.
Neymar should have brought it level in stoppage time as he beat his man and got to Turan's cross, but his header was wide.
Pique could have completed his hat-trick and Barca's comeback as he was up again to Suarez's ball, but once more, it went wide and their defeat was sealed.