A goal either half of the game from Burkinabe striker Sogne Yacouba were enough to give the Porcupine Warriors the bragging rights as they picked their first victory in regulation time for the first time since 2011.
After a pulsating opening exchange, Kotoko were first to test goalkeeper Ernest Sowah through Obed Owusu by the 17th minute, before Yacouba's shot was blocked by Benjamin Agyare.
Sellasie Bakai came close to opening the scoring for Hearts when Malik Akowuah intercepted a pass from Kotoko's Agyemang Badu and squared it for the striker but goalkeeper Osei Kwame saved the situation.
Yacouba finally broke the deadlock by the 40th minute for Kotoko after tapping in a rebound from goalkeeper Sowah.
Prince Acquah latched onto a pass from Richard Senanu and sent in a long drive but Hearts goalkeeper spilled it at first attempt and the striker was first to react.
Three minutes later, Hearts' troubles were worsened after defender Robert Addo was sent off after picking his second caution of the day. The centre-back intentionally handled the ball to prevent Yacouba from an obvious goal opportunity.
Yacouba, who had squandered two sitters earlier, made up for the missed chances, as he combined with Jordan Opoku to double Kotoko's lead by the 58th minute mark.
The Burkinabe broke loose outside Kotoko's box and played through Opoku for a quick counterattack before the midfielder set him up for a simple tap in.
Hearts brought on Malian Kamara Nguesma for Samudeen Ibrahim but their midfield still couldn't hold the pressure of Kotoko, as the visitors continued to create several chances.
Kotoko captain Amos Frimpong missed a huge goal opportunity by the 85th minute before Yacouba wasted a one-on-one with substitute goalkeeper Mensah who came on for Sowah as he attempted to score a hat-trick
Kotoko will host Hearts next week Sunday in the second leg at the same venue.