Soccer
A striker's shots and a substitute's are not the same fact. Every rate here is per 90 minutes and ranked against the player's own position group — shots, shots on target and expected goals, across Europe's major leagues and MLS. Free to browse.
Choose a league, choose a club, and see that club's season leaders arranged by their real registered position — free, no account. Every rate is per 90 minutes, ranked against every qualified player in that league.
6 club leagues: Premier League · La Liga · Serie A · Bundesliga · Ligue 1 · Major League Soccer.
Premier League
Manchester CitySeason leaders, by position — 2026/27
Antoine Semenyo
450 min this season
This is a season-leaders board, not a projected or confirmed lineup — a position with no qualifying player shows an empty slot rather than a guess. Rates are per 90 minutes from completed 2026/27 season games, minimum 450 minutes played. Full game logs, splits and projections live inside the dashboard.
Competitions
Each league is tracked separately, with its own fixtures, squads and per-90 tables. International competitions are kept apart from club form rather than blended into it.
Clubs include Arsenal, Liverpool, Manchester City, Real Madrid, Barcelona, Atlético Madrid, Juventus, Inter Milan, AC Milan, Bayern München, Borussia Dortmund, Paris Saint-Germain, Olympique de Marseille — alongside every other side in those competitions.
Methodology
Soccer breaks the comparisons that work in other sports. Minutes vary enormously — a substitute may play twelve minutes, a starter ninety — so raw per-game totals mostly measure playing time. And a full-back taking one shot a game is doing something completely different from a striker taking one. McAnalytics normalises every volume stat to a per-90 rate and then ranks it against players in the same position group, so the comparison is to genuine peers rather than to the league at large.
Expected goals sit alongside the raw counts, because a player generating high-quality chances without finishing them and a player finishing everything from poor positions look identical in a goals column and are not remotely the same player. Where a stat is not tracked for a given competition it reads as a dash rather than a zero — an untracked stat and a genuine zero are different facts, and conflating them is how a model quietly goes wrong.
These figures are descriptive league rates and backtested model diagnostics, not a performance claim. Past results do not predict future outcomes. McAnalytics publishes statistical research for informational purposes only; nothing here is advice of any kind, and no model output should be treated as a prediction or a guaranteed result.
What's inside
Soccer is the one sport here with several leagues running at once and squads rotating through midweek fixtures. These are the reads the dashboard is organised around.
Six volume stats as per-90 rates with the player's percentile against same-position peers.
Goals, shots, shots on target, assists, tackles and cards, measured against the posted line.
Per-shot and per-match xG alongside the raw finishing numbers, at both player and team level.
Projected and confirmed elevens for the next fixture, so a rotation risk is visible before kickoff.
What each side generates and concedes, split by home and away and by recent form.
League fixtures and national-team competitions kept separate, so a tournament sample is not blended into club form.
FAQ
The major European domestic leagues — the Premier League, La Liga, Serie A, the Bundesliga and Ligue 1 — plus MLS. International competitions are covered separately, so a national-team tournament sample is never blended into a player's club form.
Because minutes vary more in soccer than in any other sport. A substitute might play twelve minutes and a starter the full ninety, so a per-game average is mostly measuring playing time rather than performance. Normalising to a per-90 rate is what makes two players comparable at all.
Rather than ranking a player against everyone in the league, we rank them against players in the same broad role — full-backs against full-backs, central midfielders against central midfielders, strikers against strikers. A full-back in the 90th percentile for crosses is doing something meaningful; the same figure against all outfield players would tell you almost nothing.
Because that stat is not tracked for that competition or that fixture. A dash means unknown, and a zero means it genuinely did not happen — treating those as the same thing would quietly corrupt every rate built on top of them, so they are kept distinct.
No. There is no pick service. The product is a research dashboard — per-90 rates, xG, hit rates, lineups and team splits — presented so you can reach your own conclusion.
Team tables, the competition list, league-wide player lists and fixture lists are free to browse without an account. Player-level game logs, hit rates, odds, fingerprints and lineups sit behind a paid plan.