TeamRankings Scraper - Ratings, Stats & Odds avatar

TeamRankings Scraper - Ratings, Stats & Odds

Pricing

Pay per event

Go to Apify Store
TeamRankings Scraper - Ratings, Stats & Odds

TeamRankings Scraper - Ratings, Stats & Odds

Power ratings, 1,300+ team and player stat leaderboards, betting odds, projections and situational trends for NFL, NBA, MLB, WNBA and college sports.

Pricing

Pay per event

Rating

0.0

(0)

Developer

ParseForge

ParseForge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

ParseForge

TeamRankings Scraper - Ratings, Stats & Odds

Scrape TeamRankings.com across NFL, NBA, MLB, WNBA and college sports. Power ratings, 1,316 team and player stat leaderboards, live betting odds, playoff projections, situational betting trends and season game logs with closing lines. Eleven datasets behind one input. No login, no API key. Export to CSV, JSON, Excel, or XML.

TeamRankings is the site handicappers open before a bet — its predictive ratings, strength-of-schedule numbers and situational ATS records have no public API. This Actor reads them straight from the pages and gives you back typed rows, including the full-precision values the site hides behind rounded display text.

Who uses itWhat they scrape TeamRankings for
Bettors and handicappersPredictive ratings, ATS and over/under trends by situation
Quants and modellers1,316 stat leaderboards with home/away/last-3 splits as model features
Fantasy and DFS toolsTeam and player leaderboards refreshed daily
Sports media and affiliatesPower rankings tables and playoff odds for weekly articles
Betting-model backtestersSeason game logs carrying the closing spread, total and money line

What it does

Pick a league and a dataset; the Actor returns one row per team, player, game or study bucket. Every row carries the source URL and a scrape timestamp.

  • 🏆 Power rankings & ratings — 138 ranking pages across the six leagues: predictive, home, away, last-5, last-10, strength of schedule, luck, consistency, and performance against each rank tier.
  • 📊 Team stat leaderboards — 922 stat pages, each with the season value, last 3, last 1, home, away and last season, all in one row.
  • 🧍 Player stat leaderboards — 394 stat pages, top 100 players each, with team and position.
  • 💰 Betting odds — the current board with spread (or run line), total and money line, plus implied probability, the book's hold and de-vigged fair probabilities computed for you.
  • 📅 Schedule — today's slate with TeamRankings' hotness score, or the full published season.
  • 📋 Standings — division by division, with home, road, division records and streak.
  • 🔮 Projections — projected win totals with playoff, division, top-seed and title odds; MLB adds per-seed probabilities.
  • 📈 Betting trends — win, against-the-spread and over/under records across 26 situational splits, back to the 2007 season.
  • 🗂️ Team profiles — the full season game log carrying the closing spread, total and money line of every game played, plus power ratings and key stats.
  • 🕰️ Odds history & movement — how teams performed historically at each closing line, and what line movement did to cover rates.

Leagues covered

LeagueRankingsTeam statsPlayer statsOddsProjectionsTrendsOdds history
NFL23226112YesStandingsYesYes
NBA2314741YesStandingsYesYes
MLB21141100Yes+ seed oddsYes
WNBA2314741YesStandingsYesYes
NCAA Basketball2411533YesStandingsYesYes
NCAA Football2414667YesStandingsYesYes

There is no NHL. teamrankings.com/nhl/ redirects to the home page — the site does not cover hockey. MLB is the only league with postseason seed projections, and the only one without the odds-history and odds-movement studies (baseball has no point spread).

Basketball and football have offseasons. Out of season a league's odds board is legitimately empty and the Actor says so in the log rather than failing.

What you can do with TeamRankings data

🏆 Pull the power rankings everyone searches for.

nfl power rankings is a 301,000-a-month search, with nba power rankings and mlb power rankings at 74,000 each. The rankings dataset returns all 32 NFL teams with the predictive rating, its high, low and last rank, and the head-to-head record against each rank tier — 23 different ranking pages for NFL alone.

📅 Feed the pages people actually look for.

Schedule and standings are the highest-volume queries in this space by an order of magnitude — nfl schedule runs 9.1 million searches a month, mlb standings and nfl standings 7.5 million each. Both are one request and one dataset here. nfl injury report adds another 40,500 and is one of the optional matchup blocks.

🕰️ Rebuild any day in history.

