This article is more than
5 year oldThe candidate for the main opposition party, Ekrem Imamoglu, won 54% of the vote with nearly all ballots counted.
He won a surprise victory in March which was annulled after the ruling AK party complained of irregularities.
His opponent, ex-PM Binali Yildirim, has conceded. President Recep Tayyip Erdogan congratulated the winner.
"I congratulate Ekrem Imamoglu who has won the election based on preliminary results," he tweeted.
But the result is being seen as a major setback for Mr Erdogan, who has previously said that "whoever wins Istanbul, wins Turkey".
In his victory speech, Mr Imamoglu said the result marked a "new beginning" for both the city and the country.
"We are opening up a new page in Istanbul," he said. "On this new page, there will be justice, equality, love."
He added that he was willing to work with Mr Erdogan, saying: "Mr President, I am ready to work in harmony with you."
Mr Imamoglu's lead of more than 775,000 votes marks a huge increase on his victory in March, when he won by a margin of just 13,000.
President Erdogan - the most powerful leader Turkey has seen in modern times - has just been dealt the biggest blow of his career.
This result shows that he made an incredible miscalculation by calling for the election to be re-run.
It will likely hasten splits in his ruling AK party and amplify talk of the post-Erdogan era. He will stress that he's in power for the foreseeable future - elections are not scheduled until 2023 - but many will expect them earlier.
The result in Istanbul feels like it could be a precursor to them.
So how did the opposition win? Ekrem Imamoglu gave people the profoundly positive message they craved and rebuffed smears with smiles.
It was hugely effective, and showed the opposition Republican People's Party (CHP) has finally worked out how to counter the president.
They have waited 25 years to control this city and have long felt incapable of success. They are savouring this moment - after all, it could be a watershed one.
Mr Imamoglu, 49, is from the secular Republican People's Party and is mayor of Istanbul's Beylikduzu district.
But his name was barely known before he ran for mayor in the March election.
Mr Yildirim was a founding member of Mr Erdogan's AKP and was prime minister from 2016 until 2018, when Turkey became a presidential democracy and the role ceased to exist.
He was elected Speaker of the new parliament in February and before that served as minister of transportation and communication.
Mr Imamoglu's narrow victory of 13,000 votes in March was not enough for Mr Yildirim to accept defeat.
The ruling party alleged that votes were stolen and many ballot box observers did not have official approval, leading the election board to demand a re-run of the vote.
Critics argue that pressure from President Erdogan was behind the decision.
By Cagil Kasapoglu, BBC Turkish, Istanbul
Hundreds of supporters of Mr Imamoglu have gathered here in his stronghold, Besiktas.
The cautious optimism that was prevalent during the early stages of vote counting has given way to a mood of total jubilation.
Hopeful youngsters are celebrating and proudly waving Turkish flags. Others are holding banners with pictures of Atatürk - the founder of the modern Turkish republic - on them. Some people are even wearing masks of Mr Imamoglu.
Many of these young people have only ever known President Erdogan's AK party in government.
For them, this is an opportunity to push for change across the country.
"Many young people desperately want to leave Turkey," Ayca Yilmaz, a 22-year-old university student tells me. "But now, we might consider staying here. We are hopeful once again."
Mr Erdogan, who is from Istanbul, was elected mayor in 1994.
He founded the AKP in 2001 and served as prime minister between 2003 and 2014, before becoming president.