Another 27 were injured in the accident near the town of Caniço.
The accident happened at 18:30 (17:30 GMT) when the driver lost control of the bus at a junction and went off the road, according to Portuguese news agency Lusa.
Pictures show how the vehicle stopped just short of destroying a house.
"I have no words to describe what happened. I cannot face the suffering of these people," the mayor of Caniço, Filipe Sousa, told broadcaster SIC TV.
READ MORE