Six adults and a girl aged 17 escaped from the fireball by smashing the bus windows. They were taken to hospital with burns.
The crash happened at about 2am local time near the village of Bosnek, about 25 miles south west of the capital Sofia.
Most of the 52 people on board, including the driver, who did not survive, were from North Macedonia, returning from a weekend trip to Istanbul in Turkey.
Bulgaria’s interior minister Boyko Rashkov said at the scene: “The picture is terrifying, terrifying. I have never seen anything like that before.”
It is unclear what caused the tragedy but officials said the bus appeared to have struck a road barrier either before or after it caught fire.
North Macedonia’s prime minister, Zoran Zaev, said a survivor told him sleeping passengers were woken by the sound of an explosion.
Mr Zaev said: “He and the other six survivors broke the windows of the bus and managed to escape and save themselves.” He added: “We do not know if all the passengers are our citizens but we suspect so, as the bus has a Macedonian registration.”
Bulgarian premier Stefan Yanev said: “Let’s hope we learn lessons from this tragic incident and we can prevent such incidents in the future.”
The area around the crash site on the Struma motorway has been sealed off as experts probe the incident.
Investigative service chief Borislav Sarafov said: “Human error by the driver or a technical malfunction are the two initial versions for the accident.”