W czasach juniorskich trenował w RFC Evere, RUSA Schaarbeek, FC Brussels, RSC Anderlecht i Standardzie Liège[2]. W 2011 dołączył do seniorskiego zespołu tego ostatniego[2]. W Eerste klasse zadebiutował 20 lutego 2011 w przegranym 1:4 meczu z KAA Gent[3]. Na boisku pojawił się w 82. minucie, zastępując Francka Berriera[4]. W 2014 został uhonorowany nagrodą Belgijskiego Hebanowego Buta, przyznawaną najlepszemu piłkarzowi ligi belgijskiej, który ma afrykańskie korzenie[5]. Przed sezonem 2014/2015 odszedł do francuskiego Olympique Marsylia, w którym występował w sumie przez dwa lata[2]. W tym czasie zagrał w 62 meczach Ligue 1, w których zdobył 26 goli. Pierwszy mecz w tych rozgrywkach rozegrał 9 sierpnia 2014 z SC Bastia (remis 3:3), zmieniając w 79. minucie Dimitri Payeta[6][7]. Po sezonie 2015/2016 był łączony z transferem do wielu klubów. Były to m.in. angielskie Crystal Palace, Tottenham Hotspur i West Ham United oraz włoski Juventus F.C.[8] Ostatecznie 3 lipca 2016 został piłkarzem londyńskiej Chelsea[2] Kwota transferu wyniosła około 39 milionów euro[2]. W Premier League po raz pierwszy zagrał 15 sierpnia 2016 w wygranym 2:1 spotkaniu z West Hamem[9], wchodząc na boisko w zamian za Oscara w 85. minucie[10]. W sezonie 2016/2017 wraz z klubem świętował zdobycie mistrzostwa kraju. Chelsea zapewniła sobie tytuł, pokonując na wyjeździe 1:0 West Bromwich Albion, zaś decydującą o mistrzostwie bramkę zdobył Batshuayi[11].
31 stycznia 2018 został wypożyczony za 1,5 miliona euro do 30 czerwca 2018 do niemieckiej Borussii Dortmund[2]. W swoim debiucie w Bundeslidze przeciwko 1. FC Köln zdobył dwa gole[12]. Mecz ten został rozegrany 2 lutego 2018 i zakończył się wynikiem 3:2 dla klubu z Dortmundu[12].
W sezonie 2018/2019 był dwukrotnie wypożyczany: pierwszą połowę sezonu spędził w Valencii, zaś drugą w Crystal Palace.
Od sezonu 2019/2020, po przejęciu drużyny przez Franka Lamparda ponownie reprezentuje barwy Chelsea. 23 października zdobył zwycięską bramkę w wygranym 1:0 meczu Ligi Mistrzów UEFA z Ajaksem.