Битву начали волынские, курские и пересопницкие дружины. В первых рядах сражался князь Даниил с воеводами Семеном Ольговичем и Васильком Гавриловичем. Воеводу Василька убили копьем, Даниила ранили в грудь, но молодой князь не заметил раны и продолжал рубить врагов. На помощь Даниилу пришел Мстислав Пересопницкий, князь был опытным бойцом и сумел потеснить монголов. Храбро сражался Олег Курский, воевода Ярун и хан Котян повели в атаку половецкую конницу. В бой вступил Мстислав Удатный, галицкая рать мощно ударила по монголам. Казалось, что в битве вот-вот наступит перелом, враги обратятся в бегство, но этого не произошло. С поля боя побежали половцы. Отступая, степняки смешали боевые порядки русских дружин и полков, что позволило монголам перейти в контратаку. Субудай и Джебе ввели в бой свежие войска и изменили ситуацию в свою пользу. Монгольские лучники засыпали стрелами расстроенные ряды противника, русская рать дрогнула и стала отступать. Волынская, курская и пересопницкая дружины были разбиты, Мстислав Удатный продолжал сражаться, но вскоре и он покинул поле боя. На переправе толпы беглецов столкнулись с черниговскими полками, возникла неразбериха, чем и воспользовались монгольские полководцы. Началось беспощадное избиение разгромленного противника, Мстислав Святославич погиб, пал в бою его сын, черниговская рать была уничтожена. Мстислав Удатный и Даниил Волынский с остатками дружин выбрались на берег и погнали коней к Днепру. Даниил был сильно изранен и с трудом держался в седле. Монголы быстро перешли через Калку и начали громить разрозненные и неготовые к бою дружины. Преследуя разбитого противника, Джебе и Субудай повели войска к Днепру, на берегу Калки остались отряды под командованием тысячников Чегирхана и Тешухана. Военачальники окружили стан киевлян, заблокировали войско Мстислава Романовича на холме и стали готовиться к штурму возвышенности. Киевский князь даже не попытался вырваться из кольца и избрал оборонительную тактику. Вместе с ним сражались дружины Александра Дубровицкого и Андрея Туровского.
Когда Мстислав Удатный и Даниил Волынский достигли Днепра, галицкий князь приказал изрубить стоявшие у берега ладьи. Мстислава охватила паника, ему казалось, что монголы будут преследовать галичан на правом берегу реки. Уничтожив ладьи и насады, Удатный лишил несколько тысяч беглецов шансов на спасение, кто не сумел перебраться через реку, были либо убиты, либо попали в плен. В действиях Мстислава не было никакого смысла, монголы умели форсировать водные преграды. По свидетельству польского историка Матвея Меховского, разбежавшихся по степи русских воинов ограбили и перебили союзники-половцы (21, 48).
Когда главные силы монголов вернулись на берег Калки, начался штурм лагеря киевлян. Бой не прекращался два дня и две ночи, русские бились отчаянно и отбили все атаки противника. Ситуация сложилась критическая, у киевлян было много убитых и раненых, заканчивались стрелы, помощи ждать было неоткуда. Но самой страшной проблемой стала нехватка воды. Калка была рядом, но чтобы добраться до неё, надо было пробиться сквозь плотные ряды монгольского войска. Трудно сказать, какое решение принял бы Мстислав Романович, события стали развиваться по непредусмотренному сценарию. Находившийся в монгольском войске воевода бродников Плоскиня предложил князьям сложить оружие и покинуть укрепление, поскольку полководцы Джебе и Субудай не будут их убивать и отпустят за выкуп. В знак правдивости своих слов, Плоскиня целовал крест.