Christophe Dominici scored a fine individual try deep into injury time to send Stade Francais into the final of the Heineken Cup.
Stade Francais: (3) 20
Tries: Fillol, Dominici
Pens: Fillol 2
Cons: Fillol 2
Biarritz: (9) 17
Pens: Yachvili 4
They were trailing 17-13 when Dominici crossed near the posts.
Four Dimitri Yachvili penalties and a Damien Traille try had looked like sending Biarritz through.
But Jerome Fillol, with a try, a conversion and two penalties, had kept Stade Francais in the hunt before Dominici's dramatic late score.
Stade Francais will now play either Leicester or Toulouse, who meet in the second semi-final on Sunday.
Biarritz started brightly and, after a couple of threatening backline moves, they took the lead through a Yachvili penalty.
Stade Francais, without injured fly-half David Skrela, had been forced to turn to reserve scrum-half Fillol in the number 10 shirt.
He was given a kickable chance to level the scores but looked very nervous and pushed his tentative effort well wide.
Biarritz were continuing to look the more threatening side and a second Yachvili penalty put them into a 6-0 lead after 17 minutes.
The Basque side then missed with drop goal after a sweeping attack faltered, but within two minutes Yachvili had added his third penalty after Sylvain Marconnet handled in a ruck.
At this stage Stade Francais were struggling to get into the game but when they were awarded a penalty Fillol was on target to cut the gap to 9-3 after 27 minutes.
As the half drew on Biarritz retreated into their shell, and with Stade Francais playing a very conservative game plan there were no further scoring opportunities before the break.
Stade Francais came out with more ideas after the interval and put together a couple of dangerous attacks.
They trimmed the gap when Fillol, who had just missed with a 56-metre effort, slotted a short-range kick after Brian Liebenberg, who was otherwise very disappointing, was taken out chasing his own kick.
Traille's score had looked like sending Biarritz through to the final
Olivier Olibeau was yellow-carded for fouling Liebenberg, but Biarritz immediately took their lead back to six points when Stade Francais were penalised for holding on and Yachvili slotted the kick.
Biarritz then attacked down the right and France centre Traille saw Stade Francais second row David Auradou in the line.
Traille dummied his way through before racing over from 40 metres.
Yachvili was unable to convert from wide out, but with 15 minutes to go the Basque side led by 11 points.
Stade Francais were handed a lifeline a minute later when Giullaume Bousses was yellow carded for a high tackle on the flying Dominici.
The Paris side launched a sustained attack and, after being lucky not to be picked up for knocking the ball on in a rolling maul, Fillol was driven over by the posts.
The fly-half picked himself up to slot the conversion and make it 17-13 to Biarritz with five minutes plus injury time to go.
Stade Francais launched a late assault on the Biarritz line and when a ruck was formed Dominici picked up the ball from the base and cut through the defence, before fending off a despairing tackle and diving over.
Fillol added the conversion as Stade Francais pulled off one of the great escapes in Heineken Cup history.
Stade Francais: Sarramea; Arias, Glas, Liebenberg, Dominici; Fillol, Pichot; Roncero, Blin, Marconnet; Auradou, Brouzet; Rabadan, Martin, Sowerby.
Replacements: Kayser, Lemoine, De Villiers, James, M. Bergamasco, King, Poulain.
Biarritz: Brusque; Bidabe, Bousses, Traille, Marlu; Peyrelongue, Yachvili; Balan, August, Avril; Thion, Olibeau; Betsen, Harinordoquy, Lievremont.
Replacements: Gonzales, Lecouls, Lealamanua, Couzinet, Dusautoir, Dupuy, Martin Arramburu.
Referee: T Spreadbury (England).