Football stats sites tested on La Liga
We opened football stats sites on the same La Liga games. Three showed identical xG on one match. For Barcelona's season, FootyStats gave about 16.7 xG, four others 28.5 to 29.4.
Pros
- Same La Liga games on every site.
- Shows whose xG model you see.
- Names where free xG stops.
- Paid tiers listed side by side.
Cons
- No single winner or ranking.
- Season figures from one league only.
- Tested on desktop, apps only for prices.
- Figures change, checked August-September.
Short answer: the best football stats site for each type of bet.
- Season xG for the top five leagues and Russia: Understat.
- xG for one match in more leagues: FotMob, Sofascore or Flashscore, which showed the same xG in our test.
- A match in a small league: Flashscore, which had xG where FotMob had none.
- Goals markets in lower leagues: FootyStats, on its own xG scale.
- Cards, penalties, referees and old head-to-head records: FBref.
- Missing players and results going back decades: Soccerway.
- Tennis, basketball and other sports: Sofascore or Flashscore.
One match, one player, one season
We used the desktop websites without an account and without paying. The test match was Rayo Vallecano 2-1 Espanyol, La Liga, 15 September 2026. The test player was Waldemar Anton in Hoffenheim 2-3 Dortmund on 5 September.
Why one match? The shots are the same on every site, so a gap in xG from the same shots comes from the site's model.
FootyStats locks guests out for four hours after a few match pages, so we left it out of the match test. Its league pages stay open, and we compared it on La Liga season figures after seven rounds.
Most of this page is about xG, or expected goals. xG gives every shot a chance from 0 to 1 of going in. A tap-in from two meters can be 0.7, a shot from 30 meters about 0.03. Add up a team's shots and you get its match xG. xGA is the same number for the chances a team allowed. Our xG guide shows how to turn that number into a price.
The sites: owners, leagues, xG
FBref is a free archive of basic football numbers from Sports Reference. It has results, shots, cards, goalkeeper saves, referees and head-to-head records for more than 100 competitions. Its xG and other advanced stats were deleted on 20 January 2026, when the data company Stats Perform ended the deal. Stats Perform's Opta brand records every shot, pass and tackle in a match and sells the data to websites, TV and bookmakers.
Understat shows xG for six leagues: the Premier League, La Liga, Bundesliga, Serie A, Ligue 1 and the Russian Premier League. Seasons go back to 2014/15, and every table has an export button. The site names no company, and the only contact is an email address.
Sofascore is a live score site from Zagreb, Croatia, with more than 20 sports. Bigger football competitions get xG, xGOT and a player rating. xGOT is the chance that a shot on target goes in, judged by where it was placed.
FotMob is a football-only app and website from Bergen, Norway. The shot map shows xG for every single shot.
Flashscore is a live score site from Livesport in Prague, with 35 sports. It names Opta as its football data source. Every player gets a rating, and the player table can be sorted by xG.
Soccerway is one of the oldest football results sites. Livesport owns it too, and since 2025 it runs on Flashscore's system. On our match it showed the same xG, xGOT and player table as Flashscore. What it adds is a results archive back to the 1970s and a list of missing players before each match.
WhoScored is best known for player ratings and team style profiles. The match page has no xG. League pages do have a season xG table, and player pages show xG per competition.
FootyStats turns past results into percentages for over 2.5 goals and both teams to score (BTTS) across 1500+ competitions, and for corners and cards with Premium. Over 2.5 goals means three goals or more in the match. Over-Under Digital in Canada runs it. Its xG comes from a formula of its own, built from shot counts, shots on target and possession. Guests get a few match pages, then a four-hour lock.
Football stats websites side by side
The table shows each site as we found it in August and September 2026.
| Feature | FBref | Understat | Sofascore | FotMob | Flashscore | Soccerway | WhoScored | FootyStats |
|---|---|---|---|---|---|---|---|---|
| Sports | Football | Football | 20+ sports | Football | 35 sports | Football | Football | Football |
| xG on match page | No, removed | Yes, six leagues | Bigger competitions | Bigger competitions | Yes, to small leagues | Same as Flashscore | No | Own formula |
| xG per shot or player | No | Per shot | Per shot | Per shot | Per player | Per player | No | No |
| Season xG table | No | Yes | xG ranking only | xG, xGA, xG diff rankings | None found | None found | Yes, league pages | Yes, own formula |
| Whose xG | None | Own model | Not named | Opta | Opta | Opta, via Flashscore | Opta | Own formula |
| Player rating | No | No | Yes | Yes | Yes | Yes | Yes | No |
| Guest limit | None seen | None seen | None seen | None seen | None seen | None seen | None seen | Few matches, then 4 hours |
| Data export | Yes | Yes, CSV | No | No | No | None seen | No | CSV with Premium |
| Mobile app | No, mobile site | No | iOS, Android | iOS, Android | iOS, Android | iOS, Android | iOS, Android | iOS, Android |
| Paid tier | Stathead | None | Plus, Pro | Ad-free | Ad-free, iPhone only | None seen | WhoScored+ | Premium |
| Bookmaker block | None seen | None seen | 1xBet, Melbet | One bookmaker | Two, after age check | Odds, no age check | Bonus offers | Odds tables, no ads |
| Company named | Sports Reference, USA | None | Zagreb, Croatia | Bergen, Norway | Livesport, Prague | Livesport, Prague | Cyan Blue Odds, Alderney | Over-Under Digital, Canada |
Sofascore, FotMob and Flashscore gave Rayo the same 1.71 xG. Understat gave 1.83 from the same 16 shots.
One La Liga match, every site
Sofascore had Rayo on 1.71 xG and Espanyol on 1.65. Shots were 16 and 19. xGOT was 0.93 and 1.15.
FotMob showed exactly the same xG, shots and xGOT. Like Sofascore, it showed two big chances for each side, meaning chances a player should usually score, and a card for every shot. Espanyol's goal came from a fast break at 54 minutes: xG 0.19, xGOT 0.72.
Flashscore showed 1.71 and 1.65 as well. Soccerway matched Flashscore down to the player table, because both run on one system. Four sites, one set of numbers: opening all four tells you nothing new.
Understat gave Rayo 1.83 from the same 16 shots. That is 0.12 more, from a different model.
WhoScored has no xG in its Match Centre or Match Report. The red card for Espanyol's Omar El Hilali has a different minute on two sites: 90+7 on WhoScored and 90+8 on FotMob.
FBref gives the basic facts for this match: shots, cards and the referee.
1.71 or 1.83 xG: two fair prices
Is 0.12 xG a real difference? Take Rayo's xG as the number of goals they would score on an average day. Then use the standard goals formula that our xG guide explains.
- With 1.71 xG, the chance that Rayo score two or more is 51.0%. Fair odds: 1.96.
- With 1.83 xG, the chance is 54.6%. Fair odds: 1.83, the same digits as the xG by chance.
Fair odds are odds with no bookmaker margin, the extra a bookmaker builds into every price. To get them, divide 1 by the chance: 1 / 0.510 = 1.96.
So the same match gives two fair prices, 1.96 and 1.83, depending on the site. Pick one source for each league and stay with it. A rule like “bet over when a team averages 1.5 xG” built on Understat numbers will give different bets on FotMob numbers.
Sofascore or FotMob: same xG data?
In our Sofascore vs FotMob test, xG and xGOT on the Rayo match were identical to the hundredth for both teams.
FotMob names Opta as the source of its xG in a May 2026 press release, and Flashscore names Opta in its own FAQ. Sofascore's xG info box names no provider, and a 2025 study in the Journal of Sports Sciences notes that Sofascore does not disclose its source.
Their league pages agree as well. For La Liga, Sofascore had Barcelona on 28.53 season xG and FotMob on 28.5. Real Madrid had 18.5 on both, Villarreal 16.56 and 16.6.
Anton's only Bundesliga shot also had the same xG, 0.02, on FotMob and on WhoScored.
Our reading is that Sofascore shows Opta xG, at least in La Liga. One match and one league cannot prove it for every competition, so treat it as likely, not certain.
The two sites differ in other ways:
- Sofascore covers more than 20 sports. FotMob covers football only.
- Both open a card for every shot with its xG and xGOT. Sofascore also shows where in the goal the shot went, for example “High” for Budimir's 0.06 miss for Osasuna against Rayo.
- Sofascore also lists amateur matches that users enter themselves. They show “Edited by” and a user name, and they have no Statistics tab.
FotMob also shows the referee's cards per match on the match page. For tennis or basketball bets, Sofascore or Flashscore is the one to keep.
Understat's own pages disagree: Barcelona had 29.40 xG in the league table and 31.50 on the team page.
FBref or Understat: more leagues or xG
Many older Understat vs FBref guides still send readers to FBref for xG. Of the two, only Understat has it now.
FBref covers more than 100 competitions, with home and away splits, penalties won and conceded, goalkeeper saves, cards per player and the referee of every match. Its head-to-head pages are still there.
Understat has only six leagues, but each one has xG, expected points (xPTS) and shot maps.
Understat's numbers can differ between its own pages. After seven rounds of La Liga, Barcelona had 29.40 xG in the league table. The team's Situation tab added up to 31.50 for the same matches.
For a match in one of the six leagues you can open both: FBref for cards, penalties and the referee, Understat for the quality of the chances.
xG coverage: top leagues to amateurs
Understat covers its six leagues and nothing else.
FotMob showed xG for the Champions League final, the Eredivisie, the English Championship and MLS. In August 2026 the Bolivian Primera División had shots and possession but no xG. Danmarksserien, a Danish amateur league, had no statistics tab at all.
Flashscore went further. It showed xG on a match from the same Bolivian league. Soccerway, on the same system, had no match stats in Spain's fifth tier.
Sofascore showed xG for Brazil's Serie A, La Liga and the Champions League final. A small European qualifier, Inter vs Vaduz, had no xG row. Amateur matches entered by users had no statistics, yet they still showed a “Who will win?” vote.
WhoScored has no match xG at all. We checked its season xG table on La Liga only.
FootyStats goes deepest. Its Spanish list runs down to the eighteen regional groups of the Tercera Federación, the fifth tier. Its formula needs only shot counts, shots on target and possession, not a map of every shot. So it can show xG in leagues that other free sites skip. We checked its xG on La Liga only.
Anton got 9.05 on WhoScored and 8.7 on FotMob for the same match.
Player ratings: 9.05 or 8.7
Anton played center-back for Dortmund in the 3-2 win at Hoffenheim. WhoScored rated him 9.05. FotMob rated him 8.7. Both sites use Opta data for this match.
Across his four Bundesliga games so far, 360 minutes, the order flips. WhoScored gives an average of 7.73, FotMob 7.87.
The scales differ too. WhoScored and FotMob rate from 0 to 10. Sofascore uses 3 to 10, according to the 2025 study, so WhoScored vs Sofascore ratings do not line up either.
The study looked at more than 2,100 players over two seasons in top European leagues. On all three sites, shots on target moved a rating the most. WhoScored ratings came out lower on average. Anton's season fits that pattern. His match at Hoffenheim went the other way.
Each site has its own formula and scale, so we compare ratings only inside one site and read them after a match. A rating is not a probability either, so it cannot be turned into a price.
FootyStats gave Barcelona about 16.7 season xG. Four other sites gave between 28.5 and 29.4.
Season xG: FootyStats vs four others
A season of xG is what you need for bets on a team's total goals or on a handicap, where one team gets a goal or more of an advantage before kick-off. Three sites give a full table: Understat, WhoScored and FootyStats. Sofascore and FotMob give rankings. On Flashscore and Soccerway we found no season xG at all.
On Understat every league table shows xG, xGA and xPTS. A settings button adds NPxG (xG without penalties), PPDA (a pressing number) and more. You can split home and away, open 13 seasons from 2014/15 and export the table.
On WhoScored, open a league page, then Team Statistics, then xG. The table has xG, goals, xG difference, shots and xG per shot. It splits for and against, home and away, and can exclude penalties.
On 28 September, WhoScored had Espanyol on 10.07 xG with 9 goals. Rayo had 9.94 xG and 11 goals. Rayo were scoring more than their chances, Espanyol fewer.
WhoScored's season totals do not match Sofascore and FotMob, although WhoScored and FotMob both use Opta. On the same day Real Madrid had 18.26 xG on WhoScored and 18.5 on the other two. Villarreal had 17.09 against 16.56 on Sofascore and 16.6 on FotMob. Atlético had 13.29 against 12.03 on Sofascore. Barcelona was the only near match: 28.54 against 28.53.
The gap goes both ways, so it is not a late update on one site. We could not find the reason.
Sofascore keeps its season xG on the league page, in the “Top teams” block. Pick “Expected goals (xG)” in the list and you get the teams ranked, five per page. There are no goals, xGA or home and away splits next to it, and the team page shows no xG at all.
FotMob does a little more. Its league page has a Team stats tab with three separate xG rankings: xG, xG conceded and xG difference. Each is a list, so you cannot see a team's xG and goals side by side.
FootyStats has the widest table: xG, xGA, xG difference, goals and an “xG vs Actual” column, per match. Its numbers are different. Barcelona had 2.39 xG per match, about 16.7 over seven games. Understat gave 29.40, WhoScored 28.54, Sofascore 28.53 and FotMob 28.5. Barcelona scored 31 goals in those games.
For Espanyol and Rayo the totals came close: about 10.3 and 10.2 on FootyStats, 10.07 and 9.94 on WhoScored. So the gap depends on the team: small for Espanyol and Rayo, about 12 xG for Barcelona. Compare FootyStats teams only with each other.
The gap is bigger for players. On the same FootyStats page, Raphinha, Lamine Yamal and Fermín López have 20.1 xG between them, more than the 16.7 for the whole team.
Paid plans and bookmaker blocks
Most of these sites sell a paid plan, but every stat on this page came from the free part. Stathead, the search tool behind FBref, costs $9 a month for one sport and includes ad-free FBref. WhoScored+ adds a list of value bets, picks where its model thinks the odds are too high, with a 7-day trial. Sofascore Plus removes ads, and Sofascore Pro adds AI win probabilities.
FotMob sells an ad-free version. Flashscore sells one too, but only inside its iPhone app. FootyStats Premium unlocks corners, cards, CSV files (tables you can open in Excel) and more leagues, and removes the four-hour lock. Its “SAVE 35%” badge works out at 26% off. Prices for WhoScored+, Sofascore, FotMob and FootyStats depend on your country.
Sofascore shows odds from 1xBet and Melbet, and a click on a price opens the bookmaker's site. FotMob shows one bookmaker, chosen by your country; from Germany it was NEObet. Flashscore hides odds until you confirm your age, and then our match showed two bookmakers. Soccerway showed odds with no age check, in American format until you switch. WhoScored's “Betting” tab lists bonus offers from Paripesa and Pribet and shows no odds. FBref and Understat have no bookmaker block.
FootyStats has the most odds and no bookmaker ads. Its Odds tab listed prices from eleven bookmakers on one match, and its terms rule out paid links to bookmakers. Watch its Odds Market box, though. For Turkey vs Italy it put 60%, 70% and 10% next to the three result prices. Those are each team's win and draw rates from other games, and they add up to 140%.
To compare prices across many bookmakers, use an odds comparison site.
Goals, cards, H2H: where to look
- Goals and totals in the top five leagues or Russia: Understat for the season, FotMob for the last match.
- Goals in Brazil, MLS, the Championship or the Eredivisie: FotMob, Sofascore or Flashscore, one match at a time.
- Smaller leagues, one match at a time: Flashscore. Check whether the match has a Stats tab.
- Goals and both teams to score in lower leagues: FootyStats, inside its own numbers.
- Cards: FBref for cards per player and the referee, FotMob for the referee's cards per match.
- Corners: FotMob or Sofascore for one match for free. FootyStats season corners need Premium.
- Penalties and goalkeepers: FBref.
- Missing players before a match: Soccerway.
- Head-to-head: FBref for the full record. WhoScored for the H2H tab with its written match forecast. Our head-to-head stats guide shows how to read them.
- Live betting: Sofascore or FotMob, with match xG and a momentum chart that shows which team is attacking.
- Tennis, basketball and other sports: Sofascore or Flashscore.
- Your own spreadsheet or model: the Understat CSV or the FBref export.
A matchday with two tabs
For most pre-match checks we used two tabs. FotMob or Sofascore gave the last few matches, with the same xG on both. Understat or WhoScored gave the season.
We opened FBref for cards, penalties and old head-to-head records, and Flashscore when the league was too small for FotMob.
For lower leagues we opened FootyStats and compared its figures only with each other. Our 20-minute pre-match routine puts these tabs in order, step by step.