NCAA API - College Sports
Pricing
from $0.01 / 1,000 results
NCAA API - College Sports
Fetch comprehensive NCAA college sports data including basketball rankings, football standings, team rosters, player statistics, and game schedules for all divisions. Basketball Data & Football Data Teams Rankings Schedule Scores Standings
Pricing
from $0.01 / 1,000 results
Rating
0.0
(0)
Developer
The Howlers
Maintained by CommunityActor stats
0
Bookmarked
26
Total users
1
Monthly active users
2.6 hours
Issues response
3 days ago
Last modified
Categories
Share
NCAA API - College Sports Data
The most comprehensive NCAA data actor on Apify. 8 sports, 25+ tasks, betting odds with arbitrage detection, live score polling, recruiting rankings, bracket projections, and CSV export. Powered by ESPN + The Odds API.
Sports Covered
Basketball, Football, Baseball, Hockey, Lacrosse, Volleyball, Softball, Soccer — men's and women's.
All Tasks
Core Data (all sports)
| Task Pattern | Example | What It Returns |
|---|---|---|
{sport}_teams | basketball_teams | All teams with IDs, conference, logo |
{sport}_scores | football_scores | Live and final scores |
{sport}_standings | baseball_standings | Conference standings |
{sport}_rankings | basketball_rankings | AP/Coaches Poll rankings |
{sport}_schedule | football_schedule | Game schedules with TV info |
Team & Player
| Task | Requires |
|---|---|
team_roster | teamId |
player_stats | playerId |
injury_report | — |
conference_teams | conference |
team_schedule | teamId |
head_to_head | teamId + teamId2 |
Betting & Arbitrage
| Task | Requires |
|---|---|
betting_odds | oddsApiKey |
betting_odds_history | oddsApiKey + oddsGameId |
arbitrage_finder | oddsApiKey |
Live & Alerts
| Task | Requires |
|---|---|
live_scores | webhookUrl |
alerts | webhookUrl (+ oddsApiKey for odds alerts) |
Recruiting & Brackets
| Task |
|---|
recruiting_rankings |
bracket_projections |
Pricing
You pay Apify's actor start fee per run (see the Pricing tab), plus these per-task events:
| Event | When it is charged | Price |
|---|---|---|
| Actor start | Once when the run starts, one event per GB of memory (minimum one). At the default 1 GB of memory that is $0.10 per run | $0.10 per GB |
| NCAA Basketball Teams | Fetch Division I basketball teams | $0.001 |
| NCAA Basketball Rankings | Get AP Top 25 and other polls | $0.002 |
| NCAA Basketball Schedule | Fetch games for a specific date | $0.002 |
| NCAA Basketball Standings | Get conference standings | $0.002 |
| NCAA Football Teams | Fetch FBS football teams | $0.001 |
| NCAA Football Rankings | Get CFP rankings and polls | $0.002 |
| NCAA Football Schedule | Fetch games by week | $0.002 |
| NCAA Football Standings | Get conference standings | $0.002 |
| NCAA Team Roster | Get roster for a specific team | $0.002 |
| NCAA Player Stats | Fetch player statistics | $0.002 |
| Result | Each item written to the default dataset | $0.00001 |
All other tasks have no per-task charge. Each dataset row costs $0.00001. Demo mode is free.
Seasons
Leave season empty to get the current season (recommended). ESPN numbers basketball and other winter sports by the year the season ends: 2027 = 2026-27, 2026 = 2025-26. Football uses the year it is played: 2026 = the 2026 season. Roster rows include a seasonLabel field (for example 2026-27) so you can confirm which season you got.
Output layout
By default every record is its own dataset row (one row per player, team or game), so table, CSV and Excel exports show everything. Each row repeats the request context (task, sport, teamId, season). Set datasetLayout to single_item for the older shape: one row per task with all records nested in data.
Examples
Get Basketball Rankings
{ "task": "basketball_rankings", "demoMode": false }
Multi-Task Batch (one run, multiple results)
{ "tasks": ["basketball_rankings", "basketball_scores", "football_standings"], "demoMode": false }
Get All SEC Football Teams
{ "task": "conference_teams", "sport": "football", "conference": "SEC", "demoMode": false }
Head-to-Head: Duke vs UNC
{ "task": "head_to_head", "sport": "basketball", "teamId": "150", "teamId2": "153", "demoMode": false }
Returns series record, win counts, and all games between the two teams this season.
Baseball Scores
{ "task": "baseball_scores", "demoMode": false }
Women's Volleyball Teams
{ "task": "volleyball_teams", "gender": "womens", "demoMode": false }
Betting Odds with Best Lines
{ "task": "betting_odds", "sport": "basketball", "oddsApiKey": "YOUR_KEY", "demoMode": false }
Every game includes bestLines — the best spread, moneyline, and total across DraftKings, FanDuel, BetMGM, etc.
Filter Odds by Team
{ "task": "betting_odds", "oddsApiKey": "YOUR_KEY", "oddsTeamFilter": "Duke", "demoMode": false }
Arbitrage Finder
{ "task": "arbitrage_finder", "sport": "basketball", "oddsApiKey": "YOUR_KEY", "demoMode": false }
Scans all games across all bookmakers. Returns profitable arb opportunities sorted by profit %, with exact stake percentages:
{"type": "moneyline","game": "Duke vs Houston","profitPercent": 1.23,"legs": [{ "team": "Duke", "odds": -145, "bookmaker": "FanDuel", "stakePercent": 52.3 },{ "team": "Houston", "odds": 155, "bookmaker": "DraftKings", "stakePercent": 47.7 }]}
Checks moneylines, spreads, AND totals for arb opportunities.
Live Score Polling
{"task": "live_scores", "sport": "basketball","webhookUrl": "https://hooks.zapier.com/hooks/catch/123/abc/","livePollingSeconds": 30, "liveMaxDuration": 600,"demoMode": false}
Alerts: Odds Movement
{"task": "alerts", "sport": "basketball","oddsApiKey": "YOUR_KEY","webhookUrl": "https://your-webhook.com/alerts","alertType": "odds_movement", "alertThreshold": 2,"alertPollingSeconds": 60, "alertMaxDuration": 600,"demoMode": false}
Monitors spread changes. When a spread moves 2+ points, pushes alert to your webhook.
Alerts: Upset Detection
{"task": "alerts", "sport": "basketball","webhookUrl": "https://your-webhook.com/alerts","alertType": "upset","demoMode": false}
Recruiting Rankings
Best results with a Firecrawl key (scrapes 247Sports for detailed data):
{ "task": "recruiting_rankings", "sport": "football", "season": 2026, "firecrawlApiKey": "fc-YOUR_KEY", "demoMode": false }
Without Firecrawl, falls back to ESPN's talent composite (less detailed):
{ "task": "recruiting_rankings", "sport": "football", "season": 2026, "demoMode": false }
Bracket Projections
{ "task": "bracket_projections", "sport": "basketball", "demoMode": false }
Returns NET rankings (bracket indicator) during March Madness, CFP rankings during football season.
CSV Export
{ "task": "basketball_rankings", "outputFormat": "csv", "demoMode": false }
CSV files are saved to the actor's Key-Value Store as {task}.csv. JSON results are always in the dataset.
Performance & Reliability
- 15-min cache on ESPN responses via Apify KV Store. Identical requests within 15 min hit cache instantly. Betting odds and live scores always fetch fresh data.
- Rate limiting — 200ms delay between ESPN API calls when running batched tasks. This keeps us under ESPN's rate limits and prevents your runs from getting throttled. You'll see "Rate limiting: 200ms between tasks" in the logs.
- Batching — run multiple tasks in one actor call to save on Apify platform startup costs.
- CSV export — set
outputFormat: "csv"and CSV files are saved to the Key-Value Store alongside JSON. - Conference fallback — ESPN's API doesn't always return conference data. We hardcode D1 basketball and football conference-to-team mappings as a fallback so conference filtering works reliably.
Data Sources
| Source | Used For | Auth | Notes |
|---|---|---|---|
ESPN (site.api.espn.com) | All sports data | None needed | Public API, no key required |
The Odds API (api.the-odds-api.com) | Betting odds, arbitrage | Free key (500 req/month) | Used by betting_odds, betting_odds_history, arbitrage_finder |
| 247Sports (via Firecrawl) | Recruiting rankings | Optional Firecrawl key | Used by recruiting_rankings for detailed team recruiting class data. Without it, falls back to ESPN (less detailed). Free key at firecrawl.dev. |
FAQ
Why does team_roster show last season's players?
It no longer does: with season empty you get ESPN's current roster. If you set season, remember basketball uses the year the season ends (2027 for 2026-27).
Why does soccer_teams / lacrosse_teams / softball_teams return 0?
ESPN's team listing API doesn't serve data for these three sports. However, *_scores tasks for these sports DO work during their active seasons (ESPN has scoreboard data even without team listings). Full team listing support for these sports is on our roadmap — we plan to build it by extracting team data from scoreboards and caching it.
How do I use conference filters?
Both abbreviations and full names work: "ACC", "SEC", "Big Ten", "Mountain West", "Atlantic Coast Conference" — all valid. We map 35+ conference abbreviations to full names automatically.
How do bracket projections work?
Best with a firecrawlApiKey — we scrape ESPN's Bracketology page for real seed projections during March Madness, and CFP rankings during football season. Without Firecrawl, we fall back to ESPN's rankings API (AP/Coaches polls only, no bracket-specific data).
How do recruiting rankings work?
Best with a firecrawlApiKey — we scrape 247Sports for composite team recruiting class data (commits, points, 5-stars). Without Firecrawl, we fall back to ESPN which has limited recruiting data.
Roadmap
- Soccer, lacrosse, softball team listings — extract from scoreboard data during active seasons
- Transfer portal data — player transfer tracker
- Historical game results — multi-season archives
Built by John Rippy | Actor Arsenal