# College Recruit Rankings: On3 Cross-Source Ratings (`getascraper/college-recruiting-rankings-scraper`) Actor

Scrapes On3.com recruit rankings with On3, 247Sports, ESPN, and Rivals star ratings shown side by side per player, plus a computed rating-agreement-spread score. Filter by state, position, star tier, and committed school. Includes NIL valuations and incremental ranking-change monitoring.

- **URL**: https://apify.com/getascraper/college-recruiting-rankings-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Sports, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.32 / 1,000 recruit rankings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 🏈 College Football Recruiting Rankings Scraper: Cross-Source Ratings & NIL

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#FBEDEF;border:1px solid #E8C4C9;border-top:4px solid #7A1F2B;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Get every recruit's On3, 247Sports, ESPN, and Rivals rating side by side, ready for your spreadsheet in under 60 seconds.</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Live On3 college football recruiting rankings with real NIL valuations and a computed rating agreement spread showing exactly where scouts disagree.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #E8C4C9;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#7A1F2B">🔀 Cross-source ratings</span><br>
<span style="font-size:12px;color:#57534E">See On3, 247Sports, ESPN, and Rivals rate the same recruit, side by side, with the gap between them scored.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #E8C4C9;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#7A1F2B">💰 Real NIL valuations</span><br>
<span style="font-size:12px;color:#57534E">Published NIL dollar estimates included when On3 has them, never left blank as a stand-in for missing data.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #E8C4C9;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#7A1F2B">🎯 Structured filters</span><br>
<span style="font-size:12px;color:#57534E">Narrow by state, position, star tier, commitment status, or recruiting interest before you ever open a spreadsheet.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #E8C4C9;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#7A1F2B">🆕 Ranking movement feed</span><br>
<span style="font-size:12px;color:#57534E">Schedule runs to catch new entrants, rating changes, and commits or decommits automatically.</span>
</td>
</tr>
</table>

Pull structured college football recruiting data straight from On3, the only rankings page online that reconciles ratings from multiple scouting services on the same row. Set a class year and a handful of filters, run the actor, and get a clean dataset of recruits with rank, star rating, NIL valuation, commitment status, and a full cross-source rating breakdown.

### 🔍 What does this actor do?

This actor scrapes On3's college football recruiting rankings for any class year from 2020 to 2032. Each recruit record includes name, position, height, weight, hometown, high school, and state, plus On3's own national, position, and state rank and star rating.

What sets this actor apart is the per-source rating breakdown. On3's own ranking page independently lists how On3 Industry, On3 Consensus, 247Sports, ESPN, and Rivals each rate the same player, with each source's own stars, numeric rating, and national/position/state rank. This actor extracts all of it into one row per recruit, plus a computed rating agreement spread showing how far apart the sources land on a given player. One important note on sourcing: Rivals.com itself is not fetched directly, its own site policy disallows AI crawlers. The Rivals ratings that appear in this dataset are the ones On3 already publishes on its own page, with attribution to the Rivals profile.

Commitment tracking covers commitment status, committed school, commitment date, and signed, enrolled, and transfer flags. NIL (Name, Image, Likeness) valuation is included in US dollars whenever On3 publishes one for that recruit, real numbers only, never a fabricated placeholder. On3's own "predicted schools" data is included too, clearly labeled as a prediction rather than a confirmed offer, since no source in scope publishes a verified list of school offers.

An optional monitoring mode compares each run against the previous one and flags recruits who are new to the rankings or whose rank, star rating, or committed school changed, so a scheduled run can double as a recruiting movement alert feed.

### 🎯 Who uses this

- **I am a recruiting analyst covering signing day** and I need to compare how On3, 247Sports, ESPN, and Rivals rate the same recruit without opening four separate tabs, so I can write with real cross-source context instead of quoting one service's opinion.
- **I am part of an NIL collective evaluating recruits** for valuation and negotiation, and I need real published NIL numbers alongside consensus star ratings in one dataset, not four sources scraped and merged by hand.
- **I am a college football fan building my own recruiting tracker**, and I want to see which recruits are trending up in the rankings and who just committed, without refreshing four different ranking sites every day.

