Tutorial · 11 min · endpoints verified 2026-09-14

How to build college football rankings and conference standings

Combine the free FBS record table with team Elo for a transparent power order. This is not an AP, Coaches or CFP poll, and conference grouping remains caller-supplied until membership is served.

API coverage and endpoint overview: Explore the NCAAF API

Why this is hard

Standings and rankings answer different questions

Wins and losses describe results. A poll expresses voter judgment. Elo estimates team strength from results. Putting all three under one “rank” label is how a dashboard becomes misleading.

  • The standings endpoint serves FBS records, but it does not serve AP, Coaches or CFP poll positions.
  • The response does not expose a conference-membership field. Conference tabs need an explicit team-id list supplied by your application.
  • Current Elo is free and useful as a power order, but it must be labeled Elo rather than “official ranking.”
  • The season selector on stored NCAAF standings has documented unresolved behavior; read the returned season instead of assuming the requested one won.

Path 1 · recommended

Have your AI agent build it

The MCP tools can fetch standings and current team Elo. Give the agent your conference membership list, and require it to retain the labels “record” and “Elo” throughout the UI.

1. Connect the MCP server

Add the server in your MCP client and sign in with your Big Balls account. Your client registers itself and handles the token exchange — there is no key to copy.

MCP client configjson
{
  "mcpServers": {
    "bigballs-sports-data": {
      "url": "https://mcp.bigballsdata.com/mcp"
    }
  }
}

2. Tools your agent gets

  • get_standings

    League table with wins, losses, win_pct, games_played.

  • get_team_elo

    Team Elo rating, rank and optional rating history.

  • get_coverage

    Machine-readable map of what we hold and what we do not.

3. Ask for what you want

Paste this at your agent. It is written to make the model check coverage before it designs anything, which is what stops it inventing a field we do not serve.

Prompttext
Build a college football records and Elo dashboard for one conference.

First call get_coverage for american_football. Fetch NCAAF standings with
get_standings and read the season returned by the response. I will supply the
canonical team ids that belong to the conference; do not infer membership from
team names.

For those ids call get_team_elo. Show two separate columns: conference-filtered
W-L record and Elo power rank. Label the latter "Elo", never AP, Coaches or CFP.
If I do not supply team ids, render the league-wide FBS table and state that it
is not conference grouped.

What the agent cannot reach

No MCP or REST route serves official college-football polls or conference membership today. The agent can calculate an Elo order only after the application supplies the conference team ids.

Path 2 · hand-coded

Build it yourself

The implementation treats conference membership as application configuration. It never guesses membership or renames Elo as an official poll.

  1. 01

    Fetch the league-wide FBS record table

    Read the season from the response. Do not assume a season query was honored for the stored NCAAF table.

    GET /v1/standingsbash
    curl -s "https://api.bigballsdata.com/v1/standings?sport=american_football&league=ncaaf" \
      -H "x-api-key: $BBS_API_KEY"
  2. 02

    Declare conference membership

    Store canonical team UUIDs in your own configuration. This list is product input because the API does not serve conference membership.

    Application-owned conference configjavascript
    const conferenceTeamIds = new Set([
      process.env.CONFERENCE_TEAM_ID_1,
      process.env.CONFERENCE_TEAM_ID_2,
    ].filter(Boolean));
  3. 03

    Fetch current Elo for each configured team

    Current Elo is free. Keep null ratings visible as unavailable rather than sorting them as zero.

    GET /v1/teams/:id/elobash
    curl -s "https://api.bigballsdata.com/v1/teams/$TEAM_ID/elo" \
      -H "x-api-key: $BBS_API_KEY"
  4. 04

    Build two explicit orders

    Sort records by wins and losses for the standings view, and non-null Elo ratings for the power view. Never label either one as an official poll.

    Record and Elo view modelsjavascript
    const table = response.data.standings[0];
    const conferenceRows = table.rows.filter((row) =>
      conferenceTeamIds.has(row.team_id)
    );
    const byRecord = conferenceRows.toSorted(
      (a, b) => b.wins - a.wins || a.losses - b.losses
    );
    const byElo = enriched.filter((row) => row.elo_rating != null).toSorted(
      (a, b) => b.elo_rating - a.elo_rating
    );

Reference

Every endpoint this tutorial uses

All on the gateway at api.bigballsdata.com. Verified against production on 2026-09-14.

MethodPathReturnsWhy you need itPlan
GET/v1/standings?sport=american_football&league=ncaafLeague-wide FBS team ids, W-L-T records, win percentage and returned seasonSupplies the factual record table before caller-owned conference filtering. Read the endpoint guide.The stored NCAAF season selector has unresolved behavior; trust the season returned in the payload, not the requested query alone.Free
GET/v1/teams/:id/eloCurrent Elo rating plus a locked-intelligence disclosure on FreeProvides a model-based power order that remains visibly distinct from standings and polls. How Elo is calculated.Free
GET/v1/teams/:id/elo/historyThe team rating series over settled gamesAdds a strength trend after the basic standings and current-rating view works. Interpret the rating history.Solo

Pricing, honestly

Current records and Elo are free; the Elo timeline is Solo

The entire current table works on Free. Solo earns its place when the product needs to explain how a team moved, not merely where it sits.

Free routes

texttext
GET /v1/standings?sport=american_football&league=ncaaf\nGET /v1/teams/{teamId}/elo

Solo route

texttext
GET /v1/teams/{teamId}/elo/history?source=ncaaf
  • Free supports a league-wide record table and a current Elo power order.
  • Solo adds the rating history needed for a “why did they move?” chart.
  • Neither tier includes AP, Coaches or CFP poll positions or conference membership today.

More tutorials

Other build guides

Known gaps

What is not an official poll or conference table

Use these labels literally; they prevent the application from upgrading model output into a claim the API does not support.

  • No AP, Coaches or CFP rankings are served. Elo is an independent model rating.
  • No conference membership field is served. The application must provide canonical team ids for its chosen conference.
  • FCS has no standings or Elo today. This guide is FBS-only.

Questions

Does the API return AP or CFP rankings?
No. It returns FBS records and team Elo. Label Elo as Elo, never as an AP, Coaches or CFP position.
Can I request one conference from the standings endpoint?
Not today. Supply the conference’s canonical team ids in your application and filter the league-wide table.
Why use ids instead of team names for conference membership?
Names and abbreviations can change or collide. The standings response already provides canonical team ids, so membership should use those ids.
Can I request historical NCAAF standings by season?
Do not rely on that yet. The stored NCAAF season selector has unresolved behavior, so read and display the season returned by the response.
Does this work for FCS?
No. FCS schedules and scores are served under league=ncaaf-fcs, but FCS standings and Elo are not loaded today.

Build the record table, then add Elo

Start with the free FBS standings response and keep every model-derived number labeled for what it is.