Betis scored twice in the first half before adding two more in the second period, with Barcelona suffering their first defeat since the end of September.
Ernesto Valverde's side remain top of the division on 24 points, but Real Madrid will have the chance to move within four points of their Clasico rivals when they travel to Celta Vigo on Sunday night.
Read how it all unfolded in Sports Mole's minute-by-minute live commentary of the action below.
BARCELONA: Ter Stegen; Roberto, Pique, Lenglet, Alba; Arthur, Busquets, Rakitic; Messi, Suarez, Malcom
REAL BETIS: Lopez; Sidnei, Bartra, Mandi; Junior, Guardado, William, Tello; Joaquin, Moron, Lo Celso