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

C. B. Zakarian

C. B. Zakarian is an independent analyst who writes about college football and basketball — the parts of them that can actually be measured. He builds every model, chart, and calculator here himself from public data, shows the working, and never invents a number. When the data can't answer a question, he says so. Expect ratings rebuilt from scratch, season-long census work, and a plain-English read on the NIL-era rules. More about the methodology →