Barcelona extended their lead atop of the La Liga table to 12 points with just 12 games remaining thanks to a famous El Clasico win.
An own goal from Ronald Araujo would open the scoring for Real Madrid, but goals from Sergi Roberto and substitute Franck Kessie would earn the win for Barca at Camp Nou.
The tempo of the game was set early on by two long-range efforts from star number nines Robert Lewandowski and Karim Benzema - both of which forced the opposition goalkeepers into smart saves.
In the fifth minute, Barca created the first good chance of the game. A wonderful ball to the back post from Frenkie de Jong found Raphinha, who saw his subsequent headed effort brilliantly saved by Thibaut Courtois.
Just a few minutes later Barcelona were made to rue that missed chance when Real Madrid took the lead. And the goal would come in the most unlikely of circumstances, with a rather tame chipped cross from Vinicius Junior flicking off the head of Ronald Araujo and into the back of his own net.
Barca would press forward with real intent thereafter and would come close to drawing level in the 23rd minute. The chance would fall to ex-Chelsea man Andreas Christensen, who leaped highest at the near post to latch onto a Raphinha cross, but was just unable to keep his resulting header on target.
The Brazilian forced Courtois into another good save on the half hour mark, bursting in-field and unleashing a powerful strike on goal - one which was well tipped over by the Real Madrid number one.
In the final minute of the first half, the home side would finally get their goal through Sergi Roberto. The midfielder reacted well to control a deflected Raphinha shot inside the box before curling the ball into the top right corner of the net.
The start of the second half was fiercely contested, with both sides pushing forward in search of the lead. Robert Lewandowski would come close to making it 2-1 for Barca around the hour mark, when he turned and fired a great strike from 25-yards out - a strike which flew just wide via a deflection.
A few minutes later some terribly sloppy play from Sergio Busquets on the edge of his own box would gift Rodrygo a great shooting opportunity on the edge of the box. The substitute seemed to panic slightly when the ball came to him however, rushing his technique and, as a result, ballooned his strike over the crossbar.
The best chance of the second half half would fall to the one player Barca would want it to fall for: Lewandowski. The Polish striker was found completely unmarked at the back post by Busquets, but his acrobatic effort on goal was, amazingly, not very well executed and, instead of nestling in the net, nestled in row Z.
Barca would force Courtois into another great save in the final 15 minutes. The Belgian international got down well to his left to prevent a half-volleyed effort from Raphinha (again) to keep it at 1-1.
In the final 10 minutes Real Madrid pushed hard for an important winning goal, and they thought they had it when Marco Asensio tapped home from six-yards out. After a lengthy VAR review however, the goal was ruled out for offside.
In the final minute of the game, Barcelona did score the winning goal. It would come courtesy of substitute Franck Kessie who stole in at the back post to latch onto a great low cross from Alejandro Balde to win El Calsico for his side.
Barcelona player ratings
GK - Marc-Andre ter Stegen - 6/10 - Made a few decent saves.
RB - Ronald Araujo - 5/10 - Scored a very early own goal and contested a fierce battle with Vinicius on the flank.
CB - Jules Kounde - 6/10 - Dealt with Benzema well.
CB - Andreas Christensen - 6/10 - Was a constant threat from set pieces.
LB - Alejandro Balde - 7/10 - His brilliant cross led to the winning goal.
CM - Sergi Roberto - 7/10 - Scored a wonderful goal to draw Barca level before half-time.
CM - Sergio Busquets - 4/10 - Sloppier than usual on the ball at times.
CM - Frenkie de Jong - 7/10 - Worked his socks off and used the ball well throughout.
RW - Raphinha - 8/10 - Barca's best player. Caused Los Blancos a whole host of problems.
ST - Robert Lewandowski - 7/10 - Missed a few decent chances on the night but his hold-up play was exceptional.
LW - Gavi - 6/10 - Ran himself into the ground.
SUB - Franck Kessie - 7/10 - Great finish with win the game for Barca.
SUB - Ansu Fati - N/A.
SUB - Ferran Torres - N/A.
Real Madrid player ratings
GK - Thibaut Courtois - 8/10 - Made a number of brilliant saves.
RB - Dani Carvajal - 4/10 - Struggled to get forward. You can see why he's been criticised recently.
CB - Eder Militao - 5/10 - Not a bad outing.
CB - Antonio Rudiger - 6/10 - Had his hands full with Lewandowski. He did quite well.
LB - Nacho Fernandez - 3/10 - Poor. First man to be subbed off.
CM - Luka Modric - 4/10 - Not quite at his best and struggled to deal with De Jong's energy.
CM - Eduardo Camavinga - 4/10 - He's much, much better as a left-back. Carlo, play him at left-back.
CM - Toni Kroos - 4/10 - A quiet outing for the German legend.
RW - Federico Valverde - 2/10 - A nothing performance.
ST - Karim Benzema - 5/10 - Held the ball up well at times but just didn't get the service on Sunday evening.
LW - Vinicius Junior - 6/10 - His cross led to the opening goal. At the heart of everything good Real Madrid did.
SUB - Ferland Mendy - N/A.
SUB - Rodrygo - 5/10 - Missed a good chance when introduced.
SUB - Aurelien Tchouameni - N/A.
SUB - Marco Asensio - 5/10 - Scored an offside goal.
SUB - Dani Ceballos - N/A.