Set Historical snapshot date and rankings and team stats come back as they stood on that date. TeamRankings keeps daily snapshots going back years, so you can build a training set of "what the ratings said the morning of the game" without a paid archive.

📈 Backtest a situational angle.

The trends dataset crosses three trend types with 26 situations — as home underdog, on no rest, after a loss, in division games — and accepts any season back to 2007. Three types by five situations is fifteen pages and one run.

🧮 Get closing lines for a whole season.

team-profiles returns each team's full game log with the closing spread, total and money line already attached. That is the hard half of any backtest, and no listing page on the site exposes it.

💰 Build an odds page.

nfl odds is 135,000 searches a month at a $4.65 CPC, mlb odds 40,500, college football odds 27,100 at $2.79, and world series odds 22,200 at $5.70 — the projections dataset covers that last one with title odds per team. The odds dataset is a single request for a whole league's board.

⚖️ Read the vig without doing the maths.

Every odds row already carries awayImpliedProb, homeImpliedProb, moneyLineHold and the de-vigged awayFairProb / homeFairProb. Computed from prices already downloaded, so it costs no extra request and no extra event.

Why choose this scraper

What you get
Eleven datasets, one ActorRatings, stats, players, odds, schedule, standings, projections, trends, profiles and two historical studies.
Full precision, not the rounded textThe site displays 5.23 and hides 5.23485 in a sort attribute. Rows carry the precise value — but only where it is genuinely the same number (see below).
Historical snapshotsRankings and team stats accept any date; trends accept any season back to 2007.
Every column keptNamed fields for the stable columns, plus a columns object holding every column of that page verbatim, so a layout that varies by stat never silently drops data.
No login or API keyEvery surface used here is public and anonymous.
No proxy for normal runsIt ran clean from a plain datacenter IP. The proxy is off by default and only suggested for full-league sweeps.
Opt-in extras, off by defaultFive matchup blocks, each its own checkbox, each billed only when it returns data.
Filters that cut before billingTeam, rank, value and text filters run on the complete row before any optional block is fetched.

Two traps this Actor handles for you

The sort attribute is not always the value. Stat pages hide full precision behind the rounded display text, which is worth keeping. Ranking pages do not: a rating displayed as 7.6 carries 507.591, a +500 offset used only for sorting, and a blank preseason rating carries a bare 500. Taking the attribute blindly ships 500 as if it were a rating. Rows here take the attribute only when it agrees with the displayed number, and return null when the cell is empty.

College leagues use two different slugs. Section pages live at /ncb/ and /ncf/; the stat, ranking and player-stat pages live at /ncaa-basketball/ and /college-football/. Mixing them up is not an error — /college-football/rankings/ answers HTTP 200 and quietly lands on the sport home page. The Actor follows the site's own links instead of rebuilding URLs.

How it compares

No other Apify Actor scrapes TeamRankings. We checked the Store: searches for teamrankings and power rankings return no competitor on this site. The comparison below is therefore against adjacent sports-data Actors, which cover different sources.

FeatureParseForge (this)scrapemint/sports-oddszhorex/sports-odds-aggregatorichigowa/sports-standings-api
SourceTeamRankingsOdds aggregatorsOdds aggregatorsStandings feeds
Power ratings & SOSYesNoNoNo
Stat leaderboards1,316 team + player pagesNoNoNo
Historical date snapshotsYesNoNoNo
Situational ATS / O-U trends26 splits, back to 2007NoNoNo
Season game log with closing linesYesNoNoNo
Playoff / seed projectionsYesNoNoNo
De-vigged probability on odds rowsIncludedNoPaid extraNo
Price per 1,000 rows$7.00$4.00$10.00$0.10

Why $7 per 1,000. This Actor is HTTP-only with no browser and no proxy. Measured on the platform, its own running cost is $0.02 per 1,000 rows on the worst case — a small 10-row run, where the fixed cost of the discovery page is spread over the fewest rows — and $0.0053 per 1,000 on a 736-row run. We are not pricing on cost. The house floor is $5 and we price at $7 because the row is not a commodity odds line: it is a rating, a split-adjusted stat or a closing-line game log with no other public API. Actors below us on price scrape different, cheaper-to-get data — ichigowa/sports-standings-api at $0.10 per 1,000 sells plain standings, which is one of eleven datasets here. If standings is all you need, buy that one.

What a row looks like