### 🚀 How to use it

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#FBEDEF;border:1px solid #E8C4C9;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#7A1F2B;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Set your class year and filters</span><br>
<span style="font-size:12px;color:#57534E">Pick a recruiting class year (2020 to 2032) plus optional state, position, star tier, or commitment filters.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FBEDEF;border:1px solid #E8C4C9;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#7A1F2B;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Run the actor</span><br>
<span style="font-size:12px;color:#57534E">On3's rankings are fetched and every recruit's cross-source ratings, NIL data, and commitment status are extracted.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FBEDEF;border:1px solid #E8C4C9;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#7A1F2B;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Get your dataset</span><br>
<span style="font-size:12px;color:#57534E">Export as JSON, CSV, or Excel, or connect it to Sheets, Zapier, or Make.</span>
</td>
</tr>
</table>

### ⚙️ Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `classYear` | integer | No | The high school recruiting class to scrape, for example 2027 for the class currently being recruited. Defaults to 2027. |
| `maxPages` | integer | No | Upper bound on how many paginated ranking pages (50 recruits each) are fetched before stopping. Defaults to 20. |
| `states` | array of strings | No | Only include recruits whose high school state matches one of the selected two-letter state codes. Leave empty to include all states. |
| `positions` | enum | No | Only include recruits at one or more selected positions (QB, RB, WR, EDGE, CB, and the rest of the standard position list). Leave empty to include all positions. |
| `minStars` | integer | No | Only include recruits rated at least this many stars on On3's own star tier. 0 disables this filter. |
| `committedSchool` | string | No | Only include recruits whose committed program name or slug contains this text, for example "ohio-state". Case-insensitive. Leave blank to include all. |
| `uncommittedOnly` | boolean | No | Only include recruits who have not yet committed to a school. Defaults to false. |
| `minInterestCount` | integer | No | Only include recruits with at least this many programs shown as recruiting interest on On3. This reflects On3's tracked recruiting interest, not a confirmed list of school offers. Defaults to 0. |
| `includeSourceRatings` | boolean | No | Include the per-source rating breakdown (On3, 247Sports, ESPN, Rivals, Consensus) and the computed rating agreement spread for each recruit. Turn off only to shrink dataset size. Defaults to true. |
| `includeNilValuation` | boolean | No | Include On3's NIL valuation estimate in US dollars, when published for that recruit. Defaults to true. |
| `maxItems` | integer | No | Maximum number of recruit records to output. Defaults to 50. |
| `retries` | integer | No | Number of retry attempts for a failed page fetch before giving up. Defaults to 8. |
| `onlyNewOrChanged` | boolean | No | Skip recruits whose national rank, star rating, and committed school are unchanged since the previous run under the same state key. Pair with a schedule to build a ranking movement feed. Defaults to false. |
| `resetSeenBaseline` | boolean | No | Clear the stored baseline for this state key before this run, so the next run's `onlyNewOrChanged` comparison starts fresh. Defaults to false. |
| `stateKey` | string | No | Namespace for the monitoring baseline, useful when running multiple watch configurations from the same actor. Defaults to `college-recruiting-default`. |
| `proxyConfiguration` | object | No | Proxy settings. On3 requires the Unblocker proxy group to get past its anti-bot check; the default is already set correctly and should not be changed. |

### 📊 Data table

