Two tries from Tom Williams helped a youthful Harlequins reach the LV= Cup final after a thrilling game with Bath.
Tom Guest and Williams crossed for the hosts and Karl Dickson added a third try after Francis Louw had responded.
Williams scored his second before Quins' Sam Smith was sin-binned and Nick Abendanon crossed for Bath.
Heathcote's third penalty cut the gap to five points before Bath's Nathan Catt was yellow carded and Ben Botica's three-pointer sealed the win.
Botica successfully converted all of the hosts' tries and finished the game with 11 points.
Quins, whose squad consisted of 16 players under the age of 23, will face Sale or Saracens, who play on Sunday, in an all-English final, which will take place at Worcester's Sixways ground on Sunday, 17 March.
Guest opened the scoring by finishing off a superb move after the hosts won a lineout.
Dickson laid off to Botica, who then released winger Williams before Maurie Fa'asavalu sent Guest clear to cross under the posts.
Williams soon doubled the lead after intercepting a Kyle Eastmond pass and racing from his own 22-metre line to touch down at the other end of the field.
Bath responded when, after winning a lineout, their forward pack drove Quins back and Louw forced the ball over.
Heathcote converted for the first of two successful attempts before Dickson broke through at the other end to restore a 14-point lead for Quins.
Penalties side of half-time reduced the deficit to eight points, but the hosts soon added a fourth try when Luke Wallace laid the ball off to Williams, who ran clear for the line.
Quins were then put under pressure by Smith's yellow card for disrupting a Bath attack from an offside position, and the visitors soon capitalised when Abendanon burst through to score their second try.
Heathcote then kicked over his third penalty of the afternoon before Catt was sin-binned for illegally disrupting a Quins attack, and Botha's three-pointer sealed the London side's place in the final.
Harlequins: Chisholm; Williams, Lowe, Casson, Smith; Botica, Dickson; Lambert, Buchanan, Collier; Twomey, Matthews, Fa'asavalu, Wallace, Guest.
Replacements: Clegg for Casson (57), Marfo for Lambert (62), Ward for Buchanan (49), Sinckler for Collier (57), Browne for Twomey (72), Trayfoot for Fa'asavalu (49).
Not Used: Burns, Walker.
Sin Bin: Smith (56)
Bath: Abendanon; Agulla, Banahan, Eastmond, Biggs; Heathcote, Stringer; Catt, Batty, Perenise; Day, Attwood, Louw, Fearns, Skirving.
Replacements: Rokoduguni for Eastmond (57), Claassens for Stringer (57), Guinazu for Perenise (66), Hooper for Day (49), Kosta for Fearns (50).
Not Used: Beech, Palma-Newport, Vesty.
Sin Bin: Catt (65)
Ref: Leighton Hodges (RFU).