Local television reports initially put the number of dead at 16, but the figure was disputed and rose quickly.
"I have myself counted 21 bodies," said Mohabbat Khan, a doctor at the Lady Reading hospital where most casualties were taken.
Brigadier Javed Cheema, a spokesman for the interior ministry, gave a death toll of at least 19 and added that the authorities were investigating whether or not the device "was planted in advance".
"It exploded in the reception area of the Marhaba Hotel which is frequented by Afghans. We have sent a bomb disposal squad to investigate the nature of the explosion," he said.
Peshawar, the capital of North West Frontier Province, lies close to the border with Afghanistan and has seen periodic bomb attacks in recent years.
Sohail Rahman, reporting for Al Jazeera, said: "Peshawar is only 60km away from the Afghan border. In recent months we've seen an exodus of Afghan refugees from Pakistan being repatriated, some would say forcibly... There has been a bit of resentment as a result.
"On top of that, Peshawar has a mixed population and recently we've seen tension growing along the border area between Pakistan and Afghanistan."
A series of deadly blasts has hit Pakistan this year, including an attack not far from Peshawar on April 28 which killed 28 people and injured the country's interior minister.