Ranking the top MLS Attackers of 2025
A brute-force way to identifying each team's impactful attacking players
As part of this newsletter’s continuing mission to make it easier to understand your favorite MLS team’s opponent in a given game, I’ve been wanting to do something to call out dangerous attackers on each team…or, alternatively, the lack thereof.
So far my previews have two elements that speak to this:
a rating for the team’s overall offense, which for the first four weeks was based on 2024 goals scored but starting in week 5 is based on the first four weeks’ 2025 non-penalty expected goals.
a list of the team’s designated players, including a qualitative rating of how well they did in 2024 based on G+A/90 (only available for attacking DPs, which is most of them, and DPs who were in MLS last year, which leaves out a lot of them)
The obvious problem with listing only DPs is that there are really good attacking players who aren’t DPs. Meanwhile, 2024 is getting farther in the rear view mirror. Luis Muriel, for example, was “Below Average” in 2024 G+A, but his 2 goals and 3 assists in 5 games this season put him in the top 10.
So today I want to figure out who this season’s top attackers are and start using that going forward in my previews. I’ll explain the choices I made here first, but if you don’t care about that you can just scroll down to the charts.
Choosing The Right Stats
The first order of business is picking the best metrics. When thinking about offenses across 34 games in 2024, I used actual goals and actual assists instead of expected stats on the grounds that some teams consistently over- or under-perform their expected stats. For rating teams after four games, though, I used expected goals because it does a better job screening some of the luck that comes from such a small sample size.
For players this is even more true. Only five players have more than three goals, so in terms of actual goals scored, everyone else is mashed together. There’s also some defenders and defensive midfielders sitting on 1 goal who probably won’t score again this season.
So I’ll use expected goals again and that should capture which players are likeliest to score, but the most prized quality in soccer is creativity. What’s the best stat to use for that? There’s a lot of choices.
xAG or as I prefer to call it “Assisted Expected Goals” credits the xG produced by a shot to the player who made the last pass before that shot, if any. This helps determine who is creating high xG shot opportunities, but it’s a bit unsatisfying because we care about the passer but they only get credit if the player they pass to manages to take a shot. What if that guy is a terrible player who screws up the chance?
xA or “Expected Assists” works around that with a specific model that looks at where a pass is received, predicts the likelihood of a goal being scored, and assigns that to the passer whether or not an actual shot is taken. I use xA for my weekly reviews, but it’s not perfect either since the model isn’t able to perfectly account for opposing player locations and so on.
Another issue: because some goals are unassisted, there’s a lot less xAG and xA sloshing around than xG. When we’re only looking at the first handful of games in a season, that feels like a big downside to me. For example, Cristian Espinoza currently leads the league in xAG by a mile with just 3.1 (Pep Biel is in second place with 2.0). Djordje Mihailovic leads the league in xA with just 2.3.
A third choice, and the one I decided to use, is Shot-Creating Actions. What’s nice about this is it incorporates more than just passes: dribbling, getting fouled, taking a shot that’s blocked, and taking the ball from the opponent. It casts a bit of a wider net because it goes two “actions” back from each shot. And there’s a bit better sample than xAG and xA in practice. Cristian Espinoza also leads the league by a mile in SCA (good to see that correspondence with xAG) with 43. The downside is it doesn’t distinguish between creating a tap-in and “creating” a hopeless shot from way outside the box. Oh well; nothing’s perfect.
So the two stats I’m going to use are xG and SCA. Except…we’ll definitely want to use the “per 90 minutes” versions. And I almost always prefer non-penalty xG to just plain xG, and this is also one of those times. Okay, so npxG/90 and SCA/90. I’m also using FBref’s default minutes minimum, which I believe is 180 minutes at the moment.
Ranking
When I was looking at DPs in 2024, I assigned them into buckets based on their G+A/90: great, above average, below average, disappointing (and then Messi was in his own category because naturally he was a huge outlier). It was pretty straightforward to do this since I could literally average together all the attacking DP’s 2024 G+A/90 numbers.
I can’t do that for attackers more generally. I don’t want to average together all MLS players when most players on the field aren’t expected to score lots of goals or even create a lot of shots. It should just be attackers, but who should count as an attacker? I can only really answer that for a team like DC United where I’ve watched every game, but even then, Hosei Kijima has sometimes played on the wing and sometimes in central midfield much farther from goal.
What I decided to do instead is to just ignore that question by pulling the top players in each of these stats. Specifically, I decided to do a top 90 in each. I know that sounds a little weird. 90? Why not a top 50, or top 100, or top 250? Well, I chose 90 because there are 30 MLS teams. If talent were spread perfectly evenly, each team would have three players in the top 90. And going back to the original purpose, if you ask me who the dangerous players are on this week’s opponent and I tell you a ton of names, or only a single name no matter how good the team is, that doesn’t sound right. An average of 3 sounds like the right number to me.
So let’s finally get to the numbers!
The players at the top of this list are mostly who you’d expect: forwards, most of whom (but not all!) are designated players. As you go down the list you get more wingers and attacking midfielders mixed in.
Note that just because someone is on this list at all doesn’t mean they’re having a good season. In 2024, Tani Oluwaseyi led the league with 0.69 npxG/90 (Messi was third with 0.67). Disappointing New England DP Giacomo Vrioni was 25th with 0.45. Does that mean 25th on this list of 90 players is already in disappointment territory?
It depends. If you think about it, a DP forward really ought to not just be on this list, they should be at least in the top 30 since most teams play with one forward and they should be accruing more xG than wingers and attacking midfielders. And then if you are 25th, well, it’s not actually a good thing to be the 25th best forward in the league. That’s below average. Top 10 or at minimum top 15 is probably where a great forward should be striving to fall on this list.
So why am I going all the way to 90 if there are a lot of mediocre players in it? Because although that lets in a bunch of mediocre forwards, it helps capture dangerous players in other positions. This initial 2025 list even includes Aaron Long, a central defender! I think it tells you something useful about the New York Red Bulls to see Aaron Long showing up here!
Also worth mentioning is the breakdown by player type:
There are 67 designated players and 66 U22 initiative players, though note there are a lot more U22 initiative players who aren’t attackers than there are non-attacker DPs. I’ll take a close look at the DP situation later, but it’s worth noting some DPs make big contributions to the attack without shooting much and therefore didn’t make this list. For example, Cristian Espinoza, who as I mentioned is leading the league in xAG and SCA, didn’t make the top 90 in npxG.
Well, that’s why there’s two lists. Let’s get to the second one.
Now we’re getting players like Espinoza and Miguel Almirón. Messi is in the top 10 of both lists, as we’d expect. There are 41 players who are on both, in fact, dual-threat guys like San Diego’s Anders Dreyer (#10 on the npxG list, #20 here).
The breakdown of DPs and U22 players is very similar here:
Missing DPs
There are 22 DPs who aren’t on either list. Most of these have an excuse.
Obviously while most DPs are attackers, not all of them are. Walker Zimmerman and Thiago Martins are central defenders. Darlington Nagbe, Artur, Sergio Busquets, and Andrés Cubas are defensive midfielders. And Jordi Alba is a fullback. Alba would have made the SCA/90 list in 2024, but his shot-creation as declined so far this season.
That leaves 15 missing DPs. Many of those have been injured either the entire season, or for enough games they don’t have enough minutes to get on this list: Joseph Paintsil, Riqui Puig, Cengiz Ünder, Giacomo Vrioni, Tomás Chancalay, Jonathan Rodriguez, Pedro de la Vega, and Hernán López. Then there’s Lorenzo Insigne, who hasn’t been injured as far as I know, but nevertheless he’s only played in one game so far.
That leaves just five DPs who play attacking positions, have enough minutes to be on these lists, but still didn’t make either: Kévin Cabral, Dejan Joveljić, Olivier Giroud, João Klauss, and Federico Bernardeschi.
Not a good list to be on! But the season is young and I’m sure we’ll see a lot of changes.
Team Representation
I mentioned that in theory each team would have three players on each list, but although MLS has a lot of parity, things aren’t nearly that even. Here’s the number of players each team has on each list. This counts the same player twice if they make both lists. It also gives a team the same credit for having the 90th best player as the 1st, but I think it’s still indicative:
15 teams have more than 6 players. The teams at the bottom of the list are pretty much the ones you’d expect, though for some reason at the top there are a lot of currently midtable Western Conference teams instead of the strong Eastern Conference teams I thought I’d find. Maybe that’ll even out a bit over the course of the season.
That’s all for today. I’ll try to incorporate this into previews for Matchweek 6, and then next week take a look at team age and playing styles.