Leinster lost a thrilling United Rugby Championship semi-final as the Bulls prevailed 25-20 at Loftus Versfeld in Pretoria.
Two tries from Sergeal Petersen and another from Johan Goosen, who contributed 15 points, saw the Bulls through to their second final in three years.
Leinster responded with tries from James Lowe and Caelan Doris, but their bid for a ninth URC title and a first trophy since 2021 fell just short.
A frantic opening failed to produce points as the defensive quality on show matched that of both attacks.
The Bulls were winning the kicking battle and wings Petersen and Devon Williams had chances to score before the hosts did cross after 19 minutes.
Willie Le Roux’s catch and pass in the same movement sent Williams into the corner, but the try was disallowed as Bulls flanker Marco van Staden had taken out Ross Byrne off the ball.
Bulls were reduced to 14 men by Petersen’s deliberate knock-on and Leinster took instant advantage of the yellow card.
The province drove to the line and Byrne slipped a clever pass for wing Lowe to make the corner.
Byrne added the extras for a seven-point lead, but Bulls fought back strongly despite being a man down.
Goosen cut a brilliant line from Embrose Papier’s pass to cross unopposed and the outside-half levelled the scores with a simple conversion.
Bulls remained on top with their full complement restored and the Leinster scrum showed signs of discomfort.
Goosen landed an angled 25-metre penalty to put Bulls ahead 10-7 at the break.
The South African outfit extended their lead within two minutes of the restart as Harold Worster delivered a delightful kick down the touchline.
Petersen gathered to race in and Goosen converted, but Leinster stormed straight back just as it appeared the Bulls would dominate the closing stages at altitude.
Caelan Doris powered over from close range after Leinster had turned down the opportunity to take an easy three points and Byrne added the extras from under the posts.
Leinster levelled matters near the hour mark after a brilliant kick and collect from Lowe forced a Bulls error and a successful Byrne penalty.
Goosen and Byrne exchanged kicks as the see-saw nature of a high-quality contest continued.
There were 13 minutes left when Petersen beat replacement Ciaran Frawley to Papier’s Garryowen.
Petersen touched the ball past Frawley and pulled it down to race clear, and Leinster could not rescue the situation in a pulsating finish.