kenpom.com APIkenpom.com ↗
Access KenPom Division I college basketball ratings via API. Retrieve team efficiency metrics, rankings, tempo, and strength-of-schedule data from 2002 to 2026.
curl -X GET 'https://api.parse.bot/scraper/6092ec52-1c27-4ba8-88d3-b6893da27e69/get_ratings?year=2025' \ -H 'X-API-Key: $PARSE_API_KEY'
Fetches the main Pomeroy College Basketball Ratings table for a given season. Returns all Division I teams with their rankings, adjusted efficiency margins, tempo, luck, and strength-of-schedule metrics.
| Param | Type | Description |
|---|---|---|
| year | string | The season year (2002-2026). |
{
"type": "object",
"fields": {
"year": "string indicating the requested season year",
"ratings": "array of team rating objects with rank, team, conference, w_l, adj_em, adj_oe, adj_oe_rank, adj_de, adj_de_rank, adj_t, adj_t_rank, luck, luck_rank, sos_adj_em, sos_adj_em_rank, sos_adj_oe, sos_adj_oe_rank, sos_adj_de, sos_adj_de_rank, ncsos_adj_em, ncsos_adj_em_rank"
},
"sample": {
"data": {
"year": "2025",
"ratings": [
{
"w_l": "35-4",
"luck": "-.026",
"rank": "1",
"team": "Duke1",
"adj_t": "66.0",
"adj_de": "90.8",
"adj_em": "+39.29",
"adj_oe": "130.1",
"luck_rank": "252",
"adj_t_rank": "269",
"conference": "ACC",
"sos_adj_de": "101.9",
"sos_adj_em": "+11.51",
"sos_adj_oe": "113.4",
"adj_de_rank": "5",
"adj_oe_rank": "1",
"ncsos_adj_em": "+9.46",
"sos_adj_de_rank": "55",
"sos_adj_em_rank": "51",
"sos_adj_oe_rank": "43",
"ncsos_adj_em_rank": "21"
}
]
},
"status": "success"
}
}About the kenpom.com API
The KenPom API exposes 4 endpoints covering Pomeroy College Basketball Ratings for every Division I team from the 2002 through 2026 seasons. The get_ratings endpoint returns the full rankings table with adjusted efficiency margin, offensive and defensive efficiency, tempo, luck, and strength-of-schedule fields. Two search endpoints let you find teams and coaches by name substring, and get_ratings_by_conference narrows results to a single conference abbreviation.
Ratings and Efficiency Metrics
The get_ratings endpoint accepts an optional year parameter (2002–2026) and returns an array of team rating objects covering every Division I program for that season. Each object includes rank, team, conference, w_l, adj_em (adjusted efficiency margin), adj_oe with its rank, adj_de with its rank, and adj_t (adjusted tempo) with its rank. Omitting the year returns the current season's data. These metrics are the core of the Pomeroy system — adj_em is the margin the team would be expected to outscore an average team per 100 possessions on a neutral floor.
Conference Filtering
get_ratings_by_conference shares the same year parameter and adds a required conference string. Matching is case-insensitive against the abbreviations used in the ratings table — ACC, B12, SEC, B10, and so on. The response echoes the requested abbreviation back in a conference field and includes a count of matched teams, making it straightforward to verify the filter hit the right group.
Team and Coach Search
search_teams accepts a query substring and returns an array of matching team name strings. Omitting the query returns the full list of all tracked team names. search_coaches works the same way against coach full names — first and last name. Nicknames and aliases are not matched; only literal substrings of the coach's official name will return results. Both endpoints echo the query back in the response.
- Build a season-over-season efficiency trend tracker using
adj_emvalues from multipleget_ratingsyear calls - Compare adjusted offensive and defensive efficiency rankings across all teams in a single conference via
get_ratings_by_conference - Populate a team autocomplete search box using
search_teamswith partial name queries - Look up which teams a coach has been associated with by first searching for the coach name via
search_coaches - Generate conference strength reports using
countand aggregatedadj_emfromget_ratings_by_conference - Identify the fastest and slowest tempo teams in a given season by sorting on
adj_tfromget_ratings - Backfill historical college basketball analytics databases using the 2002–2026 year range
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 250 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does KenPom have an official developer API?+
What does the `adj_em` field represent and how is it different from win-loss record?+
adj_em is the adjusted efficiency margin — the number of points a team would be expected to outscore an average Division I opponent per 100 possessions on a neutral court, adjusted for the quality of opponents faced. It is a pace-adjusted, opponent-adjusted metric and captures more predictive information than raw w_l record, which is also returned but does not account for schedule strength or game pace.Does the API return individual game logs, player statistics, or four-factors data?+
Which conference abbreviations does `get_ratings_by_conference` accept?+
ACC, B12, SEC, B10, MWC, WCC, and others. Matching is case-insensitive. If you are unsure of an abbreviation, call get_ratings first and inspect the conference field values in the returned team objects.How far back does historical data go, and is data available for non-Division I programs?+
year parameter covers seasons from 2002 through 2026. Data is limited to Division I programs only. Non-Division I teams are not included in any endpoint response. You can fork this API on Parse and revise it if you need to extend coverage to earlier seasons or add additional team tiers as that data becomes accessible.