The Air India Express plane, en route from Dubai, skidded off the runway during bad weather before breaking in two while landing at Kozhikode airport.
There were 190 people on board the flight and one official said it was a "miracle" the toll was not higher.
It is still India's worst passenger air crash in a decade.
The flight was repatriating Indians stranded by the coronavirus crisis. First responders to the crash have been asked to go into quarantine.
Prime Minister Narendra Modi said he was "pained" by the accident.
Flight IX 1134 was carrying 184 passengers, including 10 infants, and six crew when it attempted to land at the airport in Kozhikode, formerly known as Calicut.
The Boeing 737 aircraft crashed at 7.40pm (local time) yesterday. Indian media said the pilots could not see the runway during a first attempt at landing due to heavy rain.
When they did touch down, the plane is said to have landed on a taxiway hundreds of metres before the runway, then skidding off and sliding into a ditch.
The impact broke the plane in two. Images from the scene showed the fuselage shredded, with the blue seats from the jet scattered along the ground.
Kozhikode has a table-top airport, a challenge for air crew during difficult landings as they typically have steep drops at one or both ends of the runway.
Both the pilots were among the dead. Nearly 150 people are being treated in hospital.