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. The full script is reproduced below.
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)
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
- Background: Chapter 20: Recruiting Analytics (DataField.dev).
- CollegeFootballData.com — collegefootballdata.com (team talent composite; free API key)
- Companion script, kept in my build repository and not published:
scripts/cfb-talent-composite-python.py - Related: Getting started with the CFBD API · Returning production