2025 Porto local election
The 2025 Porto local election was held on 12 October 2025 to elect the members for Porto City Council, Porto Municipal Assembly and the city's 7 parish assemblies.
This election was expected to be extremely competitive after the 3 mandates of the liberal-backed Independent Rui Moreira, which was barred from running for a 4th term, with both the Socialists and Social Democrats hoping to win the second major city in Portugal, with Moreira's independent movement presenting then deputy mayor Filipe Araújo as a candidate, despite not having the endorsement of Rui Moreira himself.
The Socialist Party chose former Health minister Manuel Pizarro as their candidate, while the Social Democratic Party formed a coalition with the CDS – People's Party and the Liberal Initiative with former minister of Parliament Affairs Pedro Duarte as their candidate.
The final result was very close, with the PSD/CDS/IL candidate, Pedro Duarte, prevailing over the PS by just 2,000 votes. Manuel Pizarro failed in his 3rd attempt to become mayor of Porto, leading the Socialists to another defeat; the last time the PS won a local election in Porto was 1997. Chega gathered 8.5% of the voted and elected one councillor, while CDU failed to win representation for Porto city council for the first time ever. Deputy mayor Filipe Araújo had a very poor result, just 5% and failed to be elected to council, while the Left Bloc also lost its sole councillor, and polled at just 1.8%. Turnout increased considerably in this election, with 57% of voters casting a ballot, the highest share since 1993.
Background
In the 2021 election, Rui Moreira, mayor since 2013, won a third term as Mayor of Porto, winning 40.7% of the votes and 6 seats, losing his majority in the city council. The Socialist candidate, Tiago Barbosa Ribeiro, won 18.0% of the vote and 3 seats, while the Social Democratic candidate, Vladimiro Feliz, won 17.2% of the votes and 2 seats.The Unitary Democratic Coalition, led by Ilda Figueiredo, won 7.5% of the votes and 1 seat, while the Left Bloc, which presented Sérgio Aires as a candidate for mayor, gained a seat in the City Council, for the first time in its history, achieving 6.3% of the votes.
Candidates selection
After 12 years of Independent Rui Moreira as Mayor, the two major parties, the Socialist Party and the Social Democratic Party, sought to retake Porto.On the right, Filipe Araújo, the leader of Rui Moreira's independent movement and Deputy Mayor, sought to run as an independent, despite pressures from the PSD who wanted to prevent a split among the right. The PSD waited for Minister of Parliamentary Affairs Pedro Duarte to be the party's candidate for Mayor, despite having other options such as MP Miguel Guimarães, while initiating talks with CDS–PP and the Liberal Initiative for a coalition.
On April 2025, Pedro Duarte confirmed his intention to run for Mayor with a PSD/CDS/IL coalition. Meanwhile, Filipe Araújo decided to still run, despite not having the endorsement of Rui Moreira.
On the left, the PS had several potential candidates, such as former minister and former Mayor of Baião José Luís Carneiro, executive director of the National Healthcare Service Fernando Araújo and former minister of Health and candidate for mayor in 2013 and 2017 Manuel Pizarro. Pizarro was eventually chosen as the candidate.
Electoral system
Each party or coalition must present a list of candidates. The winner of the most voted list for the municipal council is automatically elected mayor, similar to first-past-the-post. The lists are closed and the seats in each municipality are apportioned according to the D'Hondt method. Unlike in national legislative elections, independent lists are allowed to run.Campaign period
Candidates' debates
Results
Municipal Council
! rowspan="2" colspan=2 style="background-color:#E9E9E9" align=left|Parties! rowspan="2" style="background-color:#E9E9E9" align=right|Votes
! rowspan="2" style="background-color:#E9E9E9" align=right|%
! rowspan="2" style="background-color:#E9E9E9" align=right|±pp swing
! colspan="2" style="background-color:#E9E9E9" align="center"|Councillors
! style="background-color:#E9E9E9" align="center"|Total
! style="background-color:#E9E9E9" align="center"|±
Municipal Assembly
! rowspan="2" colspan=2 style="background-color:#E9E9E9" align=left|Parties! rowspan="2" style="background-color:#E9E9E9" align=right|Votes
! rowspan="2" style="background-color:#E9E9E9" align=right|%
! rowspan="2" style="background-color:#E9E9E9" align=right|±pp swing
! colspan="2" style="background-color:#E9E9E9" align="center"|Seats
! style="background-color:#E9E9E9" align="center"|Total
! style="background-color:#E9E9E9" align="center"|±
Parish Assemblies
!rowspan=2|Parish!!%!!S!!%!!S!!%!!S!!%!!S!!%!!S!!%!!S!!%!!S!rowspan=2|Total
S
!colspan=2 | OPSN
!colspan=2 | PS
!colspan=2 | CH
!colspan=2 | FA
!colspan=2 | L
!colspan=2 | CDU
!colspan=2 | BE