CoachBoard
Memberships, renewals and training plans for gyms and coaches — on your phone.
Data-driven sports infographics by Angel Villanueva: tennis, football, the Olympic Games, swimming, basketball, American football, ice hockey, baseball, handball, rugby, volleyball, field hockey, ches
Translation pending
Sports & fitnessHTML · PythonGitHub @angelmza1990OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Interactive sports infographics built with D3.js and open data
Taken from the repository README
Loading the full README.
Read the full README ↗Interactive sports infographics built with D3.js and open data.
Live site: https://angelmza1990.github.io/sports-stats-mvp/
Federer, Nadal and Djokovic by the numbers:
| Grand Slams | Masters 1000 | ATP Finals | Titles | Head to head | |
|---|---|---|---|---|---|
| Novak Djokovic | 24 | 40 | 7 | 102 | 31–29 vs Nadal, 27–23 vs Federer |
| Rafael Nadal | 22 | 36 | 0 | 92 | 24–16 vs Federer |
| Roger Federer | 20 | 28 | 6 | 103 |
Every Open Era men's singles major since Roland Garros 1968:
Every ATP Masters 1000 final since the series began in 1990 (as the Championship Series, the Super 9 and the Masters Series), with the same sections as the Grand Slams page: a race of titles split by surface, the leaders overall, at each of the nine current tournaments and at the former ones (Hamburg, Stockholm, Essen, Stuttgart), runners-up, nations, match records and repeated finals.
Open Era career leaders: a race of career titles, leaders in titles, weeks at No. 1, matches won and played and win percentage (overall and by surface), the kings of each surface, career records, nations and every year-end No. 1.
The season-ending championships, men and women: a grid of every leading player's result at every edition, every champion and host city, the leaders in titles, finals, appearances, match wins and win percentage, records (consecutive titles and appearances, unbeaten champions, champions on debut), the most-played matchups with a player filter, nations and host cities.
Men and women: every week at the top of the ATP and WTA rankings as a timeline by player and by nation, how many players and nations have reached No. 1 over time, the running total of weeks of the leading players and nations, the longest consecutive runs, every No. 1's weeks, spells and best run, and the players and weeks of each nation.
Men and women: the youngest and oldest world No. 1s (every No. 1 drawn from the age they first reached the top to the age they last held it), the youngest and oldest champions at each Grand Slam since 1877, all time or Open Era, the youngest and oldest ATP and WTA Finals champions, and the age at which each player completed the career Grand Slam.
The same three pages for the WTA: every Open Era women's major, every final of the WTA's top tier below the Slams since 1990 (Tier I, Premier Mandatory and Premier 5, and WTA 1000), and the Open Era career leaders in titles, weeks at No. 1 and matches.
| Grand Slams | WTA 1000 (since 1990) | Weeks at No. 1 | |
|---|---|---|---|
| Serena Williams | 23 | 23 | 319 |
| Steffi Graf | 22 | 15 | 377 |
| Martina Navratilova | 18 | 3 | 332 |
Every champion of Europe since the first FIBA European Champions Cup in 1958, from English Wikipedia, and every EuroLeague game since 2000–01 from Euroleague Basketball's own results:
Argentina's top basketball league since 1985, from Spanish Wikipedia:
Sixteen great NBA rivalries (Celtics–Lakers, 76ers–Celtics, Celtics–Knicks, Celtics–Pistons, Celtics–Heat, Bulls–Pistons, Bulls–Knicks, Bulls–Cavaliers, Heat–Knicks, Knicks–Pacers, Lakers–Pistons, Lakers–Spurs, Kings–Lakers, Cavaliers–Warriors, Mavericks–Spurs, Rockets–Spurs), read from the season-by-season results of each rivalry's Wikipedia article and checked against the totals it publishes:
Every NBA championship since 1947:
Every Super Bowl since 1967 and every NFL championship since 1920, in the style of NBA Rings: a franchise bar chart race (Super Bowls or all NFL titles), AFC vs NFC by decade, every champion, titles by franchise for all 32 teams, the most repeated Super Bowls, the most Super Bowls lost, margins of victory with the biggest and closest games, the Super Bowl MVP leaders, host cities and stadiums, and the winning coaches (most titles and most Super Bowls).
Seventeen great NFL rivalries (Bears–Packers, Cowboys–Eagles, Cowboys–Giants, Commanders–Cowboys, Eagles–Giants, Packers–Vikings, Bears–Lions, Lions–Packers, Ravens–Steelers, Browns–Steelers, Chiefs–Raiders, Broncos–Raiders, Broncos–Chiefs, Jets–Patriots, Bills–Dolphins, Falcons–Saints, 49ers–Rams), game by game from the season-by-season results of each rivalry's Wikipedia article, checked against the article's running total: the head to head with ties, the lead season by season, every season's games, every playoff meeting, the biggest wins and the home and away split. The page shares its front end with NBA Rivalries.
Every Stanley Cup Final since 1915, in the style of NBA Rings: a franchise bar chart race, Canada vs the United States by decade, every champion, Cups by franchise for all 32 teams, the most repeated Finals, the most Finals lost, series lengths since the best-of-seven format (1939), the Conn Smythe Trophy leaders and the winning coaches (most Cups and most Finals).
Sixteen great NHL rivalries (the Original Six pairings, Flyers–Penguins, Flyers–Rangers, Islanders–Rangers, Devils–Rangers, the Battle of Alberta, the Battle of Quebec, Avalanche–Red Wings, Capitals–Penguins, Maple Leafs–Senators, Kings–Ducks), every regular-season and playoff game since 1917 from the NHL's own schedule API: the head to head with ties and overtime, the lead season by season, every playoff series, the biggest wins and the home and away split.
Every World Series since 1903: a franchise bar chart race, the American League against the National League by decade, every champion, titles by franchise for all 30 teams, the longest waits between titles (the Cubs' 108 years, the Red Sox's 86 and the droughts still running), the most repeated matchups, the most Series lost, series lengths, the World Series MVPs (since 1955) and the winning managers.
Three pages with the same structure, one per competition (CONCACAF includes the titles awarded without a final and the shared 1978 title, and has no appearances table):
Every men's World Cup from 1930 to 2026: a race of titles, finals or top-four finishes; champions, runners-up and podiums; results by confederation; hosts and how far they went; repeated finals; the most played matches (every round or knockouts only); champions against champions, a head-to-head table of every match between the eight nations that have won it; the Netherlands, three times runners-up, against every champion; teams, matches, goals and attendance per tournament; the all-time points table; team appearances; top scorers, most matches and most tournaments by player, goals in the knockout rounds and in finals, scoring at the most tournaments and every hat-trick; how each defending champion did at the next World Cup; every penalty shoot-out and each team's record; how the record for the most World Cup goals grew, from 1930 to Mbappé; and the top scorer, best player and winning coach of every edition.
Every winner since 1956 with his nationality, the club he played for and the youth academy that formed him: a race by player, nationality, club or academy, and breakdowns by nation, club at the time and academy.
The Intercontinental Cup (1960–2004), the FIFA Club World Cup and the FIFA Intercontinental Cup, combined or one at a time: a world titles race, titles by club, by continent (confederation) and by country, repeated finals and every final.
Every league champion since 1891: a titles race with or without the amateur era, titles by club split by era, the all-time table (total, professional and amateur), the top scorer of every tournament and his club, the all-time scorers, the amateur years when rival associations crowned their own champions (1912–14, 1919–26, 1931–34), every season, a combined table of national titles (leagues and cups, amateur and professional) and every official national cup (25 of them, amateur and professional, from the 1900 Cup Tie Competition to the Supercopa Internacional) with a short description, its leading winners and every final; and the relegations and promotions of every club since 1931 (Boca Juniors the only big club never relegated) and the top-flight seasons of today's clubs, all told and in their current run.
The Argentine page's format for nineteen more countries, one page each with a shared front end: every national champion (England since 1888, the Netherlands since 1888–89, Scotland since 1890–91, France since 1894, Italy since 1898, Uruguay since 1900, Germany since 1903, Paraguay since 1906, Peru since 1912, Spain since 1929, Chile since 1933, Portugal since 1934–35, Brazil since 1937, Turkey since 1956–57, Mexico since 1943–44, Colombia since 1948, Bolivia since 1950, Ecuador since 1957, and every MLS Cup since 1996), a titles race with and without the early era (before Serie A, the Premier League, the Bundesliga, the 1971 Campeonato Brasileiro, the professional leagues of Uruguay, Peru and Bolivia, or the split seasons of Colombia and Paraguay), titles by club, the all-time table where Wikipedia publishes one, the top scorer of every season and the all-time scorers where a list is published.
The same page as the Champions League for Europe's and South America's second club competitions and for the women's Champions League: a titles race, every final, repeated finals, countries and, where Wikipedia publishes them, the all-time table and top scorers. Titles are checked club by club against each finals page's own table.
Every men's international since 1872 (48,000+ matches, from Mart Jürisoo's CC0 database of international results):
Built by scripts/build_national_teams.py.
Every Copa América (since 1916), European Championship, Africa Cup of Nations, Asian Cup and Gold Cup, and every FIFA Women's World Cup, Women's Euro and Copa América Femenina, on the shared international tournament page: a race of titles, finals and podiums, champions and every edition, hosts, the most repeated finals, all-time tables and player records where Wikipedia publishes them. Built by scripts/build_tournaments.py; the Copa América and the Africa Cup of Nations have no single results table, so their editions are rebuilt from each team's titles and top-four finishes and their final scores from the lists of finals.
The twenty national leagues side by side: how evenly each has shared its titles (the effective number of champions, the inverse of the Herfindahl–Hirschman index of the clubs' title shares, and the top two clubs' share), all time and since 1990 and 2010, a heatmap of the top two's share decade by decade, the effective number of champions over each league's last 20 titles, the longest title streaks, each league's most dominant club and its newest first-time champion. Built by scripts/build_balance.py from the league datasets, with no downloads.
83 rivalries between the biggest clubs of seventeen countries, picked by country: Argentina's big five (River, Boca, Independiente, Racing, San Lorenzo) and its derbies of Rosario, Santa Fe, Córdoba (Talleres, Belgrano, Instituto and Racing), Tucumán, Mendoza (Gimnasia, Independiente Rivadavia and Godoy Cruz) and the south of Buenos Aires, Uruguay's Peñarol vs Nacional, Brazil's big four of São Paulo and of Rio, the Grenal and the Clássico Mineiro, England's big six, Juventus, Inter and Milan, Spain's big three (Real Madrid, Barcelona, Atlético), the Seville derby and the Derbi de la Comunitat, Le Classique and Der Klassiker, Mexico's big four (América, Guadalajara, Cruz Azul, Pumas) and the Clásico Regiomontano, MLS's El Tráfico, Cascadia rivalry and Hudson River Derby, Colombia's Clásico Paisa, Clásico Vallecaucano and Nacional vs Millonarios, Chile's big three (Colo-Colo, Universidad de Chile, Universidad Católica), Portugal's big three (Benfica, Porto, Sporting), Paraguay's Superclásico (Olimpia vs Cerro Porteño), Bolivia's Clásico paceño (Bolívar vs The Strongest) and Clásico cruceño (Blooming vs Oriente Petrolero), Ecuador's Clásico del Astillero (Barcelona vs Emelec) and Barcelona vs Liga de Quito, and Peru's Clásico (Universitario vs Alianza Lima) and Alianza vs Sporting Cristal. For each one:
| Rivalry | Country | Matches | Wins | Draws | Wins |
|---|---|---|---|---|---|
| Superclásico: River Plate vs Boca Juniors | Argentina | 266 | 88 | 84 | 94 |
| River vs Independiente: River Plate vs Independiente ¹ | Argentina | 233 | 98 | 69 | 66 |
| River vs Racing: River Plate vs Racing Club | Argentina | 245 | 114 | 63 | 68 |
| River vs San Lorenzo: River Plate vs San Lorenzo | Argentina | 234 | 89 | 81 | 64 |
| Boca vs Independiente: Boca Juniors vs Independiente | Argentina | 226 | 80 | 72 | 74 |
| Boca vs Racing: Boca Juniors vs Racing Club | Argentina | 220 | 95 | 52 | 73 |
| Boca vs San Lorenzo: Boca Juniors vs San Lorenzo | Argentina | 215 | 78 | 53 | 84 |
| Clásico de Avellaneda: Independiente vs Racing Club | Argentina | 240 | 90 | 79 | 71 |
| Independiente vs San Lorenzo: Independiente vs San Lorenzo ¹ | Argentina | 213 | 81 | 62 | 70 |
| Racing vs San Lorenzo: Racing Club vs San Lorenzo | Argentina | 211 | 83 | 55 | 73 |
| Clásico rosarino: Newell's Old Boys vs Rosario Central ⁴ | Argentina (Rosario) |
¹ No source lists every match with its date, so the page shows the head-to-head totals the source publishes, its knockout ties and finals and the latest matches where they are listed. ² The source lists every meeting without its competition, so friendlies are included. ³ No source lists every match, so the list is put together from engsoccerdata (league), RSSSF's cup pages (to 1997) and Barcelona's season articles; it may miss a few matches. ⁴ Official matches include the local league (Rosario, Santa Fe, Córdoba or Tucumán) and its cups, as Spanish Wikipedia counts them. ⁵ No published head-to-head history: only the AFA matches ESPN records, from 2008 on. A partial record, labeled as such on the page and left out of the group's everyone-against-everyone table.
Every rivalry compared: all of them side by side, the most played, the most even and the most one-sided, the most draws and goals, who rules the last 20 matches, and the longest winning and unbeaten runs and biggest wins (worked out by scripts/build_rivalries.py into index.json).
Every Summer Games since 1896 and every Winter Games since 1924, separately or together: a race of gold (or all) medals by nation, the all-time medal table, the nation that topped the table at each Games, the full medal table of every Games, every host and how it did at home (plus the Games already awarded), and the most decorated Olympians, filterable by sport and by men and women.
Every Olympic swimming medal since 1896, men's and women's (and the mixed medley relay): a race of gold medals by nation, the medal table overall and by stroke, the most decorated swimmers (Phelps 23-3-2, Ledecky 9-4-1) and, for every event, current or discontinued, the full podium at each Games with times and who has won it most.
One page per sport, each with a selector for every competition and gender: Rugby World Cup (men and women), Basketball World Cup & Olympics, Volleyball World Championship & Olympics and Field Hockey World Cup & Olympics and Handball World Championship & Olympics (men and women). Each shows a race of titles, finals or podiums, champions and podium finishes, results by continent, hosts, repeated finals, teams per edition and, where the sources record them, the all-time table, appearances and player records.
Every World Championship since 1886 (including the 1993–2006 split title), the reigns of the world champions, the rivalries for the title, the world number ones month by month in classical, rapid and blitz (open and women's), head-to-head records of 40 of the greatest players split by time control, the rapid, blitz and women's world champions, records (ratings, youngest grandmasters, longest reigns) and nations, plus the Candidates Tournament and World Cup winners.
Twenty great chess rivalries, from Steinitz–Chigorin and Capablanca–Alekhine to Karpov–Kasparov, Carlsen–Nakamura and Ding–Gukesh: every game between them in PGN Mentor's game files (classical, rapid and blitz, filterable), the lead game by game, year by year, each player's results with white and black, the events where they met most and their World Championship matches.
Every World Champion since 1950: bar chart races of drivers', constructors' and nations' titles, every champion, titles by nationality and by constructor, and the all-time Grand Prix winners by driver, constructor and nationality.
Also: how every title was won (the champion's margin as a share of his points, which titles went to the last race, the closest and most dominant), driver and constructor records (wins, poles, podiums, fastest laps, points, laps led, streaks, youngest and oldest winners, grand slams, one-two finishes...) read from Wikipedia's rendered records pages so active drivers' numbers are current, and the circuits and countries that have hosted the most Grands Prix.
Argentina's touring-car championship since 1979, counting the Súper TC2000 years (2012–2021) as the category does: a bar chart race of titles by driver, make and team, the champion's make season by season, every champion with the car, team and wins that year, titles by driver, make, team and province, the all-time race winners and pole sitters with their first and last, the current season's wins and poles, and the Súper TC2000 teams' champions.
Every premier-class world champion since 1949 (500cc, then MotoGP from 2002): a race of titles by rider, nation or constructor, the most successful, the most dominant seasons (the share of Grands Prix the champion won) and every champion.
Every winner since 1979 in cars, bikes, trucks and quads: a race of wins by driver or rider, nation or make, in one category or all, the most successful, the winners in more than one category (Peterhansel, six on a bike and eight in a car), every Argentine win and every winner with the vehicle.
Every general classification winner of the Tour de France, the Giro d'Italia and the Vuelta a España: a race of wins by rider or nation, the most successful in all three or in one, the doubles in one season, the riders who won all three, the closest finishes and every winner with the margin.
Every champion of the four men's majors (The Open since 1860, the U.S. Open, the PGA Championship and the Masters): a race of majors by golfer or nation, the most successful, the career Grand Slam, the most majors in one year and every champion.
The world record progression of the 100 m, the mile, the marathon, the long jump, the high jump and the pole vault, for men and women where the data exists: a step chart of every record, every record holder with how long the mark stood, the oldest records standing today and the athletes who set the most. Built by scripts/build_records.py from Wikipedia's progression tables.
The four winners pages share one front end (assets/champions.js) and one builder (scripts/build_champions.py), which reads each sport's Wikipedia lists and checks every winner's count against the totals the same pages publish.
├── index.html # Portfolio landing page
├── assets/ # Shared theme (light/dark) and styles
├── tennis/big-three/ # The Big Three infographic
│ ├── index.html
│ ├── app.js # All charts (D3 v7)
│ ├── style.css
│ └── data/big-three.json # Generated dataset
├── tennis/series.js # Shared app for Grand Slams, Masters 1000 and WTA 1000
├── tennis/records.js # Shared app for ATP and WTA Records
├── tennis/grand-slams/ # Grand Slams (men); also grand-slams-women/
├── tennis/masters-1000/ # ATP Masters 1000; also wta-1000/
├── tennis/atp-records/ # ATP Records; also wta-records/
├── tennis/finals/ # ATP and WTA Finals
├── tennis/number-one/ # World No. 1, men and women
├── tennis/age-records/ # Age records, men and women
├── basketball/nba-rings/ # NBA Rings infographic
├── basketball/nba-rivalries/ # NBA Rivalries
├── basketball/lnb/ # Liga Nacional de Básquet (Argentina)
├── basketball/euroleague/ # EuroLeague
├── football/ # Football pages (shared common.js, league.js for national leagues) + one folder per page
├── american-football/super-bowl/ # Super Bowl and NFL championships
├── american-football/nfl-rivalries/ # NFL Rivalries (front end shared with NBA and NHL: assets/league-rivalries.js)
├── ice-hockey/stanley-cup/ # Stanley Cup Finals
├── ice-hockey/nhl-rivalries/ # NHL Rivalries
├── baseball/world-series/ # World Series
├── chess/ # Chess page; chess/rivalries/ for the great rivalries
├── motorsport/formula-1/ # Formula 1 page
├── motorsport/tc2000/ # TC2000 page
├── international/tournament.js # Shared page for team tournaments
├── rugby|basketball|volleyball|hockey|handball/international/ # One page per sport (data/ per competition)
├── olympics/ # Olympic Games page (Summer and Winter)
├── olympics/events.js # Shared app for Olympic sports listed event by event (swimming, tennis, boxing)
├── swimming|tennis|boxing/olympics/ # Olympic swimming, tennis and boxing pages
├── football/olympics/ # Olympic football (team tournament page)
├── scripts/
│ ├── tennis_data.py # Shared ATP + Wikipedia draw helpers
│ ├── build_big_three.py # Big Three data pipeline
│ ├── build_grand_slams.py # Grand Slams data pipeline (men and women)
│ ├── build_masters.py # ATP Masters 1000 and WTA 1000 pipeline
│ ├── build_nba_rings.py # NBA data pipeline
│ ├── build_nba_rivalries.py # NBA rivalries, season by season
│ ├── build_lnb.py # Liga Nacional de Básquet
│ ├── build_euroleague.py # EuroLeague: finals, all-time table, coaches, players, rivalries
│ ├── build_super_bowl.py # Super Bowls, NFL titles, MVPs and coaches
│ ├── build_nfl_rivalries.py # NFL rivalries, game by game (shared helpers in rivalries_us.py)
│ ├── build_nhl_rivalries.py # NHL rivalries from the NHL's schedule API
│ ├── build_stanley_cup.py # Stanley Cup Finals, Conn Smythe winners and coaches
│ ├── build_world_series.py # World Series, MVPs and managers
│ ├── build_football.py # Football club competitions pipeline
│ ├── build_leagues.py # the national leagues of Europe and the Americas (16 of them)
│ ├── build_football_people.py # Coaches and players with the most titles (cups and leagues)
│ ├── build_team_coaches.py # Winning coaches: World Cup, club world champions, NBA and team tournaments
│ ├── build_world_cup.py # FIFA World Cup pipeline
│ ├── build_rivalries.py # Great rivalries (54), with one source module per country (rivalries_*.py)
│ ├── build_f1.py # Formula 1 pipeline
│ ├── build_tc2000.py # TC2000 pipeline (Spanish Wikipedia + the category's statistics)
│ ├── build_champions.py # Grand Tours, golf majors, MotoGP and Dakar winners (Wikipedia)
│ ├── build_atp_records.py # ATP and WTA career records pipeline
│ ├── build_tour_finals.py # ATP and WTA Finals: editions, matches, hosts
│ ├── build_number_ones.py # Every spell at world No. 1 (ATP and WTA)
│ ├── build_tennis_ages.py # Tennis age records (No. 1s, Slams, Finals, career Grand Slam)
│ ├── build_tournaments.py # Rugby, basketball, volleyball, hockey and handball tournaments
│ ├── build_swimming.py # Olympic swimming medalists
│ ├── build_olympics.py # Olympic Games medal tables, hosts and athletes
│ ├── olympic_events.py # Shared parsing of Olympic medalists, event by event
│ ├── build_olympic_sports.py # Olympic tennis and boxing
│ ├── build_chess.py # Chess: world titles, number ones, records and head-to-head
│ ├── build_chess_rivalries.py # Chess rivalries, game by game
│ ├── fetch_flags.py # Local copies of every flag in use
│ ├── check_pages.mjs # Headless check of every page
│ └── wikitables.py # Generic Wikipedia table parser
├── data/
│ ├── manual/ # Hand-curated tennis results and nationality fixes
│ ├── nba/franchises.json # Every NBA franchise and its historical names
│ └── football/clubs.json # Football clubs, their Wikipedia aliases and crest ids
└── .github/workflows/ # Automatic data updates
The site is plain HTML, CSS and JavaScript with no build step, served by GitHub Pages. Every page shares the navigation, the sport colors and the type (Barlow Condensed for headlines, self-hosted under the SIL Open Font License) from assets/.
A GitHub Actions workflow rebuilds every dataset twice a year, on July 1 (after the NBA Finals) and December 31 (after the ATP Finals), commits any changes and republishes the site. It can also be run by hand from the Actions tab. If a dataset fails validation, the previous version is kept and the run is marked as failed.
assets/vendor/ and every flag from assets/flags/ (scripts/fetch_flags.py fetches any new one after each update). Only the football crests still load from ESPN's CDN, and a club shows its initials if one fails.data/raw/ keeps the last downloaded copy of every Wikipedia page and match file. If a download fails, or a page is deleted, the builds use the saved copy instead, so the data can always be rebuilt.python3 scripts/build_big_three.py --refresh # tennis: re-downloads the raw match files
python3 scripts/build_grand_slams.py --refresh # tennis: Open Era Grand Slams, men and women
python3 scripts/build_masters.py --refresh # tennis: ATP Masters 1000 and WTA 1000
python3 scripts/build_nba_rings.py --refresh # NBA: re-downloads the Wikipedia table
python3 scripts/build_nba_rivalries.py --refresh # NBA: the 16 rivalries' season-by-season results
python3 scripts/build_lnb.py --refresh # Argentina's Liga Nacional de Básquet
python3 scripts/build_euroleague.py --refresh # EuroLeague (Wikipedia and Euroleague Basketball's results)
python3 scripts/build_super_bowl.py --refresh # NFL: Super Bowls, NFL champions since 1920, MVPs and coaches
python3 scripts/build_stanley_cup.py --refresh # NHL: Stanley Cup Finals since 1915, Conn Smythe and coaches
python3 scripts/build_nfl_rivalries.py --refresh # NFL: 17 rivalries, game by game
python3 scripts/build_nhl_rivalries.py --refresh # NHL: 16 rivalries; re-reads only the last two seasons
python3 scripts/build_world_series.py --refresh # MLB: World Series since 1903, MVPs and managers
python3 scripts/build_football.py --refresh # football: club competitions (Champions League, Libertadores, CONCACAF) and Argentine league
python3 scripts/build_leagues.py --refresh # football: the 19 national leagues (Serie A ... Portugal, the Netherlands, Scotland, Turkey, Uruguay, Paraguay, Ecuador, Peru, Bolivia)
python3 scripts/build_football_people.py --refresh # football: coaches and players (after the two above)
python3 scripts/build_team_coaches.py # winning coaches of the team sports (only new editions are looked up)
python3 scripts/build_world_cup.py --refresh # football: FIFA World Cup
python3 scripts/build_rivalries.py --refresh # football: the 83 great rivalries, match by match
python3 scripts/build_f1.py --refresh # motorsport: Formula 1
python3 scripts/build_tc2000.py --refresh # motorsport: TC2000
python3 scripts/build_champions.py --refresh # Grand Tours, golf majors, MotoGP and the Dakar
python3 scripts/build_records.py --refresh # athletics world record progressions
python3 scripts/build_atp_records.py --refresh # tennis: ATP and WTA career records (after build_masters.py)
python3 scripts/build_tennis_ages.py --refresh # tennis: age records (after build_grand_slams.py)
python3 scripts/build_number_ones.py --refresh # tennis: every spell at world No. 1
python3 scripts/build_tour_finals.py --refresh # tennis: ATP and WTA Finals (after build_big_three.py downloads the match files)
python3 scripts/build_tournaments.py --refresh # rugby, basketball, volleyball, hockey, handball
python3 scripts/build_swimming.py --refresh # swimming: Olympic medalists
python3 scripts/build_olympics.py --refresh # Olympic Games (Summer and Winter)
python3 scripts/build_olympic_sports.py --refresh # Olympic tennis and boxing (after build_olympics.py)
python3 scripts/build_chess.py --refresh # chess: also re-downloads the PGN Mentor player files
python3 scripts/build_chess_rivalries.py # chess rivalries (after build_chess.py)
python3 scripts/fetch_flags.py # download any flag a dataset now needs
Leave out --refresh to rebuild from the saved copies in data/raw/, with no network access.
To check every page locally: npm install --no-save [email protected] && CHROME=/path/to/chrome node scripts/check_pages.mjs.
Tennis. The script downloads ATP match results, extracts every title and every Big Three head-to-head match, and checks the result against the official totals (Grand Slams, Masters 1000, ATP Finals, titles and head-to-head records). The build fails if any number is off.
Rules applied:
Grand Slams. The script reads every Grand Slam match since Roland Garros 1968 from the same ATP files. Any major the files don't cover yet is rebuilt match by match from its Wikipedia draw page (all 127 matches must parse, or the build fails). Nationality is the one represented at the time: a small override file corrects players the ATP lists under today's country (Lendl and Kodeš for Czechoslovakia, for example). The build checks title totals for the all-time leaders and the number of editions of each major.
Women's Grand Slams use the same pipeline with the WTA match files and the women's draw pages. A separate override file restores the nationality of the time where the WTA lists today's (Navratilova and Mandlíková for Czechoslovakia, Seles for Yugoslavia); for every player, Czech, Slovak, former Soviet and former Yugoslav codes before those countries existed become Czechoslovakia, the Soviet Union and Yugoslavia.
Masters 1000 and WTA 1000. Wikipedia's yearly results tables (one page per season since 1990) decide which finals count, which matters for the WTA, whose level codes in the match files don't mark its top tier consistently. Each final is matched to its tournament in the ATP or WTA match files by its two finalists, and every match of that tournament feeds the match records; events the files don't cover yet are rebuilt from their Wikipedia draw pages (a draw must have one match fewer than it has players). The builds check the title counts of the all-time leaders and the number of finals in each season; the ATP titles by country match Wikipedia's own table.
WTA records are counted like the ATP's, from tour-level finals in the WTA match files. The match data is incomplete for the 1970s and 80s, so the builds check recent careers exactly (Serena Williams's 73 titles) and early ones within a tolerance (Evert, Navratilova).
NBA. The script reads Wikipedia's List of NBA champions table, maps every historical team name to its current franchise (the Minneapolis Lakers count for the Lakers, the Seattle SuperSonics for the Thunder) and checks that every season is present and that all titles through 2026 match the known totals. A new team name makes the build fail until it is added to data/nba/franchises.json.
Football. For the Libertadores and Champions League, the script reads each competition's list of finals, all-time club table, all-time top scorers and most-appearance table from Wikipedia, and maps clubs to crests through data/football/clubs.json (a club missing from that file still appears, with a lettered badge). It checks that there is one final per season and that every club's title count matches the known history. The world champions page combines the three competitions from Wikipedia's list of world champion clubs (checked against known title counts and the number of finals per competition). The Argentine national cups come from Spanish Wikipedia's list of national cups, checked club by club against its amateur and overall totals tables; their descriptions are kept in data/football/argentine_cups.json. The Argentine page reads the list of Primera División champions and must match, club by club, the title totals on the same page; amateur and professional titles and the rival associations come from the season labels (FAF, AAmF, LAF). Its all-time tables come from Spanish Wikipedia (based on RSSSF) and are shown as published.
Coaches and players. The Champions League, Copa Libertadores, Argentina, England, Italy, Spain, France and Brazil pages show the coaches with the most titles (and, for the two cups, the most finals) and every champion's coach, plus the players with the most titles where Wikipedia keeps a list (not for Spain or France; England's covers the Premier League era, Italy's the single-group Serie A and Argentina's the professional era). Coaches come from the lists of winning managers, the Libertadores finals table on Spanish Wikipedia (both coaches of every final) and, for the Champions League runners-up, each final's line-ups (saved in data/raw/football/final_managers.json). Every coach's title is matched to the champion of that season on the page's own dataset by year and club, so the counts line up with the page; the build fails if fewer than 95% of the titles get a coach, and checks known records (Ancelotti's 5 Champions League titles in 6 finals, Bianchi's 4 Libertadores, Ferguson's 13 English titles, Giggs's 13 Premier League medals, Buffon's 10 scudetti, Pelé's 6 Brazilian titles and others).
Super Bowl. Every Super Bowl comes from Wikipedia's list of Super Bowl champions (the winner's conference from the table's AFC/NFC shading), the NFL titles of 1920–1969 from the list of NFL champions, the MVPs from the Super Bowl MVP list and both head coaches of every game from the list of Super Bowl head coaches. Every historical team name maps to today's franchise through data/nfl/franchises.json. League titles follow the NFL's count: the NFL championship through the 1969 season, then the Super Bowl (AFL titles aren't included). The build checks every franchise's Super Bowl wins through Super Bowl LX, one league champion per season since 1920, the Packers' 13, Bears' 9 and Giants' 8 titles, Tom Brady's 5 MVPs and Bill Belichick's 6 wins in 9 Super Bowls.
Stanley Cup. Every Final since 1915 comes from Wikipedia's list of Stanley Cup champions (both coaches of every Final are in the same tables) and the Conn Smythe winners from the trophy's page; team names map to today's franchise through data/nhl/franchises.json, with the original Ottawa Senators (to 1934) kept apart from today's club. The champion's country is where it was based that year. The build checks every franchise's Cups against the same page's appearances tables, the Canadiens' 24, that only 1919 and 2005 have no champion, Patrick Roy's 3 Conn Smythes and Scotty Bowman's 9 Cups as coach.
World Series. Every Series since 1903 comes from Wikipedia's list of World Series champions (the league of each team from the table's AL/NL shading, both managers from the same table) and the MVPs from the award's page, including the shared awards of 1981 and 2001. Team names map to today's franchise through data/mlb/franchises.json. The build checks every franchise's wins and losses against the same page's appearances table, the Yankees' 27 titles, that only 1904 and 1994 have no Series, that every Series pits an AL team against an NL team, Bobby Richardson's 1960 MVP for the losing team and John McGraw's 3 wins and 6 losses as a manager.
Winning coaches (team sports). The World Cup, World Club Champions, NBA and every international team tournament page (rugby, basketball, volleyball, field hockey, handball, Olympic football) list the coaches with the most titles and every champion's coach. Lists of winning coaches are used where Wikipedia keeps one (World Cup, Intercontinental Cup, Club World Cup, FIBA World Cup, Rugby World Cup, NBA). Otherwise each edition is followed from the competition's editions table to its squads or rosters page, where the champion's section names its head coach (FIBA roster footers, coach tables, transcluded roster templates and team articles are read too); when no such page exists, the coach in office that year comes from the champion's national team article (or its German, French, Spanish or Italian version, with names mapped back to English Wikipedia). A year with a change of coach is left blank rather than guessed, and the page says how many titles have a known coach. Found coaches are saved in data/raw/football/team_coaches.json, so later runs only look up the editions still missing. Checks: Pozzo's 2 World Cups, Bianchi's 3 world club titles, Phil Jackson's 11 NBA titles, Krzyzewski's 2 World Cups and 3 Olympic golds, Jacobsen's 4 handball world titles, Bernardinho's 2 Olympic golds and others; a dataset with a coach for fewer than 40% of its titles isn't written.
National leagues. One config per league (in build_leagues.py) names the Wikipedia list of champions, the top scorer pages and, where one exists, the all-time table (from Italian, Spanish or English Wikipedia). Every club's title count must match the totals table on the same page; the only documented exception is Rouen's 1944–45 wartime title, which the French totals table counts and the season list doesn't. Renamed clubs keep their titles through the aliases in clubs.json (Ambrosiana-Inter for Inter, Atlético Aviación for Atlético Madrid, SpVgg Fürth for Greuther Fürth), and a club's label only matches a club of the same country, so Chile's Everton or Arsenal de Sarandí never borrow an English crest. Liga MX's titles are checked against the titles table in the Liga MX article; Colombia, Chile, Bolivia, Ecuador and Peru read the top scorer of every championship from the "Leading goalscorer(s)" column of the champions table itself, and Portugal from the champions table's own top-scorer columns. A league can count one club's titles for another (sameClub): Uruguay's CURCC titles go to Peñarol, as the AUF counts them, and Peru's Mariscal Sucre is one club under three article names. Scotland's first title, shared by Dumbarton and Rangers in 1890–91, counts for both; the Netherlands' 1956 and 1958 champions (Rapid JC, DOS) are linked to today's Roda JC and FC Utrecht in the list but counted under their names of the time; Turkey's list starts with the two Federation Cups (1956–1958) that the TFF counts as league titles. Paraguay and Bolivia publish no all-time scorers list, so their pages show who led the scoring most often instead.
World Cup. The script combines six Wikipedia pages (editions, finals, records and statistics, top goalscorers, team and player appearances) and checks that every edition since 1930 is present, that title counts match history and that each edition has its final, podium, hosts and tournament totals. Every match comes from the Fjelstul World Cup Database through 2022 and, for later tournaments, from the football boxes of each tournament's Wikipedia group and knockout pages; the number of matches per tournament must match the records page.
Ballon d'Or. Winners, nationality and club come from Wikipedia's Ballon d'Or article; the youth academy is read from each winner's own article (the last youth club in the infobox, with youth sides such as "Sporting CP (youth)" credited to the parent club). The build checks the number of awards of the multiple winners and that every year is present.
Formula 1. Drivers' and constructors' champions and the all-time race wins come from Wikipedia's F1 lists. The build checks one champion per season, the title counts of the record holders and the constructors' title totals.
TC2000. Champions with their car and team, the makes' titles and the Súper TC2000 teams' champions come from Spanish Wikipedia's "Turismo Competición 2000" and "Súper TC2000" articles; the race wins and poles of every driver, and each champion's wins that season, come from the historic statistics on tc2000.com.ar, and the current season's from its yearly statistics page. Team sponsor names are grouped into the outfit behind them (Berta, Pro Racing, Ambrogio Racing, Toyota Gazoo Racing Argentina). The build checks one champion per season since 1979, that Wikipedia and the category name the same champion every year, the title counts of the record holders, Traverso's 68 wins and that every champion since 1980 appears among the race winners.
ATP & WTA Finals. Every Finals match comes from the ATP and WTA match files, found by the tournament's name in each era (the Masters until 1989, then the Tour Finals, Masters Cup and the WTA's sponsor and host-city names), with walkovers left out of win-loss records. Wikipedia's list of finals gives every champion, checked against the match files edition by edition, plus the runners-up of the 1972–1974 women's editions the match files don't cover; host cities come from the venues tables. The build checks the title counts of the leaders, Federer's 59–17 record and 17 appearances, one champion per edition and a host for every year.
World No. 1. Every spell at No. 1 comes from the table on Wikipedia's lists of ATP and WTA No. 1s, with the flag the player carried at the time. The build checks each player's weeks against the same page's totals table, the number of players who have been No. 1, the longest runs (Federer's 237 weeks, Graf's 186) and that the spells follow one another with no gaps. The 2020 ranking freeze is kept as its own spell and counts for nobody.
Tennis age records. Champions come from Wikipedia's lists of Grand Slam singles champions and the ATP and WTA Finals pages; each tournament's last day is read from its own Wikipedia page and dates of birth from Wikidata. Both are kept in data/raw/tennis/ and only new ones are looked up. Ages at No. 1 come from the first and last dates in Wikipedia's No. 1 lists, which give birth dates too. The build checks each Slam's Open Era champions against the Grand Slams pages, the known record holders (Alcaraz and Hingis the youngest No. 1s, Djokovic and Serena Williams the oldest, Chang and Lottie Dod the youngest major champions, Gore the oldest) and the players with a career Grand Slam.
ATP records. Titles and match records are counted from the ATP match files (plus the Wikipedia-sourced Slams and the manual supplement); weeks at No. 1 and year-end No. 1s come from Wikipedia. The build checks Federer's 103 titles and 1,251–275 record, Nadal's 92 titles and the weeks at No. 1 of the leaders.
Olympic Games. The medal table of every Games comes from the {{Medals table}} template on its Wikipedia page; the all-time table, the host cities and the athletes with the most medals and golds come from their own lists. Nation names and flags come from Wikipedia's comparison of IOC, FIFA and ISO codes. The build checks the leading nations at recent Games (the United States' 40-44-42 in Paris), the number of Games and the career medals of Phelps, Latynina, Bjørgen and Nurmi. The all-time table leaves out the 1912–1948 art competitions that the per-Games tables include, so the build reports, without failing, the few nations whose totals differ.
Olympic tennis and boxing share the swimming parser (olympic_events.py): boxing reads Wikipedia's list of medalists, one table per weight class; tennis reads the events table on each Games' tennis page, keeping doubles pairs together (a pair from two nations counts as a mixed team). The builds check the career medals of the leading players and boxers, the number of tennis events at each Games, that every boxing class since 1952 has two bronzes and the boxing gold counts of the United States and Cuba. Olympic football goes through the team tournament pipeline, which now reads age-group flags ({{fbu|23|BRA}}) and older FIFA codes (CSK, DDR).
Chess. World Championships, women's, rapid and blitz titles, the number ones, peak ratings, the Olympiad, the Candidates, the World Cup and the youngest grandmasters come from Wikipedia. Head-to-head records count the games in PGN Mentor's files for 40 players (kept in data/raw/chess/pgn). PGN files don't record the time control, so each game is classed as rapid or blitz by its event name, its time control when the name gives one, its place in a knockout round (tiebreaks) and online sites (rapid unless marked blitz); Chess960, blindfold, simultaneous, advanced and computer games are left out. The build checks the rapid and blitz title counts against the records tables, months at number one against Wikipedia's totals (Kasparov's 1994 months, when FIDE left him off its lists, are the one documented gap), the title counts of the leading champions and the Karpov–Kasparov classical record.
Olympic swimming. Wikipedia's lists of Olympic medalists in swimming have one table per event; the script reads every medalist, nation and time, splits ties (two swimmers sharing a medal) and keeps every named relay swimmer. The build checks the number of pool events at each Games since 1968 (35 in 2020 and 2024) and the career medals of the most decorated swimmers. The pages' own medal tables, kept by hand, don't always match their event lists, so they are only compared as a warning.
Team tournaments. One config per competition (in build_tournaments.py) names the Wikipedia page and table for its editions and, where they exist, its participation table, all-time table and player records. The parser reads flag templates of every sport, so champion, runner-up, third and fourth come out as country codes; each build checks the title counts of the most successful nations.
python3 -m http.server 8000
# open http://localhost:8000
data/manual/, each with a source link, or rebuilt from Wikipedia draw pages (CC BY-SA 4.0).Code is released under the MIT License. Data keeps its original license (CC BY-NC-SA 4.0 for the ATP match data, CC BY-SA 4.0 for Wikipedia).
| 279 |
| 77 |
| 103 |
| 99 |
| Clásico del Sur: Lanús vs Banfield | Argentina (South of Buenos Aires) | 133 | 41 | 40 | 52 |
| Clásico santafesino: Colón vs Unión ⁴ | Argentina (Santa Fe) | 158 | 48 | 53 | 57 |
| Clásico cordobés: Talleres vs Belgrano ⁴ | Argentina (Córdoba) | 260 | 93 | 88 | 79 |
| Belgrano vs Instituto ¹ | Argentina (Córdoba) | 202 | 87 | 54 | 61 |
| Instituto vs Racing de Córdoba ¹ | Argentina (Córdoba) | 148 | 58 | 39 | 51 |
| Talleres vs Instituto ⁵ | Argentina (Córdoba) | 13 | 2 | 6 | 5 |
| Clásico tucumano: Atlético Tucumán vs San Martín ⁴ | Argentina (Tucumán) | 281 | 98 | 90 | 93 |
| Clásico mendocino: Gimnasia y Esgrima vs Independiente Rivadavia ¹ | Argentina (Mendoza) | 268 | 90 | 88 | 90 |
| Godoy Cruz vs Independiente Rivadavia ⁵ | Argentina (Mendoza) | 4 | 1 | 3 | 0 |
| Uruguayan Clásico: Peñarol vs Nacional | Uruguay | 433 | 153 | 143 | 137 |
| Derby Paulista: Palmeiras vs Corinthians | Brazil (São Paulo) | 332 | 118 | 101 | 113 |
| Choque-Rei: Palmeiras vs São Paulo | Brazil (São Paulo) | 313 | 109 | 97 | 107 |
| Majestoso: Corinthians vs São Paulo ¹ | Brazil (São Paulo) | 367 | 135 | 117 | 115 |
| San-São: Santos vs São Paulo | Brazil (São Paulo) | 289 | 95 | 72 | 122 |
| Clássico Alvinegro: Corinthians vs Santos | Brazil (São Paulo) | 316 | 123 | 92 | 101 |
| Clássico da Saudade: Palmeiras vs Santos ¹ | Brazil (São Paulo) | 320 | 140 | 83 | 97 |
| Fla-Flu: Flamengo vs Fluminense | Brazil (Rio de Janeiro) | 415 | 151 | 132 | 132 |
| Clássico dos Milhões: Flamengo vs Vasco da Gama ¹ | Brazil (Rio de Janeiro) | 431 | 168 | 124 | 139 |
| Clássico Vovô: Botafogo vs Fluminense | Brazil (Rio de Janeiro) | 359 | 120 | 108 | 131 |
| Clássico da Rivalidade: Botafogo vs Flamengo ¹ | Brazil (Rio de Janeiro) | 370 | 115 | 118 | 137 |
| Clássico dos Gigantes: Fluminense vs Vasco da Gama | Brazil (Rio de Janeiro) | 368 | 115 | 112 | 141 |
| Clássico da Amizade: Botafogo vs Vasco da Gama ¹ | Brazil (Rio de Janeiro) | 311 | 86 | 94 | 131 |
| Grenal: Internacional vs Grêmio ¹ | Brazil (Rio Grande do Sul) | 379 | 133 | 122 | 124 |
| Clássico Mineiro: Cruzeiro vs Atlético Mineiro ² | Brazil (Minas Gerais) | 518 | 175 | 139 | 204 |
| North-West derby: Liverpool vs Manchester United | England | 218 | 72 | 61 | 85 |
| North London derby: Arsenal vs Tottenham Hotspur | England | 199 | 86 | 52 | 61 |
| Manchester derby: Manchester City vs Manchester United | England | 198 | 63 | 55 | 80 |
| Arsenal vs Chelsea: Arsenal vs Chelsea | England | 216 | 88 | 62 | 66 |
| Arsenal vs Liverpool: Arsenal vs Liverpool | England | 246 | 81 | 70 | 95 |
| Arsenal vs Manchester City: Arsenal vs Manchester City | England | 217 | 101 | 49 | 67 |
| Arsenal vs Manchester United: Arsenal vs Manchester United | England | 245 | 90 | 55 | 100 |
| Chelsea vs Liverpool: Chelsea vs Liverpool | England | 200 | 67 | 50 | 83 |
| Chelsea vs Manchester City: Chelsea vs Manchester City | England | 181 | 69 | 43 | 69 |
| Chelsea vs Manchester United: Chelsea vs Manchester United | England | 199 | 56 | 61 | 82 |
| Chelsea vs Tottenham: Chelsea vs Tottenham Hotspur | England | 182 | 83 | 43 | 56 |
| Liverpool vs Manchester City: Liverpool vs Manchester City | England | 200 | 93 | 53 | 54 |
| Liverpool vs Tottenham: Liverpool vs Tottenham Hotspur | England | 186 | 91 | 46 | 49 |
| Manchester City vs Tottenham: Manchester City vs Tottenham Hotspur | England | 176 | 69 | 38 | 69 |
| Manchester United vs Tottenham: Manchester United vs Tottenham Hotspur | England | 206 | 95 | 54 | 57 |
| El Clásico: Real Madrid vs Barcelona | Spain | 265 | 107 | 52 | 106 |
| Madrid derby: Real Madrid vs Atlético Madrid | Spain | 244 | 119 | 63 | 62 |
| Barcelona vs Atlético: Barcelona vs Atlético Madrid ³ | Spain | 247 | 114 | 56 | 77 |
| Seville derby: Sevilla vs Real Betis | Spain (Andalusia) | 145 | 66 | 37 | 42 |
| Derbi de la Comunitat: Valencia vs Villarreal | Spain (Valencian Community) | 64 | 25 | 14 | 25 |
| Derby della Madonnina: Inter vs Milan | Italy | 246 | 91 | 71 | 84 |
| Derby d'Italia: Juventus vs Inter | Italy | 254 | 114 | 63 | 77 |
| Juventus vs Milan: Juventus vs Milan | Italy | 247 | 94 | 82 | 71 |
| Le Classique: Paris Saint-Germain vs Marseille | France | 113 | 54 | 24 | 35 |
| Der Klassiker: Bayern Munich vs Borussia Dortmund | Germany | 140 | 70 | 37 | 33 |
| Súper Clásico: América vs Guadalajara | Mexico | 223 | 82 | 71 | 70 |
| Clásico Joven: América vs Cruz Azul | Mexico | 181 | 66 | 63 | 52 |
| Clásico Capitalino: América vs Pumas UNAM | Mexico | 145 | 53 | 57 | 35 |
| Clásico Regiomontano: Monterrey vs Tigres UANL | Mexico | 129 | 41 | 41 | 47 |
| El Tráfico: LA Galaxy vs LAFC | United States | 28 | 10 | 8 | 10 |
| Cascadia rivalry: Seattle Sounders vs Portland Timbers | United States | 126 | 56 | 22 | 48 |
| Hudson River Derby: New York Red Bulls vs New York City FC | United States | 32 | 16 | 4 | 12 |
| Clásico Paisa: Atlético Nacional vs Independiente Medellín | Colombia | 344 | 137 | 110 | 97 |
| Clásico Vallecaucano: América de Cali vs Deportivo Cali | Colombia | 346 | 108 | 111 | 127 |
| Nacional vs Millonarios: Atlético Nacional vs Millonarios | Colombia | 303 | 86 | 102 | 115 |
| Superclásico: Colo-Colo vs Universidad de Chile | Chile | 249 | 112 | 71 | 66 |
| Colo-Colo vs Católica¹: Colo-Colo vs Universidad Católica | Chile | 188 | 82 | 51 | 55 |
| Clásico Universitario¹: Universidad de Chile vs Universidad Católica | Chile | 203 | 77 | 63 | 63 |
| O Clássico¹: Benfica vs Porto | Portugal | 261 | 93 | 64 | 104 |
| Lisbon derby¹: Benfica vs Sporting CP | Portugal | 327 | 140 | 71 | 116 |
| Porto vs Sporting¹: Porto vs Sporting CP | Portugal | 257 | 94 | 76 | 87 |
| Superclásico¹: Olimpia vs Cerro Porteño | Paraguay | 375 | 134 | 117 | 124 |
| Clásico paceño: Bolívar vs The Strongest | Bolivia (La Paz) | 304 | 126 | 101 | 77 |
| Clásico cruceño: Blooming vs Oriente Petrolero | Bolivia (Santa Cruz) | 219 | 70 | 63 | 86 |
| Clásico del Astillero¹: Barcelona SC vs Emelec | Ecuador | 303 | 108 | 103 | 92 |
| Barcelona vs Liga¹: Barcelona SC vs LDU Quito | Ecuador | 241 | 89 | 65 | 87 |
| Clásico del fútbol peruano: Universitario vs Alianza Lima | Peru | 302 | 107 | 84 | 111 |
| Alianza vs Cristal¹: Alianza Lima vs Sporting Cristal | Peru | 231 | 78 | 81 | 72 |