One of the ScoreMondo model’s 20,000 simulations — an estimate, not a result.
Preparing the simulation…
Portland TimbersKick-off0-0Houston Dynamo
90 minutes play in about half a minute.
Before kick-off: Model simulation (20,000 runs): Portland Timbers win in 54% of the simulated matches, 23% end level and Houston Dynamo win 23%. Average goals 3.0; the most likely score is 1-1 (11%); both teams score in 58%. About 9.8 corners on average. About 3.8 yellow cards on average; a red card in 17%.
Previous meetings and form
Head to head
1Portland Timbers1Draws3Houston Dynamo
Goals: 7 - 8 · last 5 meetings
MLSHouston Dynamo3 - 2Portland Timbers
Major League SoccerHouston Dynamo1 - 0Portland Timbers
Major League SoccerPortland Timbers3 - 1Houston Dynamo
Major League SoccerPortland Timbers2 - 2Houston Dynamo
Major League SoccerHouston Dynamo1 - 0Portland Timbers
Goals scored per match: 1.1Goals conceded per match: 1.5
Match analysis
Finished
Scoreyes
Statisticsyes
Line-upsyes
Pitch animationno
Pressure datano
Model estimateyes
Result verified.
Full time: Portland Timbers won 3-1.
Story
Portland Timbers vs Houston Dynamo: the story of the match
26' — Portland Timbers took the lead: 1-0. David Da Costa scored it. Half time: 1-0.
65' — Portland Timbers extended the lead: 2-0. Kristoffer Velde scored it. 71' — Houston Dynamo pulled one back: 2-1. Agustín Bouzat scored it. 79' — Portland Timbers extended the lead: 3-1. Vincent Janssen scored it. Portland Timbers won 3-1.
Chances to win
Model estimate
FT
Start45'90'
Portland TimbersDrawHouston Dynamo
Pre-match model estimate: Portland Timbers 54%, draw 23%, Houston Dynamo 23%.
Portland Timbers got the better of Houston Dynamo, winning 3-1 at Providence Park. It was 1-0 at half-time. The top ScoreMondo rating of the match went to Portland Timbers' Vincent Janssen: 9.0. The match was played on Monday, 2 November 2026 at Providence Park in Portland, Oregon (matchday 33).
The story of the match
David Da Costa opened the scoring for Portland Timbers after 26 minutes. It was Portland Timbers 1-0 Houston Dynamo at half-time.
Portland Timbers extended their lead to 2-0 on 65 minutes thanks to Kristoffer Velde, set up by Vincent Janssen. Just 6 minutes later (71') Houston Dynamo pulled one back to make it 2-1, Agustín Bouzat on target, set up by Duncan McGuire. Portland Timbers extended their lead to 3-1 in the 79th minute through Vincent Janssen.
Match statistics
The shot count read 14-6, 5-1 on target. Expected goals (xG) 1.96 – 0.70: Portland Timbers created the better chances. Corners finished 6-6. Cards: 2-2 in yellows. Houston Dynamo's goalkeeper made 6 saves. Portland Timbers committed 11 fouls to Houston Dynamo's 11, and the offside count read 2-0.
The best ScoreMondo ratings after the player of the match went to David Da Costa (Portland Timbers, 8.2), Kristoffer Velde (Portland Timbers, 7.5) and Agustín Bouzat (Houston Dynamo, 7.0). From the Portland Timbers bench came Cole Bassett on 62 minutes, Omir Fernández on 82 minutes, Alexander Aravena on 82 minutes and Diego Chará on 90 minutes, among 5 changes. Houston Dynamo made 5 changes: Duane Holmes for Franco Negri (36'), Matthew Arana for Artur (66'), Duncan McGuire for Ibrahim Aliyu (66') and Felipe Andrade for Lyle Foster (66').
How they came into it
Portland Timbers came into the match with 2 wins, 2 draws and 1 defeat from their last 5 matches — unbeaten in 3. Their most recent game was a 3-2 win over St Louis City SC for Portland Timbers. Before kick-off, Houston Dynamo's last 5 matches had brought 1 win and 4 draws. Last time out, Houston Dynamo beat Seattle Sounders1-0 away. Portland Timbers and Houston Dynamo have met 5 times in our records: 1 win for Portland Timbers, 3 for Houston Dynamo and 1 draw. The last meeting, in 2026 in MLS, went 3-2 to Houston Dynamo. Those 5 games produced 15 goals, an average of 3.0 per match. Drew Fischer was the referee, averaging 3.8 yellow cards per match across 70 matches in our records.
What the result means
Portland Timbers are now unbeaten in 4 matches. Houston Dynamo's 5-match unbeaten run is over.
This text is written automatically from our match data; every number and name in it comes from that data.