How much does raw roster talent explain results? To ask that question responsibly, you need team-level talent — an aggregate of a program's recruiting over recent years — not individual prospect rankings. The CollegeFootballData API exposes exactly that: one talent composite per program, and nothing about individual minors. Here's how to pull and use it, the right way. Full code: scripts/cfb-talent-composite-python.py.
An editorial line we don't cross
This site never profiles, ranks, or speculates about individual high-school recruits — they're minors, and recruiting analysis here stays at the program, class, and aggregate level. CFBD's /talent endpoint fits that rule perfectly: it returns a single number per team, a composite of recruiting strength, with no individual athletes attached. We use that team number and only that.
The pull
It's one authenticated request (the talent composite is a CFBD endpoint, so it needs a free key — stored in an environment variable, never hardcoded):
import os, json, urllib.request
req = urllib.request.Request(
"https://api.collegefootballdata.com/talent?year=2024",
headers={"Authorization": f"Bearer {os.environ['CFBD_API_KEY']}"})
data = json.loads(urllib.request.urlopen(req).read())
top = sorted(data, key=lambda d: d["talent"], reverse=True)[:15] # team-level only
Each record is {"school": ..., "talent": ...} — a program total, no individuals.
Run it (with a key)
scripts/cfb-talent-composite-python.py, which needs a free CFBD_API_KEY. Set the key and re-run to drop the top-15 program-talent bar chart in here. Per site policy, I'm leaving this note rather than inventing talent numbers — and the script only ever requests team-level totals.
What to do with the number
Team talent composite is most interesting when you compare it to results — it sets an expectation, and the gap between talent and performance is where the coaching stories live:
- Talent vs. wins. Plot composite against win total (or Elo). Most teams sit near the trend; the outliers are the stories — programs winning above their talent (great coaching/development) or below it (underperformance).
- Talent vs. recruiting rankings. Composite reflects talent on the roster now, which the transfer portal has decoupled from class rankings — a team can be more talented than its recruiting ranking suggests because it won the portal (see returning production).
- Year-over-year change shows which programs are accumulating or shedding talent.
Keep it responsible
- Stay aggregate. Use the team number; do not pull or publish individual prospect data.
- Don't reproduce paid rankings. Services like 247Sports, Rivals, and On3 publish proprietary recruiting and NIL figures — reference them in prose with a link if relevant, but never republish their data as your own.
- Talent is a prior, not a result. It's where a season starts, not how it ends.
Used this way, roster talent becomes a powerful baseline — and the most interesting teams are always the ones that beat it.
Sources & further reading
- CollegeFootballData.com — collegefootballdata.com (team talent composite; free API key)
- Companion code:
scripts/cfb-talent-composite-python.py - Related: Getting started with the CFBD API · Returning production