Cresciuto nelle giovanili della Stella Rossa, fa il suo esordio da professionista il 26 maggio 2013 disputando da titolare il match perso per 3-0 contro il Vojvodina.
Il 1 settembre 2014 viene ceduto in prestito al Kolubara, in Prva Liga, con cui disputa cinque gare andando a segno in due occasioni. Nel corso del mercato invernale fa rientro alla Stella Rossa.
Liverpool, i vari prestiti ed il trasferimento al Porto
Il 6 gennaio 2016, dopo essersi messo brillantemente in mostra con il club serbo, diventa ufficialmente un giocatore del Liverpool per 7 milioni di euro, rimanendo però in prestito allo Stella Rossa fino a fine stagione.
Conclusa la stagione, esordisce con la nuova maglia alla seconda giornata di campionato nella sconfitta per 2-0 in casa del Burnley; mentre, il 20 settembre 2016, debutta in Football League Cup nella vittoria per 3-0 sul campo del Derby County.
Non più rientrante nei piani del club il 17 gennaio 2018 al Cardiff City;[1] mentre il 19 agosto 2018 all'Hertha Berlino,[2]con cui, il 1º luglio 2019, prolunga il prestito di un ulteriore anno per la cifra di 2 milioni di sterline.[3]
Rientrato dal prestito, inizia la stagione 2020-2021 con il Liverpool, giocando una sola partita, il 25 settembre 2020, nella quale mette a segno la prima rete con i reds.[4] Tuttavia pochi giorni dopo, il 6 ottobre 2020, viene annunciato il suo trasferimento in prestito al Porto.[5]
A fine stagione, complici le buone prestazioni, il club portoghese decide di esercitare il riscatto del prestito.[6][7]
Nel maggio del 2016 esordisce con la nazionale maggiore, subentrando nel corso del secondo tempo al posto di Nemanja Matic nella partita disputata contro il Cipro, vinta poi dai serbi per 2-1.
^(EN) Marko Grujic kommt aus Liverpool, su herthabsc.de, 19 agosto 2018. URL consultato il 20 luglio 2021 (archiviato dall'url originale il 30 maggio 2019).