Народився в селі МаксимільянівкаМар'їнського районуДонецької області. Вихованець молодіжної академії донецького «Шахтаря»[1]. З 2019 року виступав за юнацьку команду «гірників», у цьому ж році дебютував й за молодіжну команду донецького клубу. У сезоні 2020/21 років виступав здебільшого за молодіжну команду «Шахтаря», але через високу конкуренцію в першій команді не провів жодного поєдинку.
13 серпня 2021 року відправився в оренду в «Маріуполь» до завершення сезону 2020/21 років[1]. У футболці «приазовців» дебютував 22 серпня 2021 року в програному (3:4) домашньому поєдинку 5-го туру Прем'єр-ліги проти луганської «Зорі». Денис вийшов на поле на 46-ій хвилині, замінивши Олексія Кащука, а на 80-ій хвилині відзначився дебютним голом у професіональному футболі[2][3]. Загалом у сезоні 2021/22 зіграв за маріупольців 9 матчів.
Після повномасштабного вторгнення росіян до України відправився в чергову оренду. Новою командою півзахисника стала «Льєйда» з іспанської Сегунди Б. За півтора сезони зіграв за клуб 24 матчі, в яких відзначився одним забити м'ячем.
16 серпня 2023 року у статусі вільного агента перебрався до рівненського «Вереса», підписавши із командою трирічний контракт. Дебютну гру за рівнян провів 19 серпня цього ж року у домашній грі проти полтавської «Ворскли» (1:2), замінивши на 78-й хвилині Яго.