Rankings (dataset: rankings)

{
"sport": "nfl",
"sportLabel": "NFL",
"dataset": "rankings",
"sourceUrl": "https://www.teamrankings.com/nfl/ranking/predictive-by-other",
"scrapedAt": "2026-08-25T20:18:13.643Z",
"rankingSlug": "predictive-by-other",
"rankingName": "Predictive Rating",
"pageTitle": "NFL Predictive Rankings & Ratings",
"snapshotDate": null,
"rank": 1,
"team": "LA Rams",
"teamSlug": "los-angeles-rams",
"teamId": 14,
"divisionId": 117,
"teamRecord": "0-0",
"rating": 7.6,
"ratingLabel": "Rating",
"highRank": 1,
"lowRank": 1,
"lastRank": 1,
"columns": { "Rating": 7.6, "v 1-5": "0-0", "v 6-10": "0-0", "Hi": 1, "Lo": 1, "Last": 1 }
}

Team stats (dataset: team-stats) adds statSlug, statName, statCategory, and the split columns:

{
"statSlug": "runs-per-game",
"statName": "Runs per Game",
"statCategory": "Team Batting",
"rank": 1,
"team": "Chi Cubs",
"value": 5.23485,
"seasonLabel": "2026",
"last3": 10,
"last1": 7,
"home": 4.96923,
"away": 5.49254,
"prevSeasonLabel": "2025",
"prevSeasonValue": 4.8
}

Odds (dataset: odds) — the de-vig block is always included:

{
"gameId": "patriots-seahawks-week-1-2026",
"date": "2026-09-09",
"startTimeLabel": "8:20 PM EST",
"awayTeam": "New England",
"homeTeam": "Seattle",
"spreadLabel": "Spread",
"awaySpread": 3.5,
"homeSpread": -3.5,
"total": 44.5,
"awayMoneyLine": 157,
"homeMoneyLine": -188,
"awayImpliedProb": 0.3891,
"homeImpliedProb": 0.6528,
"moneyLineHold": 0.041883,
"awayFairProb": 0.373463,
"homeFairProb": 0.626537,
"favorite": "Seattle"
}

Team profiles (dataset: team-profiles) — 162 game-log entries for a full MLB season:

{
"team": "Milwaukee Brewers",
"standingsSummary": "1st Place, NL Central",
"recordText": "81-50",
"predictiveRank": 3,
"streak": "L1",
"gameLogCount": 162,
"gameLog": [
{
"date": "03/26",
"dateIso": "2026-03-26T18:10:00.000Z",
"opponent": "Chi Sox",
"result": "W 14-2",
"location": "Home",
"closingSpread": "-1.5",
"closingSpreadPrice": "+114",
"closingTotal": "Ov 7.5",
"closingMoneyLine": "-194"
}
],
"powerRatings": [{ "rating": "Predictive", "pointsAboveAverage": 0.65 }],
"keyStats": [{ "side": "offense", "stat": "Win % - All", "value": 0.618 }]
}

Configure the run

SettingWhat it does
LeagueNFL, NBA, MLB, WNBA, NCAA Basketball, NCAA Football.
DatasetWhich of the eleven surfaces to pull. Each bills its own per-row event.
Specific pagesSlugs to fetch for rankings / team stats / player stats. Empty means every page the league publishes, capped by Max pages.
Stat categoriesTake a whole category instead — Rushing Defense, Team Pitching, Shooting. Ignored when Specific pages is set.
Historical snapshot dateYYYY-MM-DD. Rebuilds rankings and team stats as of that day.
Schedule viewToday's slate, or the full season.
Projection viewProjected standings, or MLB postseason seed odds.
Trend types / situations / seasonWin, ATS and over/under across 26 situations, any season back to 2007.
Odds history / movement viewWhich historical study to pull. Not published for MLB.
Teams, rank, value, searchFilters, applied to the full row before optional blocks are fetched.
Five matchup checkboxesLine movement, power ratings, head to head, injuries, matchup trends. Off by default.
Max items / Max pagesHard caps on rows written and pages fetched.
Concurrency5 by default. See the throttling note below before raising it.
ProxyOff by default. Worth turning on for full-league sweeps.

About throttling

TeamRankings serves ordinary runs without complaint — measured 25 sequential and 24 concurrent requests with no rate limiting, and a full 226-page NFL stat sweep completed on Apify with no throttling at all.

