San Diego FC vs Portland Timbers

26 April 2026 · MLS · 2026 · Referee Jon Freemon

Full time 1 – 2

Half-time: 1–1

  • Anders Dreyer 33’ (pen)
  • Kevin Kelsy 26’
  • Alex Bonetig 90+6’

Match summary

Portland Timbers took a 2-1 win at San Diego FC, with the winner arriving in stoppage time. It was 1-1 at half-time.

Kevin Kelsy put Portland Timbers ahead in the 26th minute, Anders Dreyer equalised from the penalty spot in the 33rd minute, and Alex Bonetig won it from a corner in stoppage time.

There was little between the sides on chances: San Diego FC created 1.90 expected goals (xG) from 10 shots, Portland Timbers 1.75 from 11.

Match stats

67% Possession 33%
10 Shots 11
3 Shots on target 5
6 Corners 6
89 Attacks 71
47 Dangerous attacks 35
753 Passes 363
90.0% Pass accuracy 83.2%
16 Tackles 16
12 Fouls 10
2 Yellow cards 1
5 Offsides 5

Key events

San Diego FC Portland Timbers
Kick-off
26’
Kevin KelsyLeft foot shot0-1 (Portland Timbers)
Anders DreyerPenalty1-1 (San Diego FC)
32’
42’
Alexander AravenaShot on target
Half-time1-1
Marcus IngvartsenVAR: Goal given
48’
Second half underway
Wilson EisnerIan Pilcher
59’
66’
Cole BassettShot on target
76’
Lewis MorganShot on target
79’
Bryce DukeJeppe Tverskov
81’
90’
Alex BonetigLeft foot shot1-2 (Portland Timbers)
90’
Kristoffer VeldeShot on target
Anders DreyerShot on target
90+9’

How the chances added up

Running total of expected goals (xG) for each side through the match. xG rates each chance by how often similar shots are scored. A goal is marked where it was scored.

0.0 0.5 1.0 1.5 2.0 2.5 0’ 15’ 30’ 45’ 60’ 75’ 90’ HT 1.90 1.75 26’ Kevin Kelsy (Portland Timbers), 0-1 26’ 33’ Anders Dreyer (San Diego FC), 1-1 33’ 90+6’ Alex Bonetig (Portland Timbers), 1-2 90+6’ 0.0 0.5 1.0 1.5 2.0 2.5 0’ 15’ 30’ 45’ 60’ 75’ 90’ HT 1.90 1.75 26’ Kevin Kelsy (Portland Timbers), 0-1 Kelsy 26’ 33’ Anders Dreyer (San Diego FC), 1-1 Dreyer 33’ 90+6’ Alex Bonetig (Portland Timbers), 1-2 Bonetig 90+6’
San Diego FC 1.90 xGPortland Timbers 1.75 xG Goal

Tap a goal for the scorer and score.

Shot map

Every shot and where it was taken from.

 Portland Timbers attacking San Diego FC attacking 
