Three second-half goals from Peter Odemwingie, Gonzalo Jara and former Arsenal player Jerome Thomas put Albion in front before Samir Nasri scored two late goals for Arsene Wenger’s side.
It was Arsenal first home defeat since they lost to Manchester United last January and kept them four points adrift of leaders Chelsea while Albion moved up into fifth place.
The writing was on the wall for Arsenal in the opening half. Thomas caused the home defence an early scare but his cross from the left wing evaded the lurking Odemwingie.
Emmanuel Eboue had the first real chance for Arsenal in the 13th minute but his shot on the turn from the edge of the penalty area went wide of Scott Carson’s right-hand upright.
Andrey Arshavin should have put the home side in front seconds later but he managed to hit the post twice when he got on the end of a cross from Eboue.
It was a close escape for the visitors who were now beginning to feel the full onslaught of Arsene Wenger’s side.
In the 20th minute, Marouane Chamakh went close with a six-yard header as Arsenal continued to surge forward.
Four minutes later, Nasri went close with a 25-yard low drive that flashed just wide of the target.
Odemwingie almost gave the visitors a shock lead against the run of play in the 27th minute but Manuel Almunia pushed his angled drive onto the post.
Albion were enjoying their best spell of the game and seconds later Almunia had to be alert to collect a dangerous left-wing cross from James Morrison.
Wenger was forced to stalk the edge of his technical area in frustration and his demeanour was not eased by Nasri’s volley into the crowd from 18 yards in the 36th minute.
Almunia then became the villain and hero in the space of 60 seconds as West Brom squandered a great chance to take the lead.
In the 37th minute Almunia brought down the speedy Odemwingie and referee Michael Oliver rightly awarded a penalty and booked the ‘keeper.
But Chris Brunt’s poor left-footed effort was easily saved by Almunia, who dived to his right to keep it out.
In the final minute of the half, Albion keeper Carson had to be at his best to deny Bacary Sagna’s six-yard header – tipping his effort over the bar.
West Brom took the lead in the 50th minute when Thomas wriggled free on the left flank and crossed into the six-yard box for the unmarked Odemwingie to put the Baggies ahead.
And it got worse for the home side two minutes later when Almunia blundered to allow Albion to make it 2-0.
Brunt set Gonzalo Jara free on the right and his low angled drive from the right edge of the penalty area went through Almunia’s hands and into the net.
The Albion scorer was booked for taking his shirt off in celebration.
Wenger immediately responded with a double substitution, sending on Jack Wilshere and Tomas Rosicky in place of Abou Diaby and Eboue.
The changes helped to revive the Gunners but West Brom’s defending was committed and impressive.
In the 65th minute, Arsenal made a third change when Wenger removed Laurent Koscielny in favour of Carlos Vela.
Arsenal pushed forward in numbers but Albion’s rearguard held firm despite all the home side’s efforts.
West Brom sensationally made it 3-0 when Brunt crossed for the livewire Thomas to fire into the net in the 73rd minute.
But Arsenal finally reduced the deficit two minutes when Nasri danced through the West Brom defence before firing past Carson.
Nasri grabbed his second of the game in injury time but, despite a frantic finish, it was not enough to prevent Arsenal slumping to their first home defeat since last January.