It can throttle a single IP that keeps sweeping. From one workstation running repeated back-to-back sweeps we tripped an HTTP 403 that lasted minutes, not seconds. The Actor treats 403 as a throttle rather than a failure and waits it out with a long backoff, because dropping an index page would silently lose every row behind it. If it ever has to give up on a page, it says so in the run log.

Practically: leave Concurrency at 5, and if you are sweeping a whole league repeatedly on a schedule, turn the proxy on.

Pricing

Pay-per-event. You are billed per row written, plus a small charge for each source page fetched and a $0.054 run-start fee. Filtered-out rows cost nothing.

EventPriceWhen it fires
Run start$0.054Once per run
Page scan$0.008Each source page or index fetched
Ranking row$0.007rankings
Team stat row$0.007team-stats
Player stat row$0.007player-stats
Game odds$0.007odds
Schedule game$0.006schedule
Standings row$0.006standings
Projection row$0.012projections
Trend row$0.008trends
Team profile$0.015team-profiles, one per team page with its full game log
Odds history row$0.010odds-history
Odds movement row$0.010odds-movement
Line movement$0.020Checkbox on, per game — three extra requests
Matchup power ratings$0.012Checkbox on, per game
Head to head$0.014Checkbox on, per game
Injury report$0.010Checkbox on, per game — not billed when both teams report no injuries
Matchup trends$0.010Checkbox on, per game

Exactly one per-row event fires on any given run — the one for the dataset you picked.

Rows collectedApproximate cost (rankings / team stats)
100$0.79
1,000$7.31
10,000$72.60

The five matchup blocks are off by default. A run that leaves them off pays only the run-start fee, one page scan per page fetched, and the per-row rate for its dataset.

Free users

Apify's free plan caps what any paid Actor can bill in a month. If a run stops early with a usage message, that is the plan cap, not this Actor.

Separately, Apify gives every run a maximum cost derived from your remaining allowance, and aborts the run when it reaches it — the run's status message names the figure. A full-league sweep is large enough to hit that on a small plan. Set Max items to keep a run inside a budget you choose, and it will finish cleanly instead of being aborted.

Run it

  1. Pick a League and a Dataset.
  2. Optionally narrow with Specific pages or Stat categories, or set a Historical snapshot date.
  3. Set Max items if you want a hard ceiling on cost.
  4. Run, then export from the dataset as CSV, JSON, Excel or XML — or pull it from the API.

The default input — NFL power rankings — returns 736 rows from 23 ranking pages in about three seconds.

Troubleshooting

"No stat pages found" or an empty result. The index page was throttled. The log says so explicitly and distinguishes it from a genuinely empty page. Wait a minute, lower Concurrency, or enable the proxy.

The odds board is empty. That league is between seasons. NBA and NCAA basketball boards are empty through the summer; NFL and NCAA football through the spring. The log says so explicitly.

A ranking's rating is null. The season has not started, so TeamRankings has not published that rating yet. The row still carries the team, its rank and its record. This is the site's state, not a parse failure — see the note on sort attributes above.

odds-history or odds-movement returned nothing for MLB. Those studies are built on the point spread and TeamRankings does not publish them for baseball. The log warns and the run ends cleanly.

Postseason seeds came back as projected standings. Only MLB publishes seed projections. For any other league the Actor falls back to projected standings and warns.

A slug came back missing. Slugs differ by league — NFL has points-per-game, MLB has runs-per-game. The log lists which requested slugs that league does not publish. Leave Specific pages empty to see everything available.

FAQ

Does it need a login or an API key? No. Every surface used here is public and anonymous.

Does it need a proxy? No. A full 226-page sweep ran clean on Apify without one. Turn it on only if you are sweeping a whole league repeatedly from the same IP.

How far back does the history go? Rankings and team stats accept any date the site has a snapshot for, which is years. Trends accept any season back to 2007. Head-to-head histories start at 2007.

Why is there no NHL? TeamRankings does not cover hockey; the URL redirects to the home page.

Can I get every stat for a league in one run? Yes — leave Specific pages empty and raise Max pages to the league's count (226 for NFL). That run returned 7,232 rows. Watch your Max items on a sweep that size so the run finishes rather than hitting the per-run cost cap.

Is the data live? Odds are the current board as TeamRankings publishes it. Ratings and stats update daily.