83’ Antony Alves (Portland Timbers), open play, 0.82 xG, off target 33’ Anders Dreyer (San Diego FC), penalty, 0.79 xG, goal 90+9’ Anders Dreyer (San Diego FC), open play, 0.28 xG, saved 42’ Alexander Aravena (Portland Timbers), open play, 0.26 xG, saved 79’ Lewis Morgan (San Diego FC), open play, 0.26 xG, saved 90+9’ Anders Dreyer (San Diego FC), open play, 0.20 xG, blocked 26’ Kevin Kelsy (Portland Timbers), open play, 0.13 xG, goal 90+6’ Jímer Fory (Portland Timbers), from a corner, 0.14 xG, blocked 56’ Oscar Verhoeven (San Diego FC), open play, 0.12 xG, blocked 90+6’ Alex Bonetig (Portland Timbers), from a corner, 0.09 xG, goal 19’ Marcus Ingvartsen (San Diego FC), open play, 0.09 xG, blocked 84’ David Pereira Da Costa (Portland Timbers), open play, 0.09 xG, blocked 90+4’ Brandon Bye (Portland Timbers), from a corner, 0.09 xG, off target 9’ Onni Valakari (San Diego FC), open play, 0.07 xG, blocked 9’ Marcus Ingvartsen (San Diego FC), open play, 0.05 xG, off target 90+10’ José Caicedo (Portland Timbers), open play, 0.04 xG, off target 90+6’ Kevin Kelsy (Portland Timbers), from a corner, 0.03 xG, off target 90’ Kristoffer Velde (Portland Timbers), open play, 0.03 xG, saved 12’ David Vazquez (San Diego FC), open play, 0.02 xG, off target 66’ Cole Bassett (Portland Timbers), open play, 0.02 xG, saved 37’ Manu Duah (San Diego FC), set piece, 0.02 xG, off target 83’ Antony Alves (Portland Timbers), open play, 0.82 xG, off target 33’ Anders Dreyer (San Diego FC), penalty, 0.79 xG, goal 90+9’ Anders Dreyer (San Diego FC), open play, 0.28 xG, saved 42’ Alexander Aravena (Portland Timbers), open play, 0.26 xG, saved 79’ Lewis Morgan (San Diego FC), open play, 0.26 xG, saved 90+9’ Anders Dreyer (San Diego FC), open play, 0.20 xG, blocked 90+6’ Jímer Fory (Portland Timbers), from a corner, 0.14 xG, blocked 26’ Kevin Kelsy (Portland Timbers), open play, 0.13 xG, goal 56’ Oscar Verhoeven (San Diego FC), open play, 0.12 xG, blocked 90+6’ Alex Bonetig (Portland Timbers), from a corner, 0.09 xG, goal 19’ Marcus Ingvartsen (San Diego FC), open play, 0.09 xG, blocked 84’ David Pereira Da Costa (Portland Timbers), open play, 0.09 xG, blocked 90+4’ Brandon Bye (Portland Timbers), from a corner, 0.09 xG, off target 9’ Onni Valakari (San Diego FC), open play, 0.07 xG, blocked 9’ Marcus Ingvartsen (San Diego FC), open play, 0.05 xG, off target 90+10’ José Caicedo (Portland Timbers), open play, 0.04 xG, off target 90+6’ Kevin Kelsy (Portland Timbers), from a corner, 0.03 xG, off target 90’ Kristoffer Velde (Portland Timbers), open play, 0.03 xG, saved 12’ David Vazquez (San Diego FC), open play, 0.02 xG, off target 66’ Cole Bassett (Portland Timbers), open play, 0.02 xG, saved 37’ Manu Duah (San Diego FC), set piece, 0.02 xG, off target
Size shows xG Goal On target Off target or blocked

Hover or tap a shot for the player, minute and xG.

Lineups

San Diego FC 4-3-3 Starting XI
Ferree
McVey
Duah
Pilcher 59’
Verhoeven 81’
Godoy 72’
Tverskov 81’
Valakari
Vazquez 72’
Ingvartsen
Dreyer
Portland Timbers 4-2-3-1 Starting XI
Pantemis
Fory
Surman
Bonetig
Bye
Caicedo
Bassett 86’
Velde 90’
Aravena 73’
Costa
Kelsy

Player stats

Goalkeeper1 player
90′ 4 2 31 2 – – – –
Defenders6 players
Oscar Verhoeven Taken off
81′ – – – 2 1 46 – – – –
90′ 3 – – 4 1 95 – – – –
90′ 1 1 – 3 1 109 – – – –
Ian Pilcher Taken off
59′ 2 – – 2 – 52 1 – – –
Wilson Eisner Came on as a substitute
31′ – – – 2 – 19 – – – –
Kieran Sargeant Came on as a substitute
9′ – – – – – 7 – – – –
Midfielders7 players
Aníbal Godoy Taken off
72′ – – 78 – 0.04 2 – 2 2 – –
Jeppe Tverskov Taken off
81′ – – 94 2 0.07 2 1 3 2 – –
90′ – – 64 – 0.14 4 – 5 – 1 –
90′ 1 – 59 2 0.24 – – – – – –
David Vazquez Taken off
72′ – – 34 – 0.04 1 – 3 2 1 –
Pedro Soma Came on as a substitute
18′ – – 23 – 0.02 – – – 1 –
Bryce Duke Came on as a substitute
9′ – – 8 1 0.02 1 – 1 1 – –
Forwards2 players
90′ – – 2 – 0.14 0.28 1 4 2 25
Lewis Morgan Came on as a substitute
18′ – – 1 1 0.26 0.38 – 1 – 5 –
Came on Taken off Sent off Red is the most in that position for the team

Every player who took the pitch, starters first and then substitutes. A dash means none. xG and xA are expected goals and assists.

Form going into the game

Last five league games before this one, oldest first. Select one to open it.

Previous and next meeting

Shots, expected goals, timeline, lineups, team and player statistics from Bzzoiro Sports Data (sports.bzzoiro.com). Results and odds from football-data.co.uk.