Преследуя монгольские войска, 31 мая 1223 года русские союзники (половцы, волынцы, галичане, черниговцы и киевляне) достигли берега реки Калки. Князья собрались на очередной совет. Мнения разделились. Мстислав Галицкий и Даниил Волынский настаивали на переправе. Номинальный руководитель похода Мстислав Киевский – сторонник выжидательно-оборонительной тактики – был против, нежелая далеко углубляться в степь. Так и не придя к окончательному решению, князья разошлись по лагерю.
Первыми переправились и сразу же ускакали вперед половцы. За ними двинулись дружинники Даниила Волынского. Переправившаяся третьей дружина Мстислава Галицкого остановилась неподалеку от реки, ожидая начавших переправляться Черниговцев. В этот момент Субэдэй, все это время внимательно следивший с помощью разведки за действиями русских и половцев увидел, что расстояние между отдельными отрядами союзников стало достаточно большим и в этот момент нанес удар.
На половцев обрушился вал тяжеловооруженной монгольской конницы, почти сразу они побежали. Вслед за этим монголы ударили по Волынцам. Князь Даниил Романович попытался контактировать и был ранен. Монголы охватили волынцев с флангов и стали расстреливать их из луков. Волынцы не выдержали обстрела и стали отступать. Преследуемые монголами половцы и Волынцы, обогнув разворачивавшуюся для боя дружину Мстислава Галицкого, кинулись к переправе и смяли еще полностью не переправившихся черниговских дружинников. Войска Мстислава Галицкого почти сразу попали в окружение и, неся большие потери, стали отступать, а затем побежали.
Князь Мстислав Романович Киевский, со своей дружиной находившийся на противоположном берегу, видя все происходящее успел загородиться возами, по-видимому, надеясь отсидеться за ними. Его надежда не оправдалась. Опытный Субэдэй сразу же отрядил часть своего войска для осады киевлян. Киевские дружинники, укрывшиеся за возами и частоколом, упорно сопротивлялись. Прошло три дня, кончились запасы воды. Все попытки вырваться из окружения пресекались монгольскими лучниками. Стало ясно, что рано или поздно придется сдаться. Поэтому, когда монголы предложили за выкуп отпустить русских, Мстислав Киевский согласился. Как обычно, монголы свои обещания не выполнили и, как только русские вышли из укрытия и сдали оружие, их перебили.