ParseForge Scrapers

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.

Run this scraper See the API call
Total runs
13
Bookmarked
0
Last modified
8 days ago

This scraper was last updated on .

What does the Barttorvik College Basketball Scraper return?

ParseForge

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

  1. Create a free Apify account with $5 in credit.
  2. Open the Barttorvik College Basketball Scraper.
  3. Pick ratings or games, choose the seasons and filters, then click Start.
  4. 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?

FieldTypeWhat it doesDefault
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 forWhat it isPrice 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.

POST ยท run and get results
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.

input.json
{
  "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