| Field | Type | Description |
| --- | --- | --- |
| `player_key` | string | Stable identifier for the recruit used to track changes across runs. |
| `name` | string | Recruit's full name. |
| `position` | string | Position abbreviation, for example QB, WR, EDGE. |
| `class_year` | number | Recruiting class year. |
| `height_formatted` | string | Height in feet and inches, for example 6'3". |
| `height_inches` | number | Height in total inches. |
| `weight_lbs` | number | Weight in pounds. |
| `hometown` | string | Recruit's hometown. |
| `high_school` | string | High school name. |
| `state` | string | Two-letter state code of the high school. |
| `national_rank` | number | On3's overall national rank for the class. |
| `position_rank` | number | On3's rank within the recruit's position group. |
| `state_rank` | number | On3's rank within the recruit's state. |
| `stars` | number | On3 Industry star rating (1 to 5). |
| `rating_score` | number | On3 Industry numeric rating score. |
| `is_five_star_plus` | boolean | True if the recruit is rated 5 stars. |
| `is_committed` | boolean | True if the recruit has committed to a school. |
| `committed_school` | string | Name or slug of the committed school, when applicable. |
| `commitment_date` | string | Date the recruit committed, when known. |
| `is_signed` | boolean | True if the recruit has signed a National Letter of Intent. |
| `is_enrolled` | boolean | True if the recruit has already enrolled. |
| `is_transfer` | boolean | True if the record reflects a transfer rather than a high school recruit. |
| `nil_valuation_usd` | number | On3's published NIL valuation estimate in US dollars, when available. |
| `recruiting_interest_count` | number | Count of programs On3 tracks as showing recruiting interest in this player. |
| `predicted_schools` | array | On3's own crystal-ball predictions for where the recruit will commit or sign. A prediction, not a confirmed offer or commitment. |
| `source_ratings` | array | Per-source rating breakdown: source name, stars, rating, national rank, position rank, state rank, and profile URL for On3 Industry, On3 Consensus, 247Sports, ESPN, and Rivals. |
| `rating_agreement_spread` | number | Computed spread showing how much the star ratings disagree across sources for this recruit. |
| `profile_url` | string | Link to the recruit's On3 profile page. |
| `is_new` | boolean | True if this recruit was not present in the previous monitored run (monitoring mode only). |
| `is_changed` | boolean | True if rank, star rating, or committed school changed since the previous monitored run (monitoring mode only). |
| `scraped_at` | string | Timestamp this record was scraped. |
| `first_seen_at` | string | Timestamp this recruit was first seen under the current state key (monitoring mode only). |

### 💰 Pricing

Pricing is pay per result and is billed per recruit record successfully saved to your dataset. Empty runs cost nothing, and there are no fixed monthly subscriptions or hidden fees.

### ⭐ Enjoying College Football Recruiting Rankings Scraper?

<table width="100%">
<tr>
<td style="padding:20px 24px 14px;background:#FBEDEF;border:1px solid #E8C4C9;border-left:5px solid #7A1F2B;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">If this saved you from stitching together four separate recruiting sources by hand, a rating helps other analysts find it.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other recruiting analysts and NIL evaluators find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#7A1F2B;border:1px solid #E8C4C9;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/devansh-365/college-recruiting-rankings-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this actor on Apify</a>
</td>
</tr>
</table>

### ❓ FAQ

##### Does it get blocked by On3's anti-bot protection?

On3.com runs a genuine bot-challenge check on every request. This actor routes through a proxy group built specifically to solve that kind of challenge, so runs get through reliably without you needing to configure anything.

##### Does it scrape Rivals.com directly?

No. Rivals' own site policy disallows AI crawlers, so this actor never fetches rivals.com. The Rivals star ratings that appear in the `source_ratings` field come from On3's own published ranking page, where On3 independently lists Rivals' rating for each recruit with attribution back to the Rivals profile.

##### How fresh is the data?

Every run fetches the live On3 recruiting rankings page at request time. There is no cached or delayed data involved. Pair the actor with a schedule and `onlyNewOrChanged` to get a running feed of rank, rating, and commitment changes.

##### Are all classes and positions supported?

Yes. Any recruiting class year from 2020 to 2032 is supported, and every standard football position from quarterback to long snapper can be filtered on individually or left unfiltered to pull the full board.

### 🔗 Other actors

