The Liberal Democrats have overturned a Tory majority of more than 19,000 to win the Somerton and Frome by-election.
Sarah Dyke won the Somerset seat by 11,008 in a dramatic 29.0 percentage point swing away from Rishi Sunak’s party.
But the Tory leader was spared the prospect of being the first prime minister since 1968 to lose three by-elections on the same day as Labour failed to secure victory in Boris Johnson’s former seat.
Sir Keir Starmer’s party had hoped to take Uxbridge and South Ruislip, which the former prime minister held with a majority of 7,210 in 2019, but Tory Steve Tuckwell managed to retain it with a majority of just 495.
Labour’s hopes are now pinned on Selby and Ainsty, where it is seeking to take a seat where the Conservatives were defending a 20,137 majority.
Liberal Democrat leader Sir Ed Davey said the Somerton and Frome result showed his party was once again winning votes in its former West Country heartland.
“The people of Somerton and Frome have spoken for the rest of the country who are fed up with Rishi Sunak’s out-of-touch Conservative government,” he said.
The victory means Sir Ed has become the first party leader since Paddy Ashdown in the 1990s to win four by-elections.
For Labour, the failure to secure victory in Uxbridge and South Ruislip in west London has led to a blame game among senior figures over the capital’s mayor Sadiq Khan’s plan to expand the ultra-low emission zone (Ulez) to cover outer boroughs.
Labour candidate Danny Beales had distanced himself from the policy, saying it was “not the right time” to expand the £12.50 daily charge for cars which fail to meet emissions standards.
The defeat in the seat was dubbed “Uloss” by a party insider in a sign of the unease at Mr Khan’s plan.
In his victory speech, new MP Mr Tuckwell said Mr Khan had cost Labour the seat.
“It was his damaging and costly Ulez policy that lost them this election,” he said.
“This wasn’t the campaign Labour expected and Keir Starmer and his mayor Sadiq Khan need to sit up and listen to the Uxbridge and South Ruislip residents.”
Labour shadow cabinet minister Steve Reed acknowledged it had been a factor in the campaign.
The shadow justice secretary told the PA news agency: “I think there’s been a number of issues at play, but there has certainly been a number of voters who have said to us that they are very concerned about Ulez. Everyone wants to see clean air.
“But for some people, I think, given the chaos that there is in the economy, because the Conservatives have crashed it and the cost-of-living crisis that they fuelled, that this is the wrong time to introduce a charge for Ulez.”