Local media are reporting a five month old baby, a boy, seven and a girl, 10, are among those who have died.
Those who have died are believed to be part of the same extended family.
They were travelling in a small bus, called a jeepney, to an early morning service at the famous Our Lady of Manaoag church in the northern Philippines.
Police said their bus crashed at 3.30am (7pm GMT on 24 December) into a larger bus in the town of Agoo, La Union, 125m north of the capital, Manila.
The jeepney’s engine came out of the front of the vehicle which was largely crushed.
Another 10 passengers on the bus were injured and taken to the local hospital, Chief Inspector Roy Villanueva said.
He told a local radio station the smaller vehicle veered out of its lane to overtake another vehicle before crashing into the oncoming bus.
A report from Mr Villanueva said the driver and 19 passengers were “dead on arrival”.
It said the driver of the other bus was unharmed but 15 passengers and a bus conductor sustained minor injuries.
“Both vehicles incurred heavy damages with still undetermined cost of repair/parts replacement,” it added.
The Philippines, a majority Catholic country, has experienced several devastating incidents in the run up to Christmas Day.
On Saturday morning at least 37 people died in a shopping mall fire in the southern city of Davao.
More from World
Guatemala to move Israel embassy to Jerusalem
New sanctions on North Korea an ‘act of war’
Philippines mall fire: Dozens die as president says ‘zero’ survival chance
200 left stranded by faulty lift in French Alps
Hundreds of surfing Santas take to Florida waves
Thousands turn out in Russia to endorse Putin rival Navalny for presidency
A tropical storm towards the end of the week killed more than 200 people, with the death toll expected to rise as villages flooded.