Atletico's 2-0 success at Elche on Saturday meant that Barcelona needed to win to restore their three-point advantage.
But they lost for the second outing in a row – something they have done just three times in the last four years – thanks to Iker Muniain's goal in the 70th minute.
Muniain missed a good chance in the first half, scuffing into the arms of Barcelona goalkeeper Jose Manuel Pinto, while Neymar had several attempts for the losers.
Bilbao's incessant work-rate and pressing paid dividends though, as Markel Susaeta's cross from the right was converted by Muniain.
They nearly went two goals down when Pinto was forced into a superb reflex save to deny Gaizka Toquero's header.
And Barcelona struggled to create in the latter stages as Bilbao held on for a victory that takes them up to fourth.
Valencia climbed to ninth after Jonas struck a hat-trick in their 3-0 home success against a 10-man Osasuna.
Fresh off a 1-0 UEFA Europa League win at Swansea City on Thursday, Valencia were handed a big advantage when Patxi Punal was given a straight red card in the 17th minute.
And Brazilian Jonas took full advantage, first scoring in the 45th minute to delight the Mestalla crowd who had not seen their side win a home league fixture since September.
Jonas doubled his account three minutes after half-time, before completing his hat-trick in the 53rd minute.
Sunday's other matches saw Sevilla win 2-1 at Granada thanks to Kevin Gamiero's late strike.
Yacine Brahimi cancelled out Carlos Bacca's opener with a second-half penalty, but Sevilla had the last laugh as substitute Gameiro netted with three minutes left.
And Real Betis remained on the bottom of the league after they were held to a 2-2 home draw against Rayo Vallecano.
Real Betis led twice but lost two points in the 91st minute, as Bueno's second clawed the visitors level.
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.