Bath's dreams of a second Heineken Cup triumph were ended at the semi-final stage by French champions Biarritz.
Biarritz (9) 18
Pens: Yachvili 5
Drop goal: Traille
Bath (6) 9
Pens: Malone 3
Three Dimitri Yachvili penalties, to two from Chris Malone, gave the home team a 9-6 lead at half-time.
A further Yachvili penalty and a Damien Traille drop goal meant Biarritz led 15-6 after an hour.
Malone's third kick cut the gap to six points but that was as close as Bath got, with Yachvili slotting a fifth penalty for Biarritz at the death.
The match was played in the Estadio Anoeta in San Sebastian, just over the border from Biarritz in the Spanish part of the Basque region.
The French side took an early lead as Yachvili landed a fourth-minute penalty after Bath, the 1998 champions, infringed at a line-out.
Heavy rain then started falling and the hosts edged further ahead after 14 minutes when Yachvili punished Bath for entering a ruck from the side.
At this point the visitors were being out-played in every department, but they managed to establish a bridgehead in home territory and Malone slotted a penalty to get them on the board.
Immediately Danny Grewcock conceded a silly penalty for offside right in front of referee Alain Roland and Yachvili restored Biarritz's six-point lead.
The hosts then infringed at a scrum and Malone landed his second penalty to make it 9-6, but he could not repeat the feat minutes later from inside his own half.
Despite the tricky conditions Biarritz were trying to move the ball wide but every time they managed to get it out Sireli Bobo, their flying Fijian winger, Bath were there in numbers to snuff out the threat.
Despite both sides hammering away at each other there were no more points before the break, although Biarritz captain Benoit August was lucky the referee did not spot him when he appeared to gouge Grewcock.
Bath would have been delighted to be trailing by just three points at the interval, but within three minutes of the re-start they were 12-6 down after Traille was taken out as he chased a hanging kick.
Yachvili slotted the simple penalty and Traille then twisted the knife as he rifled over a drop goal after a sustained attack from the Basques.
Biarritz were lucky not to concede a penalty when Imanol Harinordoquy held back Michael Lipman as chased a kick.
Both sides were reduced to 14 men as Grewcock and Biarritz's Romania prop Petru Balan were sin-binned for fighting after a flare-up between Jerome Thion and Andy Beattie.
Once the fists had stopped flying Biarritz were penalised and Malone trimmed the gap to three points with just under 20 minutes remaining.
Bath's French winger David Bory then sliced through to set up a good field position and when Bath attacked from the scrum Salesi Finau powered deep into the Biarritz 22 before the greasy ball spilled from his grasp.
That was as close as Bath were to come and the final word went to Yachvili, who landed his fifth penalty from five attempts to wrap up victory and send Biarritz into their first Heineken Cup final.
Biarritz: Brusque, Gobelet, Bidabe, Traille, Bobo, Peyrelongue, Yachvili, Balan, August, Johnson, Thion, Couzinet, Betsen, Dusautoir, Harinordoquy.
Replacements: Noirot, Lecouls, Olibeau, Carizza, Dupuy, Martin Arramburu, Dambielle.
Bath: Stephenson, Higgins, Crockett, Barkley, Bory, Malone, Walshe, Filise, Mears, Bell, Borthwick, Grewcock, Beattie, Lipman, Fea'unati.
Replacements: Dixon, Barnes, Delve, Short, Finau, Williams, Fuimaono-Sapolu.
Referee: Alain Rolland (Ireland)