- [ESPN News Monitor: Keyword Alerts](https://apify.com/devansh-365/espn-news-monitor) ↗ - Tracks public ESPN articles about teams, athletes, and topics, with a scheduled monitoring mode.
- [SofaScore Scraper: Live scores, stats and fixtures](https://apify.com/devansh-365/sofascore-live-events-scraper) ↗ - Pulls live scores, stats, and fixtures across major sports.
- [Cricket Data API: ESPNcricinfo StatsGuru Export](https://apify.com/devansh-365/espncricinfo-statsguru-scraper) ↗ - Exports structured player and match statistics from ESPNcricinfo's StatsGuru tool.
- [Equibase Horse Racing Scraper: Odds & Payouts](https://apify.com/devansh-365/equibase-us-horse-racing-scraper) ↗ - Scrapes race results, odds, and payouts from Equibase.

# Actor input Schema

## `classYear` (type: `integer`):

The high school recruiting class to scrape (e.g. 2027 for the class currently being recruited). On3 publishes rankings for the active class plus several years ahead/behind.

## `maxPages` (type: `integer`):

Upper bound on how many paginated On3 ranking pages (50 players/page) are fetched before stopping.

## `states` (type: `array`):

Only include recruits whose high school state matches one of the selected two-letter state codes. Leave empty to include all states.

## `positions` (type: `array`):

Only include recruits at one of the selected positions. Leave empty to include all positions.

## `minStars` (type: `integer`):

Only include recruits rated at least this many stars (On3's own star tier). 0 disables this filter.

## `committedSchool` (type: `string`):

Only include recruits whose committed program slug/name contains this text (e.g. "ohio-state", "georgia"). Case-insensitive. Leave blank to include all.

## `uncommittedOnly` (type: `boolean`):

Only include recruits who have not yet committed to a school.

## `minInterestCount` (type: `integer`):

Only include recruits with at least this many programs shown as recruiting interest on On3 (On3's `interestCount` field). Note: this reflects On3's tracked recruiting interest, not a confirmed list of official scholarship offers -- no site in this Actor's scope publishes a distinct, verifiable offer list, so this field is not fabricated as one.

## `includeSourceRatings` (type: `boolean`):

Include the per-vendor rating breakdown (On3, 247Sports, ESPN, Rivals, Consensus) and the computed rating-agreement spread for each recruit. This is the Actor's headline differentiator -- turn off only to shrink dataset size.

## `includeNilValuation` (type: `boolean`):

Include On3's NIL (Name, Image, Likeness) valuation estimate in USD, when published for that recruit.

## `maxItems` (type: `integer`):

Maximum number of recruit records to output.

## `retries` (type: `integer`):

Number of retry attempts for a failed page fetch before giving up. On3.com's anti-bot challenge only sometimes resolves per attempt, so a higher default than usual is used.

## `onlyNewOrChanged` (type: `boolean`):

Skip recruits whose national rank, star rating, and committed school are unchanged since the previous run under the same State key. Pair with a schedule to build a ranking-movement feed (new entrants, rating changes, commits/decommits).

## `resetSeenBaseline` (type: `boolean`):

Clear the stored baseline for this State key before this run, so the next run's onlyNewOrChanged comparison starts fresh.

## `stateKey` (type: `string`):

Namespace for the monitoring baseline, useful when running multiple watch configurations (e.g. per class year or per state) from the same Actor.

## `proxyConfiguration` (type: `object`):

on3.com is protected by a genuine Cloudflare JS challenge (confirmed via direct testing: plain requests and both DATACENTER and RESIDENTIAL Apify proxy groups receive a 403 challenge page on every request). Only Apify's UNBLOCKER proxy group -- purpose-built to solve JS/anti-bot challenges, not just rotate IP reputation -- gets through. Do not switch this to RESIDENTIAL or DATACENTER; it will fail on the very first request.

## Actor input object example

```json
{
  "classYear": 2027,
  "maxPages": 20,
  "states": [],
  "positions": [],
  "minStars": 0,
  "uncommittedOnly": false,
  "minInterestCount": 0,
  "includeSourceRatings": true,
  "includeNilValuation": true,
  "maxItems": 50,
  "retries": 8,
  "onlyNewOrChanged": false,
  "resetSeenBaseline": false,
  "stateKey": "college-recruiting-default",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "states": [],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "UNBLOCKER"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/college-recruiting-rankings-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "states": [],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["UNBLOCKER"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/college-recruiting-rankings-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "states": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}' |
apify call getascraper/college-recruiting-rankings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/college-recruiting-rankings-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/DCQriUzO8fqtJ1Bfa/builds/hl3FYSsYoG1ggiTkd/openapi.json
