Studies · Football

Which leagues feed the NFL?

Cross-league career trajectories of pro football players

Last computed 2026-05-20. 16 historical snapshots.

4.0%
Best alt league → NFL rate
XFL (30 of 750 players)
1.3%
Overall alt league → NFL rate
140 of 11,194 league-player records move alt→NFL
0.3%
Median league alt → NFL rate
across 12 non-NFL leagues

What we measured

Every player in the archive is tagged with the leagues they have appeared in. For each non-NFL professional football league we count two things:

  1. How many players have appeared in that league at all.
  2. How many of those players also appear in our NFL roster data.

The ratio of the second to the first is the league's NFL conversion rate.

Top-line result

The headline cards above now focus on directional movement: players who appear in an alt league before the NFL. On that measure, XFL leads at 4.0% (30 of 750).

Important caveat: chart and table conversion columns still show any NFL overlap (before or after) so you can compare both lenses.

Chicken or egg?

A high conversion rate does not mean a league develops NFL players. There are two competing explanations for why league A might send a higher share of its players to the NFL than league B:

  1. Development: league A is genuinely a better proving ground — its coaching, competition, or visibility makes the players in it more likely to earn an NFL roster spot than they otherwise would.
  2. Selection: league A simply gets first pick of the best non-NFL talent. Those players were always going to be the most likely to make the NFL; the league just happens to be where they landed first. The same players in league B would have made the NFL at the same rate.

Nothing in this dataset can fully separate the two. To do that you would need a counterfactual: take a player who went to league A, run their career again with them in league B, and see what happens. We can only observe the world that actually happened.

What we can do is flag the structural reasons each effect probably matters:

  • The UFL (and its predecessor brands USFL/XFL) actively scouts and signs players who recently failed to stick on an NFL roster — a population that is already pre-selected for NFL-readiness. A high conversion rate there is mostly the selection story.
  • The CFL has a much larger talent pool (over 4,000 tracked players) and a wider mix of pure-CFL career players. Its lower conversion rate partly reflects that it isn't filtering as aggressively for NFL-prospect types.
  • Indoor leagues (AFL, IFL, AF1, NAL) play a different game on a smaller field, so the population there self-selects away from NFL-style talent in the first place.

One thing the data can show directly is the direction of the move. Below we split each league's NFL crossovers into players who appeared in the alt league before reaching the NFL versus those who appeared after — i.e. ex-NFL veterans dropping down. This is not the same as answering selection-vs-development, but it does tell you whether a league is mostly a launching pad or mostly a landing spot.

League-by-league

Full breakdown in the table at the bottom of the article.

Charts

% of league's players who also appear in the NFL

Includes any NFL appearance, regardless of whether it came before or after the alt-league stint.

Player movement between leagues

Each node is a league, sized by the number of unique players in it. Each arrow points from the league a player appeared in first to the league they appeared in next; thickness is proportional to the number of players who made that move. Dashed grey lines mark pairs of leagues where chronology can't be determined. Drag a node to reposition; hover for exact counts.

Launching pad or landing spot?

Counts of NFL crossovers split by which league the player appeared in first. Useful for telling launching pads from landing spots, but does not by itself answer the selection-vs-development question above.

Full data

League Players in archive Also in NFL % to NFL Pre-NFL appearance Post-NFL appearance Stepping-stone share Notes
UFL 1,242 225 18.1% 35 190 15.6% United Football League — formed by the 2024 merger of USFL and XFL.
XFL 750 30 4% 30 0 100% XFL (revived 2023, merged with USFL into UFL in 2024).
USFL 757 28 3.7% 28 0 100% United States Football League (revived 2022, merged with XFL into UFL in 2024).
AAF 356 11 3.1% 11 0 100% Alliance of American Football — single 2019 season.
CFL 4,149 52 1.3% 34 18 65.4% Canadian Football League — 9 teams, founded 1958.
AFL 140 1 0.7% 1 0 100% Arena Football League (revived 2024).
NAL 564 3 0.5% 0 0 National Arena League.
IFL 285 1 0.4% 0 0 Indoor Football League.
ELF 2,373 4 0.2% 1 0 100% European League of Football.
EFA 232 0 0% 0 0 European Football Alliance — six-team breakaway from the ELF (debut 2026).
AF1 227 0 0% 0 0 Arena Football One.
FCF 119 0 0% 0 0 Fan Controlled Football.

