Barttorvik College Basketball Scraper
parseforge/barttorvik-college-basketball-scraper
Lead generationDeveloper tools
Scrape Barttorvik T-Rank college basketball analytics: adjusted efficiency ratings and four factors for every Division I team since 2008, plus every game with its box-score four factors.
- Total runs
- 13
- Bookmarked
- 0
- Last modified
- 8 days ago
This scraper was last updated on .
What does the Barttorvik College Basketball Scraper return?
NCAA Basketball Rankings Scraper - Barttorvik T-Rank
Barttorvik's T-Rank as data: adjusted efficiency ratings and four factors for all 365 Division I teams, every season since 2008, plus every game with its own four factors. No login, no API key, no proxy. Export to CSV, JSON, Excel, or XML.
T-Rank is the public tempo-free rating system college basketball analysts actually use, but the site gives you a table to look at, not a file to work with. This Actor reads the ratings table and the season game file, returns them as flat rows, and adds what the site leaves you to work out by hand: form splits, schedule strength, and the rank and barthag of both sides on every game.
| Who uses it | What they use T-Rank data for |
|---|---|
| Bettors and modellers | Tempo-free efficiency inputs and per-game four factors for a rating model |
| College coaching staffs and analysts | Opponent scouting: four factors for and against, form and schedule strength |
| Bracketologists and media | Wins above bubble, quality wins and bad losses by team |
| Fantasy and DFS tools | Pace and efficiency by team to project game totals |
| Sports data researchers | Nineteen seasons of tempo-free ratings in one schema |
What it does
Two datasets, both from the season files the site publishes:
- ๐ Team ratings: one row per team per season. T-Rank position, conference, record, adjusted offense and defense, barthag, effective field goal percentage for and against, turnover rate for and against, offensive and defensive rebound percentage, free throw rate for and against, two and three point percentages and rates for and against, adjusted tempo, wins above bubble, and the tournament note the site prints next to the name ("1 seed, CHAMPS").
- ๐ Games: one row per team per game, so each game appears twice, once from each side. Date, opponent, both conferences, venue, result, score, margin, the adjusted offense and defense of that performance, the four factors for and against, game score, adjusted margin, tempo and both head coaches. The 2026 season carries 11,504 game rows.
And three blocks computed from the same files, so they cost no extra request:
- ๐ Team form: last-10 record, home, away and neutral splits, conference and non-conference records, the last game played and its result.
- ๐ช Schedule strength: average opponent rank and barthag, the toughest opponent faced, wins against the top 50 and losses to teams outside the top 200.
- ๐ Game context: the season rank, barthag and record of both sides on each game row, which is what turns a result into a quality win or a bad loss.
Coverage runs from the 2008 season (341 teams) to the current one (365).
What you can do with T-Rank data
Build a rating model.
Pull the games for several seasons with the four factors and the adjusted margin already computed per performance, and you have a training set without touching a box score.
Scout an opponent.
One team, one season, with form and schedule strength: how they score and defend, how they have played in the last ten, and against whom.
Find quality wins and bad losses.
Game context puts the opponent's rank on the row, so filtering wins against the top 50 or losses to teams outside the top 200 is a spreadsheet filter, not a join.
Compare conferences.
Filter by conference across seasons and compare adjusted efficiency, tempo and wins above bubble.
Why choose this scraper
| What you get | |
|---|---|
| Columns that are verified, not guessed | The site's JSON is an unlabelled array; every field here was aligned against its own labelled table, and the positions that could not be confirmed are left out rather than mislabelled |
| Scores the right way round | The site writes the score winner first, so "L, 96-62" means the team scored 62. Every row carries the team's own score, the opponent's, and the signed margin |
| Two datasets, one schema | Ratings and games in the same run, with rowType telling them apart |
| Nineteen seasons | 2008 onward, the same fields throughout |
| Fast and cheap to run | One request per season file: 3,000 game rows written in about three seconds |
| No proxy, no browser | Plain HTTP; the site's browser check is answered by posting the form it ships |
How it compares
No Apify Actor publishes tempo-free college basketball ratings. The NCAA actors on the Store return box scores, which are the raw counting stats behind the game rather than the adjusted ratings.
| Feature | ParseForge | barttorvik.com | NCAA box score actors |
|---|---|---|---|
| Adjusted efficiency and barthag | Yes | Yes, as a table | No |
| Four factors for and against | Yes | Yes | Partly, unadjusted |
| Per-game adjusted performance | Yes | Yes | No |
| Form and schedule strength computed | Yes | Work it out yourself | No |
| Seasons back to 2008 | Yes | Yes | Varies |
| Export | CSV, JSON, Excel, XML | No | Yes |
| Price per row | $0.005 ratings, $0.002 games | Free, manual | $0.00002 to $0.004 |
What a team rating looks like
{
"rowType": "team-rating",
"season": 2026,
"rank": 1,
"team": "Michigan",
"tournamentNote": "1 seed, CHAMPS",
"conference": "B10",
"games": 40,
"record": "37-3",
"wins": 37,
"losses": 3,
"adjustedOffense": 129.54,
"adjustedDefense": 91.51,
"barthag": 0.98191,
"effectiveFgPct": 58.38,
"effectiveFgPctDefense": 44.61,
"turnoverPct": 16.3154,
"turnoverPctDefense": 15.1271,
"offensiveReboundPct": 34.754,
"defensiveReboundPct": 28.269,
"freeThrowRate": 38.0102,
"freeThrowRateDefense": 26.013,
"twoPointPct": 60.64,
"twoPointPctDefense": 43.82,
"threePointPct": 36.831,
"threePointPctDefense": 30.416,
"threePointRate": 41.4141,
"threePointRateDefense": 42.3275,
"adjustedTempo": 71.121,
"winsAboveBubble": 14.21,
"scrapedAt": "2026-08-27T20:30:46.346Z"
}
A game row from the same season, with context on:
{
"rowType": "game",
"date": "2026-04-06",
"team": "Michigan",
"teamConference": "B10",
"opponent": "Connecticut",
"opponentConference": "BE",
"venue": "Neutral",
"isConferenceGame": "No",
"result": "W, 69-63",
"outcome": "Win",
"teamScore": 69,
"opponentScore": 63,
"margin": 6,
"coach": "Dusty May",
"opponentRank": 9,
"opponentBarthag": 0.95619
}
Configure the run
Leave everything empty for the current season's ratings. Pick games for the game file, or both to get the ratings first and then the games.
The top 25 teams this season:
{ "dataset": "team-ratings", "maxRank": 25, "maxItems": 25 }
One conference with form and schedule strength:
{
"dataset": "team-ratings",
"conferences": ["B10"],
"includeTeamForm": true,
"includeScheduleStrength": true,
"maxItems": 20
}
Every game one team played, with the opponent's rating on each row:
{
"dataset": "games",
"teamNameContains": "Michigan",
"includeGameContext": true,
"maxItems": 45
}
Three seasons of conference games for a model:
{
"dataset": "games",
"seasons": ["2024", "2025", "2026"],
"conferenceGamesOnly": true,
"maxItems": 20000
}
Free users
Free-plan runs return up to 10 rows as a preview. Upgrade your Apify plan to pull whole seasons.
Run it
- Create a free Apify account with $5 in credit.
- Open the Barttorvik College Basketball Scraper.
- Pick ratings or games, choose the seasons and filters, then click Start.
- Export the results as CSV, Excel, JSON, or XML from the Dataset tab, or schedule a daily run during the season.
Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.
Use with AI agents (MCP)
Give an AI agent tempo-free college basketball data through the Model Context Protocol:
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/barttorvik-college-basketball-scraper"
Then ask: "Which Big Ten team had the best adjusted defense this season?", "List Michigan's wins against top 50 opponents" or "Compare tempo across the ACC and the Big 12".
Troubleshooting
Why does every game appear twice?
Because the season file records each game from both sides, once for each team, with that team's own offensive and defensive numbers. Filter by team, or keep one row per gameKey if you want a single row per game.
Why is the score reversed from what I expected?
It is not: the site writes the score winner first, so a loss reads "L, 96-62" even though the team scored 62. Every row carries teamScore, opponentScore and a signed margin so you never have to read the string.
Why is the current season empty in the summer?
Because it has not started. A season is named for the year it ends in, and the run falls back to the previous season with a warning until November.
Why are the form and schedule strength fields missing?
They are computed from that season's game file, so a team with no games on file gets neither, and neither block is charged.
Why do some columns from the site not appear here?
The site's JSON is an unlabelled array. Every field this Actor ships was matched against the site's own labelled table for a known team and a known game; four positions whose meaning that comparison did not settle were left out rather than published under a guessed name.
FAQ
| Question | Answer |
|---|---|
| What is T-Rank? | Barttorvik's tempo-free rating system: adjusted offensive and defensive efficiency per 100 possessions, plus a win probability rating called barthag. |
| How far back does it go? | The 2008 season, which carries 341 teams; the current season carries 365. |
| Is this the same as KenPom? | No. Both are tempo-free rating systems; this Actor reads Barttorvik, which is free and public. |
| What is wins above bubble? | How many more games a team has won than a bubble team would have, given the same schedule. It is the bracket metric on the ratings row. |
| Do I get player stats? | Not in this Actor. It covers team ratings and games. |
| How current is it? | The site updates through the season; the ratings row carries the record and the game file carries every game played to date. |
| What is game score? | Barttorvik's single-number rating of a team's performance in that game, on the same scale the site shows in its results table. |
| Can I get one row per game instead of two? | Filter by team, or deduplicate on gameKey, which is the same for both sides of a game. |
| How many rows per run? | Free plan: 10. Paid: a whole season of games is 11,504 rows, and nineteen seasons of ratings is about 6,800. |
| Is this an official Barttorvik product? | No. It is unofficial and reads only public pages. |
๐ Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.
โ ๏ธ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Barttorvik, the NCAA or any conference or school. It reads only publicly available pages. Use the data in line with the site's terms and applicable law.
What input does the Barttorvik College Basketball Scraper accept?
| Field | Type | What it does | Default |
|---|---|---|---|
| dataset | string (3 options) | Team ratings is one row per team per season (365 teams). Games is one row per team per game (11,504 rows in the 2026 season, each game appearing once from each side). Both writes the ratings first. | team-ratings |
| seasons | array | Seasons by the year they end in, from 2008 to the current one. Leave empty for the current season. | not set |
| maxItems | integer | Free users: limited to 10 items (preview). Paid users: up to 1,000,000. | 10 |
| conferences | array | Keep only these conferences. On games, a row is kept when either side is in one of them. | not set |
| teamNameContains | string | Keep only rows whose team name contains this text, for example "Michigan" or "State". | not set |
| opponentNameContains | string | Games only. Keep only games against an opponent whose name contains this text. | not set |
| minRank | integer | Team ratings only. Lowest T-Rank position to include, for example 1. | not set |
| maxRank | integer | Team ratings only. Highest T-Rank position to include, for example 50 for the top 50. | not set |
| venues | array | Games only. Home, away or neutral court. | not set |
| outcomes | array | Games only. Keep wins, losses or both. | not set |
| conferenceGamesOnly | boolean | Games only. Drop non-conference games. | false |
| dateFrom | string | Games only. Earliest game date, as YYYY-MM-DD. | not set |
| dateTo | string | Games only. Latest game date, as YYYY-MM-DD. | not set |
| sortBy | string (6 options) | Ratings sort by T-Rank position or by a rating; games sort by date. | rank |
| includeTeamForm | boolean | Team ratings only. Add the last-10 record, the home, away and neutral splits, the conference and non-conference records, and the last game played, computed from that season's games. | false |
| includeScheduleStrength | boolean | Team ratings only. Add the average opponent rank and barthag, the toughest opponent faced, wins against the top 50 and losses to teams outside the top 200. | false |
| includeGameContext | boolean | Games only. Add the season rank, barthag and record of both the team and the opponent to each game row. | false |
How much does the Barttorvik College Basketball Scraper cost?
from $1.78 per 1,000 results
| Charged for | What it is | Price each |
|---|---|---|
| Actor Start | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). | $0.0178 to $0.02 |
| Team rating | One team for one season: T-Rank position, conference, record, adjusted offense and defense, barthag, the four factors for and against, two and three point percentages and rates for and against, adjusted tempo, wins above bubble and the tournament note. | $0.00445 to $0.005 |
| Game row | One game from one team's side: date, opponent and both conferences, venue, result with the scores the right way round, margin, adjusted offense and defense, the four factors for and against, game score, adjusted margin, tempo and both coaches. | $0.00178 to $0.002 |
| Season file read | One season file downloaded, either the ratings table or the game file of 11,504 rows. Never charged for more files than the run wrote rows. | $0.00267 to $0.003 |
| Team form | Optional. The last-10 record, home, away and neutral splits, conference and non-conference records and the last game played, computed from that season's games. Charged only when the team has games on file. | $0.00267 to $0.003 |
| Schedule strength | Optional. Average opponent rank and barthag, the toughest opponent faced, wins against the top 50 and losses to teams outside the top 200. Charged only when the team has games on file. | $0.00267 to $0.003 |
| Game context | Optional. The season rank, barthag and record of both sides attached to the game row, which is what turns a result into a quality win or a bad loss. Charged only when a rating was found for either side. | $0.00178 to $0.002 |
Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.
How do I call the Barttorvik College Basketball Scraper API?
One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.
curl -X POST "https://api.apify.com/v2/acts/parseforge~barttorvik-college-basketball-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"dataset": "team-ratings",
"maxItems": 10,
"conferenceGamesOnly": false,
"sortBy": "rank",
"includeTeamForm": false
}' What example inputs can I use?
Use these inputs to see how a run is configured.
{
"dataset": "team-ratings",
"maxItems": 10,
"conferenceGamesOnly": false,
"sortBy": "rank",
"includeTeamForm": false
} What do users say about the Barttorvik College Basketball Scraper?
No reviews yet. Be the first.
How do I report an issue with the Barttorvik College Basketball Scraper?
We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.
Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.
What related scrapers can I use?
Run Barttorvik College Basketball Scraper on Apify All scrapers
