Studies · Football
Which leagues feed the NFL?
Cross-league career trajectories of pro football players
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:
- How many players have appeared in that league at all.
- 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:
- 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.
- 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
Includes any NFL appearance, regardless of whether it came before or after the alt-league stint.
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.
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}]}