How to Compare Expected Assists (xA) for Players and Teams: A Practical Checklist
You’re watching a match, and a midfielder threads a perfect through ball that the striker somehow misses. The assist column stays at zero, but you know that pass deserved a better fate. That’s where Expected Assists (xA) comes in—a metric that measures the quality of a pass, not just its outcome. In this how-to, I’ll walk you through a step-by-step checklist to compare xA for both players and teams, using public stats from sources like FBref and Opta. No insider info, no guarantees—just the numbers and how to read them.
Step 1: Understand What xA Actually Measures
Before you dive into comparisons, get clear on the definition. Expected Assists (xA) assigns a value to each pass that leads to a shot, based on factors like pass type, distance, angle, and the situation (e.g., through ball vs. cross). A pass that sets up a clear chance from six yards out gets a high xA (say, 0.6), while a sideways pass from 30 yards gets a low one (0.02). Unlike traditional assists, xA accounts for the shooter’s miss—so it’s a better measure of creative output.
- Key difference: Assists count only when a goal is scored; xA counts every key pass that leads to a shot.
- Public source: FBref pulls xA data from Opta, available for most top leagues (Premier League, La Liga, Serie A, Bundesliga, Ligue 1).
Step 2: Collect Player-Level xA Data from Reliable Sources
Head to FBref or WhoScored and look for the “Expected” stats section. For players, you’ll typically see:
- xA per 90 minutes – normalizes for playing time.
- Total xA – raw creative volume.
- Key passes – passes leading to a shot (not xA-weighted, but useful context).
Example table (fictional, based on public-style data):
| Player | Position | Total xA | xA per 90 | Key Passes per 90 |
|---|---|---|---|---|
| Player A | Winger (4-3-3) | 8.2 | 0.45 | 2.8 |
| Player B | Attacking Mid (4-2-3-1) | 6.5 | 0.38 | 2.1 |
| Player C | Striker (3-5-2) | 3.1 | 0.18 | 1.1 |
Notice how Player A’s xA per 90 is higher—wingers in wide systems often get more crossing opportunities.
Step 3: Compare xA to Actual Assists for Context
This is where the real insight lives. Look at the gap between xA and actual assists:
- xA > actual assists: The player’s passes aren’t being finished (bad luck or poor finishers).
- Actual assists > xA: The player is overperforming (maybe due to exceptional finishers or luck).
Step 4: Shift to Team-Level xA for Tactical Patterns
Now zoom out. Team xA aggregates all key passes from every player. This tells you about the team’s creative system. For example:
- A team playing a 4-3-3 with high fullback involvement might have high xA from wide areas.
- A 3-5-2 team could have concentrated xA through central midfielders and wing-backs.
Example team comparison (fictional):
| Team | Formation | Total xA per Match | xA per Shot | Shots per Match |
|---|---|---|---|---|
| Team X | 4-2-3-1 | 1.8 | 0.12 | 15 |
| Team Y | 3-5-2 | 1.2 | 0.18 | 7 |
Team Y creates fewer chances but better ones—think a counter-attacking side.
Step 5: Cross-Reference with xG and PPDA xA doesn’t exist in a vacuum. Pair it with:
- Expected Goals (xG): If a team has high xA but low xG, their shooters are underperforming. Check our expected goals season review for deeper analysis.
- PPDA (passes per defensive action): A team with low PPDA (high pressing) might force turnovers that lead to high-xA chances. For example, a high-pressing 4-3-3 can generate creative passes from regains.
Step 6: Use Tables to Compare Players Across Leagues
When scouting players from different leagues (e.g., Ligue 1 vs. Premier League), adjust for league average. A winger with 0.5 xA per 90 in Ligue 1 might translate to 0.35 in the EPL due to stronger defenses. Use Transfermarkt valuations as a rough proxy for league quality, but remember: market value isn’t a transfer fee guarantee.
Comparison table (fictional):
| League | Player | xA per 90 | League Avg xA per 90 | xA Above Avg |
|---|---|---|---|---|
| Premier League | Player D | 0.42 | 0.28 | +0.14 |
| La Liga | Player E | 0.48 | 0.30 | +0.18 |
| Bundesliga | Player F | 0.50 | 0.32 | +0.18 |
Player F’s raw xA looks higher, but relative to league average, Player E and F are similar.
Step 7: Look at Contract and Release Clause Context (Optional)
For scouting, xA matters, but so does availability. Check contract expiry and release clauses on Transfermarkt. A player with high xA and a low release clause is a bargain—but don’t assume the clause guarantees a transfer. Use this info as a filter, not a prediction.
Step 8: Summarize Your Findings in a Checklist
Here’s your quick recap for comparing xA:
- Define xA and separate it from assists.
- Pull player xA per 90 and key passes from FBref.
- Compare xA to actual assists for regression clues.
- Analyze team xA per match and xA per shot.
- Cross-reference with xG and PPDA for tactical fit.
- Use league-adjusted tables for cross-league scouting.
- Check contract terms only for availability context.
- Never treat xA as a guaranteed performance predictor.
Remember: all stats come from public sources like Opta and FBref—no insider info here. Make your own conclusions, and enjoy the numbers.
