The bus was travelling from Huacho, 130 kilometers (81 miles) north of the capital, to Lima with 55 passengers and two crew on board when it went off the road about midday.
It plunged 100 meters (330 feet) and landed upside down on rocks at the edge of the sea.
The incident “left at least 48 victims” dead, the statement posted on the Interior Ministry’s website said.
Efforts to recover bodies from the overturned vehicle were suspended at nightfall because the tide had risen and reached the bus, the police said.
A police helicopter had winched some rescue workers to the wreck of the blue bus while others made the precarious journey down on foot with the assistance of ropes.
The navy sent a patrol boat to assist the rescuers trying to get everyone out before the tide came in.
There were several survivors, although most on board the bus perished.
“For us it is very painful to suffer an accident of this magnitude. My deep solidarity lies with the pain suffered by the relatives,” President Pedro Pablo Kuczynski wrote on Twitter.
Maria Elena Aguilar, director of Alcides Carrion Hospital in El Callao, said her facility received five patients with multiple injuries.
One other survivor was taken to a different hospital.
Handout picture released by Peruvian agency Andina showing rescuers working with a helicopter during the rescue operation. At least six people were confirmed to have survived with injuries
The accident took place on a coastal highway about 45 kilometers north of the capital Lima, said Colonel Dino Escudero, head of the police highway patrol division.
The Pasamayo highway on which the tragedy occurred is only used by trucks and buses, as cars travel a different route.
It is a dangerous sea-hugging road where fog is frequent and high humidity can make the roadway slippery.
The bus driver had a lot of experience and was working with an assistant, said Luis Martinez, a representative of Transportes San Martin de Porres, which owned the bus.
Martinez could not confirm whether the driver had been killed or injured, but added that the bus underwent a mechanical check before leaving Huacho.
More than 2,500 people died in traffic accidents in Peru in 2016, according to official figures.
Download our app and read this and other great stories on the move. Available for Android and iOS.