Methodology

Source: every player JSON file in docs/data/players/. A player is counted in a league if that league appears in their sport_names list (derived from any roster appearance, not just statlines). Players flagged ambiguous are excluded because their cross-league identity is uncertain.

Year ordering uses the earliest year recorded in season_totals per league. When season-year metadata is missing on either side, we fall back to the order of sport_id values on the player's roster appearances — a coarse but reliable proxy because sport IDs in this archive are issued chronologically.

This study reruns on every site build; numbers will drift as the archive ingests more rosters and as players move between leagues.

Snapshot history

How the headline numbers have moved over time.

Show 16 snapshots (2026-05-14 → 2026-05-19)
{"slug": "nfl-pipeline-leagues", "snapshots": [{"computed_at": "2026-05-14T01:10:42+00:00", "leagues": {"UFL": {"players": 1246, "to_nfl": 225, "rate_pct": 18.1}, "XFL": {"players": 463, "to_nfl": 23, "rate_pct": 5.0}, "USFL": {"players": 765, "to_nfl": 28, "rate_pct": 3.7}, "AAF": {"players": 362, "to_nfl": 12, "rate_pct": 3.3}, "CFL": {"players": 4125, "to_nfl": 53, "rate_pct": 1.3}, "AFL": {"players": 144, "to_nfl": 1, "rate_pct": 0.7}, "50 YARD": {"players": 240, "to_nfl": 1, "rate_pct": 0.4}, "ELF": {"players": 692, "to_nfl": 1, "rate_pct": 0.1}, "IFL": {"players": 149, "to_nfl": 0, "rate_pct": 0.0}, "AF1": {"players": 159, "to_nfl": 0, "rate_pct": 0.0}}, "total_football_players": 9460}, {"computed_at": "2026-05-14T01:28:21+00:00", "leagues": {"UFL": {"players": 1246, "to_nfl": 225, "rate_pct": 18.1}, "XFL": {"players": 463, "to_nfl": 23, "rate_pct": 5.0}, "USFL": {"players": 765, "to_nfl": 28, "rate_pct": 3.7}, "AAF": {"players": 362, "to_nfl": 12, "rate_pct": 3.3}, "CFL": {"players": 4125, "to_nfl": 53, "rate_pct": 1.3}, "AFL": {"players": 144, "to_nfl": 1, "rate_pct": 0.7}, "ELF": {"players": 692, "to_nfl": 1, "rate_pct": 0.1}, "IFL": {"players": 149, "to_nfl": 0, "rate_pct": 0.0}, "AF1": {"players": 159, "to_nfl": 0, "rate_pct": 0.0}}, "total_football_players": 9294}, {"computed_at": "2026-05-14T02:17:12+00:00", "leagues": {"UFL": {"players": 1246, "to_nfl": 225, "rate_pct": 18.1}, "XFL": {"players": 463, "to_nfl": 23, "rate_pct": 5.0}, "USFL": {"players": 765, "to_nfl": 28, "rate_pct": 3.7}, "AAF": {"players": 362, "to_nfl": 12, "rate_pct": 3.3}, "CFL": {"players": 4115, "to_nfl": 53, "rate_pct": 1.3}, "AFL": {"players": 144, "to_nfl": 1, "rate_pct": 0.7}, "ELF": {"players": 692, "to_nfl": 1, "rate_pct": 0.1}, "IFL": {"players": 149, "to_nfl": 0, "rate_pct": 0.0}, "AF1": {"players": 159, "to_nfl": 0, "rate_pct": 0.0}}, "total_football_players": 9283}, {"computed_at": "2026-05-14T12:09:27+00:00", "leagues": {"UFL": {"players": 1247, "to_nfl": 225, "rate_pct": 18.0}, "XFL": {"players": 463, "to_nfl": 23, "rate_pct": 5.0}, "USFL": {"players": 765, "to_nfl": 28, "rate_pct": 3.7}, "AAF": {"players": 362, "to_nfl": 12, "rate_pct": 3.3}, "CFL": {"players": 4109, "to_nfl": 53, "rate_pct": 1.3}, "AFL": {"players": 144, "to_nfl": 1, "rate_pct": 0.7}, "ELF": {"players": 692, "to_nfl": 1, "rate_pct": 0.1}, "IFL": {"players": 149, "to_nfl": 0, "rate_pct": 0.0}, "AF1": {"players": 159, "to_nfl": 0, "rate_pct": 0.0}}, "total_football_players": 9278}, {"computed_at": "2026-05-14T13:16:35+00:00", "leagues": {"UFL": {"players": 1245, "to_nfl": 225, "rate_pct": 18.1}, "XFL": {"players": 754, "to_nfl": 31, "rate_pct": 4.1}, "USFL": {"players": 762, "to_nfl": 28, "rate_pct": 3.7}, "AAF": {"players": 358, "to_nfl": 12, "rate_pct": 3.4}, "CFL": {"players": 4100, "to_nfl": 53, "rate_pct": 1.3}, "AFL": {"players": 144, "to_nfl": 1, "rate_pct": 0.7}, "ELF": {"players": 692, "to_nfl": 1, "rate_pct": 0.1}, "IFL": {"players": 149, "to_nfl": 0, "rate_pct": 0.0}, "AF1": {"players": 159, "to_nfl": 0, "rate_pct": 0.0}}, "total_football_players": 9367}, {"computed_at": "2026-05-14T15:33:12+00:00", "leagues": {"UFL": {"players": 1245, "to_nfl": 225, "rate_pct": 18.1}, "XFL": {"players": 754, "to_nfl": 31, "rate_pct": 4.1}, "USFL": {"players": 762, "to_nfl": 28, "rate_pct": 3.7}, "AAF": {"players": 358, "to_nfl": 12, "rate_pct": 3.4}, "CFL": {"players": 4092, "to_nfl": 52, "rate_pct": 1.3}, "AFL": {"players": 144, "to_nfl": 1, "rate_pct": 0.7}, "ELF": {"players": 692, "to_nfl": 1, "rate_pct": 0.1}, "IFL": {"players": 149, "to_nfl": 0, "rate_pct": 0.0}, "AF1": {"players": 159, "to_nfl": 0, "rate_pct": 0.0}}, "total_football_players": 9359}, {"computed_at": "2026-05-14T17:02:32+00:00", "leagues": {"UFL": {"players": 1244, "to_nfl": 225, "rate_pct": 18.1}, "XFL": {"players": 753, "to_nfl": 31, "rate_pct": 4.1}, "USFL": {"players": 760, "to_nfl": 28, "rate_pct": 3.7}, "AAF": {"players": 357, "to_nfl": 12, "rate_pct": 3.4}, "CFL": {"players": 4077, "to_nfl": 52, "rate_pct": 1.3}, "AFL": {"players": 141, "to_nfl": 1, "rate_pct": 0.7}, "ELF": {"players": 692, "to_nfl": 1, "rate_pct": 0.1}, "IFL": {"players": 148, "to_nfl": 0, "rate_pct": 0.0}, "AF1": {"players": 157, "to_nfl": 0, "rate_pct": 0.0}}, "total_football_players": 9339}, {"computed_at": "2026-05-14T17:58:29+00:00", "leagues": {"UFL": {"players": 1244, "to_nfl": 225, "rate_pct": 18.1}, "XFL": {"players": 753, "to_nfl": 31, "rate_pct": 4.1}, "USFL": {"players": 760, "to_nfl": 28, "rate_pct": 3.7}, "AAF": {"players": 357, "to_nfl": 12, "rate_pct": 3.4}, "CFL": {"players": 4068, "to_nfl": 52, "rate_pct": 1.3}, "AFL": {"players": 141, "to_nfl": 1, "rate_pct": 0.7}, "ELF": {"players": 692, "to_nfl": 1, "rate_pct": 0.1}, "IFL": {"players": 148, "to_nfl": 0, "rate_pct": 0.0}, "AF1": {"players": 157, "to_nfl": 0, "rate_pct": 0.0}}, "total_football_players": 9330}, {"computed_at": "2026-05-14T18:49:40+00:00", "leagues": {"UFL": {"players": 1244, "to_nfl": 225, "rate_pct": 18.1}, "XFL": {"players": 753, "to_nfl": 31, "rate_pct": 4.1}, "USFL": {"players": 759, "to_nfl": 28, "rate_pct": 3.7}, "AAF": {"players": 357, "to_nfl": 12, "rate_pct": 3.4}, "CFL": {"players": 4061, "to_nfl": 52, "rate_pct": 1.3}, "AFL": {"players": 141, "to_nfl": 1, "rate_pct": 0.7}, "ELF": {"players": 692, "to_nfl": 1, "rate_pct": 0.1}, "IFL": {"players": 148, "to_nfl": 0, "rate_pct": 0.0}, "AF1": {"players": 157, "to_nfl": 0, "rate_pct": 0.0}}, "total_football_players": 9323}, {"computed_at": "2026-05-14T19:35:34+00:00", "leagues": {"UFL": {"players": 1244, "to_nfl": 225, "rate_pct": 18.1}, "XFL": {"players": 753, "to_nfl": 31, "rate_pct": 4.1}, "USFL": {"players": 759, "to_nfl": 28, "rate_pct": 3.7}, "AAF": {"players": 357, "to_nfl": 12, "rate_pct": 3.4}, "CFL": {"players": 4060, "to_nfl": 52, "rate_pct": 1.3}, "AFL": {"players": 141, "to_nfl": 1, "rate_pct": 0.7}, "ELF": {"players": 692, "to_nfl": 1, "rate_pct": 0.1}, "IFL": {"players": 148, "to_nfl": 0, "rate_pct": 0.0}, "AF1": {"players": 157, "to_nfl": 0, "rate_pct": 0.0}}, "total_football_players": 9322}, {"computed_at": "2026-05-15T20:20:33+00:00", "leagues": {"UFL": {"players": 1243, "to_nfl": 225, "rate_pct": 18.1}, "XFL": {"players": 750, "to_nfl": 30, "rate_pct": 4.0}, "USFL": {"players": 757, "to_nfl": 28, "rate_pct": 3.7}, "AAF": {"players": 357, "to_nfl": 12, "rate_pct": 3.4}, "CFL": {"players": 4034, "to_nfl": 52, "rate_pct": 1.3}, "AFL": {"players": 140, "to_nfl": 1, "rate_pct": 0.7}, "ELF": {"players": 691, "to_nfl": 1, "rate_pct": 0.1}, "IFL": {"players": 147, "to_nfl": 0, "rate_pct": 0.0}, "AF1": {"players": 157, "to_nfl": 0, "rate_pct": 0.0}}, "total_football_players": 9291}, {"computed_at": "2026-05-18T21:18:23+00:00", "leagues": {"UFL": {"players": 1243, "to_nfl": 225, "rate_pct": 18.1}, "XFL": {"players": 750, "to_nfl": 30, "rate_pct": 4.0}, "USFL": {"players": 757, "to_nfl": 28, "rate_pct": 3.7}, "AAF": {"players": 357, "to_nfl": 12, "rate_pct": 3.4}, "CFL": {"players": 4033, "to_nfl": 52, "rate_pct": 1.3}, "AFL": {"players": 140, "to_nfl": 1, "rate_pct": 0.7}, "ELF": {"players": 691, "to_nfl": 1, "rate_pct": 0.1}, "IFL": {"players": 147, "to_nfl": 0, "rate_pct": 0.0}, "AF1": {"players": 157, "to_nfl": 0, "rate_pct": 0.0}}, "total_football_players": 9290}, {"computed_at": "2026-05-19T14:54:19+00:00", "leagues": {"UFL": {"players": 1243, "to_nfl": 225, "rate_pct": 18.1}, "XFL": {"players": 750, "to_nfl": 30, "rate_pct": 4.0}, "USFL": {"players": 757, "to_nfl": 28, "rate_pct": 3.7}, "AAF": {"players": 356, "to_nfl": 11, "rate_pct": 3.1}, "CFL": {"players": 4033, "to_nfl": 52, "rate_pct": 1.3}, "AFL": {"players": 140, "to_nfl": 1, "rate_pct": 0.7}, "ELF": {"players": 691, "to_nfl": 1, "rate_pct": 0.1}, "IFL": {"players": 147, "to_nfl": 0, "rate_pct": 0.0}, "AF1": {"players": 157, "to_nfl": 0, "rate_pct": 0.0}}, "total_football_players": 9289}, {"computed_at": "2026-05-19T19:53:54+00:00", "leagues": {"UFL": {"players": 1242, "to_nfl": 225, "rate_pct": 18.1}, "XFL": {"players": 750, "to_nfl": 30, "rate_pct": 4.0}, "USFL": {"players": 757, "to_nfl": 28, "rate_pct": 3.7}, "AAF": {"players": 356, "to_nfl": 11, "rate_pct": 3.1}, "CFL": {"players": 4025, "to_nfl": 52, "rate_pct": 1.3}, "AFL": {"players": 140, "to_nfl": 1, "rate_pct": 0.7}, "ELF": {"players": 646, "to_nfl": 1, "rate_pct": 0.2}, "IFL": {"players": 147, "to_nfl": 0, "rate_pct": 0.0}, "AF1": {"players": 157, "to_nfl": 0, "rate_pct": 0.0}}, "total_football_players": 9237}, {"computed_at": "2026-05-19T20:04:31+00:00", "leagues": {"UFL": {"players": 1243, "to_nfl": 225, "rate_pct": 18.1}, "XFL": {"players": 753, "to_nfl": 31, "rate_pct": 4.1}, "USFL": {"players": 759, "to_nfl": 28, "rate_pct": 3.7}, "AAF": {"players": 356, "to_nfl": 11, "rate_pct": 3.1}, "CFL": {"players": 4175, "to_nfl": 52, "rate_pct": 1.2}, "AFL": {"players": 141, "to_nfl": 1, "rate_pct": 0.7}, "NAL": {"players": 564, "to_nfl": 3, "rate_pct": 0.5}, "IFL": {"players": 286, "to_nfl": 1, "rate_pct": 0.3}, "ELF": {"players": 2374, "to_nfl": 4, "rate_pct": 0.2}, "EFA": {"players": 232, "to_nfl": 0, "rate_pct": 0.0}, "AF1": {"players": 227, "to_nfl": 0, "rate_pct": 0.0}, "FCF": {"players": 119, "to_nfl": 0, "rate_pct": 0.0}}, "total_football_players": 12030}, {"computed_at": "2026-05-19T20:10:39+00:00", "leagues": {"UFL": {"players": 1242, "to_nfl": 225, "rate_pct": 18.1}, "XFL": {"players": 750, "to_nfl": 30, "rate_pct": 4.0}, "USFL": {"players": 757, "to_nfl": 28, "rate_pct": 3.7}, "AAF": {"players": 356, "to_nfl": 11, "rate_pct": 3.1}, "CFL": {"players": 4149, "to_nfl": 52, "rate_pct": 1.3}, "AFL": {"players": 140, "to_nfl": 1, "rate_pct": 0.7}, "NAL": {"players": 564, "to_nfl": 3, "rate_pct": 0.5}, "IFL": {"players": 285, "to_nfl": 1, "rate_pct": 0.4}, "ELF": {"players": 2373, "to_nfl": 4, "rate_pct": 0.2}, "EFA": {"players": 232, "to_nfl": 0, "rate_pct": 0.0}, "AF1": {"players": 227, "to_nfl": 0, "rate_pct": 0.0}, "FCF": {"players": 119, "to_nfl": 0, "rate_pct": 0.0}}, "total_football_players": 11999}]}

Underlying data