NCAA College Sports Schedules & Scores API avatar

NCAA College Sports Schedules & Scores API

Pricing

from $0.44 / 1,000 item extracteds

Go to Apify Store
NCAA College Sports Schedules & Scores API

NCAA College Sports Schedules & Scores API

Export official NCAA schedules and game results by sport, division, and date with teams, scores, state, and source URLs.

Pricing

from $0.44 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Export official NCAA schedules and completed game results by sport, division, and date. The Actor turns NCAA football scores and other public NCAA scoreboards into stable JSON rows for analysis, spreadsheets, databases, dashboards, and application ingestion.

It supports football, basketball, baseball, softball, soccer, volleyball, ice hockey, lacrosse, field hockey, water polo, and beach volleyball combinations that the official NCAA scoreboard exposes. Each row includes both teams, scores, event state, rankings and conference slugs when exposed, championship context, and official source provenance.

What this NCAA scoreboard Actor does

The Actor sends lightweight requests to NCAA's official structured scoreboard source. It normalizes each contest into one game record instead of returning HTML or a nested source response.

You can:

  • select one supported sport and division;
  • export one day or an inclusive date range of up to 31 days;
  • keep all games or only scheduled, live, or final contests;
  • filter to a school by NCAA team name or slug;
  • cap the dataset with maxItems;
  • use stable game IDs and source URLs in recurring pipelines.

The default dataset contains only accepted game rows. Empty dates, filtered-out games, malformed source objects, and duplicates are not billed as items.

Who is it for

Sports analysts can assemble repeatable game-level datasets without manually copying scoreboards.

Application developers can ingest normalized schedules and results through the Apify API, webhooks, or integrations.

Data engineers can schedule daily runs and upsert rows by gameId as events move from scheduled to live to final.

Editorial and research teams can filter one school, verify a result against its NCAA page, and export CSV or Excel from the dataset.

This Actor is deliberately narrower than products that promise rosters, player statistics, odds, or standings. Its contract is official NCAA schedule and result rows.

Why use this Actor

  • Official provenance: every row carries the NCAA game page, scoreboard page, and structured request URL.
  • Multi-sport input: use one stable contract across supported NCAA scoreboard sports.
  • Date-range ingestion: collect up to 31 consecutive scoreboard dates in one run.
  • Normalized teams: home and away teams use the same nested field shape.
  • Honest nulls: fields such as venue, broadcaster, rank, seed, and championship metadata remain null when the scoreboard does not expose them.
  • Bounded recovery: only transient timeouts, HTTP 429, and temporary server errors are retried.
  • No login or proxy required: the current route is a public official NCAA data surface.

Supported sports and divisions

Sport inputSupported division inputs
footballfbs, fcs, d2, d3
basketball-men, basketball-womend1, d2, d3
baseball, softballd1, d2, d3
soccer-men, soccer-womend1, d2, d3
fieldhockeyd1, d2, d3
volleyball-womend1, d2, d3
volleyball-mend1, d3
icehockey-men, icehockey-womend1, d3
lacrosse-men, lacrosse-womend1, d2, d3
waterpolo-men, waterpolo-womend1
beach-volleyballd1

Unsupported combinations fail with a clear input error instead of silently returning an empty dataset.

Data fields extracted

FieldMeaning
gameIdStable NCAA contest ID
sport, division, seasonYearRequested competition context
date, startTime, startTimeEpochSource schedule timing
status, statusDetailNormalized and original event state
currentPeriod, contestClockLive/final clock context when exposed
homeTeam, awayTeamName, slug, code, conference, rank, seed, score, winner
venue, broadcasterOptional presentation fields from the scoreboard
isChampionship, championshipIdChampionship context when exposed
bracketId, roundNumber, roundDescriptionTournament context when exposed
sourceUrlOfficial NCAA contest page
scoreboardUrlOfficial scoreboard page for the request
sourceApiUrlOfficial NCAA structured-data URL used
scrapedAtActor normalization timestamp

All schema fields are nullable because upstream sports records vary. Stable IDs, sport, division, and provenance are populated for every accepted row.

How to get started

  1. Open the Actor input page.
  2. Choose a sport.
  3. Select a division supported for that sport.
  4. Enter startDate as YYYY-MM-DD.
  5. Optionally add endDate, a game status, or a school filter.
  6. Set maxItems to the most game rows you need.
  7. Click Start.
  8. Open the default dataset to preview, download, or integrate the records.

A practical first run is the prefilled FBS scoreboard for 2025-09-06, filtered to final games and capped at 25 rows.

Input parameters

InputTypeDefaultNotes
sportstringfootballRequired NCAA sport slug
divisionstringfbsRequired; compatibility is validated
startDatestring2025-09-06Required YYYY-MM-DD date
endDatestringstart dateOptional, inclusive, maximum 31-day range
statusstringallall, scheduled, live, or final
schoolstringCase-insensitive substring for either team
maxItemsinteger1001–5,000 useful game rows
maxRequestRetriesinteger20–4 retries for transient failures

Example for one school:

{
"sport": "football",
"division": "fbs",
"startDate": "2025-08-23",
"status": "final",
"school": "Iowa St.",
"maxItems": 5
}

Example for a multi-day analytics import:

{
"sport": "basketball-men",
"division": "d1",
"startDate": "2025-03-20",
"endDate": "2025-03-22",
"status": "final",
"maxItems": 40
}

Output example

A current local run against the official FBS scoreboard produced this shape:

{
"recordType": "game",
"gameId": "6459205",
"sport": "football",
"division": "fbs",
"seasonYear": 2025,
"date": "2025-09-06",
"startTime": "15:30",
"startTimeEpoch": 1757187000,
"status": "final",
"statusDetail": "FINAL",
"currentPeriod": "FINAL",
"contestClock": null,
"homeTeam": {
"name": "UTSA",
"slug": "utsa",
"shortCode": "UTSA",
"conference": "american",
"rank": null,
"seed": null,
"score": 36,
"winner": false
},
"awayTeam": {
"name": "Texas St.",
"slug": "texas-st",
"shortCode": "TX ST",
"conference": "sun-belt",
"rank": null,
"seed": null,
"score": 43,
"winner": true
},
"venue": null,
"broadcaster": null,
"isChampionship": false,
"sourceUrl": "https://www.ncaa.com/game/6459205",
"scoreboardUrl": "https://www.ncaa.com/scoreboard/football/fbs/2025/09/06",
"scrapedAt": "2026-09-08T20:13:31.316Z"
}

The dataset schema also includes nullable championship, bracket, round, and source API fields omitted above for readability.

Filtering and recurring ingestion

Use status: "final" for completed score archives, scheduled for fixture feeds, and live for a snapshot of games in progress. The Actor does not poll within one run. Schedule repeated runs in Apify when you need updates.

For idempotent ingestion:

  1. use gameId as the external primary key;
  2. update the row when status, score, period, or clock changes;
  3. retain scrapedAt as the observation time;
  4. preserve sourceUrl for traceability.

A school filter matches either team's displayed NCAA name and URL slug. It is useful for team-specific exports but is not a fuzzy identity resolver.

How much does it cost to export NCAA game scores?

The Actor uses pay-per-event pricing:

  • a $0.0005 Start charge once per run;
  • an Item processed charge for each accepted game row;
  • the current BRONZE item price is $0.00074 per game, with lower item rates on higher tiers.

At BRONZE pricing, 1 game costs about $0.00124, 25 games about $0.019, and 100 games about $0.0745. Filtered-out, duplicate, empty, or malformed records do not create item charges. Apify platform compute usage is covered by the event price rather than added as a separate Actor fee.

Prices shown here will always be kept aligned with the active Actor pricing configuration.

Reliability and retry behavior

Each date maps to one official structured NCAA request. The Actor applies a 20-second timeout and validates HTTP status, content type, and the expected contests array.

It retries only:

  • network failures and timeouts;
  • HTTP 429 rate limits;
  • temporary HTTP 5xx source errors.

It does not blindly retry invalid inputs, stable 4xx responses, or unexpected response schemas. After the configured retries are exhausted, the run fails with a non-zero status so an integration does not mistake upstream failure for a valid empty day.

No residential fallback is enabled. This avoids hidden proxy transfer cost and keeps request identity simple for the public NCAA source.

Limits and known gaps

  • A single run accepts at most 31 consecutive dates and 5,000 game rows.
  • The source may revise schedules, scores, rankings, broadcasters, and event states.
  • venue is currently null because the chosen official scoreboard response does not expose a venue field.
  • Start times are returned as NCAA presents them; use startTimeEpoch for machine comparisons.
  • Empty dates are valid and produce no rows.
  • The Actor does not return standings, polls, rosters, box scores, play-by-play, odds, player statistics, or bracket structures.
  • Supported sports and divisions follow current NCAA scoreboard mappings and can change upstream.

Export to spreadsheets and data pipelines

From the dataset page you can download JSON, CSV, Excel, XML, RSS, or JSONL. Common workflows include:

  • scheduled daily export to Google Sheets;
  • webhook processing after each successful run;
  • ETL into BigQuery, Snowflake, PostgreSQL, or a data lake;
  • dashboard refreshes keyed by gameId;
  • application fixture and result ingestion through the Apify API.

Use smaller date windows for frequent updates and larger windows for bounded historical backfills.

Run with the Apify API

Replace YOUR_TOKEN with an Apify API token.

cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~ncaa-college-sports-data-api/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"sport":"football","division":"fbs","startDate":"2025-09-06","status":"final","maxItems":25}'

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/ncaa-college-sports-data-api').call({
sport: 'football',
division: 'fbs',
startDate: '2025-09-06',
status: 'final',
maxItems: 25,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("automation-lab/ncaa-college-sports-data-api").call(run_input={
"sport": "basketball-men",
"division": "d1",
"startDate": "2025-03-20",
"endDate": "2025-03-22",
"status": "final",
"maxItems": 40,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

For synchronous API use, call the run-sync-get-dataset-items endpoint when the expected range is small enough for your client timeout.

Use with MCP and AI agents

Claude Code

Add this Actor to Claude Code through Apify MCP:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/ncaa-college-sports-data-api"

Claude Desktop, Cursor, and VS Code

Claude Desktop, Cursor, and VS Code can use this HTTP MCP configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/ncaa-college-sports-data-api"
}
}
}

Example prompts:

  • “Export final NCAA FBS games for September 6, 2025, capped at 25.”
  • “Get Iowa State's official NCAA football result from August 23, 2025.”
  • “Build a JSON dataset of Division I men's basketball results from March 20 through March 22, 2025.”

Legality and responsible use

The Actor accesses public sports scoreboard data without login and does not collect private user information. NCAA names and marks belong to their respective owners.

Use the data lawfully, respect applicable source terms, avoid excessive schedules, and verify important decisions against the linked official page. A successful technical export does not grant redistribution, betting, trademark, or commercial data rights.

Troubleshooting

Why did my run return zero rows?

The date may have no games, your status may exclude every contest, or the school text may not match NCAA's displayed name or slug. Remove filters and test the same date first.

Why was my sport/division rejected?

Check the supported-combinations table. Football Division I uses fbs or fcs, while basketball uses d1.

Why did the run fail instead of returning an empty dataset?

An invalid response or exhausted upstream retry is not evidence that a day has no games. Failing protects downstream pipelines from accepting false emptiness.

Can I request more than 31 days?

Split the backfill into multiple runs or Tasks. The cap keeps request volume, timeout risk, and cost predictable.

Does the Actor need a proxy?

No. The current official endpoint works directly, and no automatic paid proxy fallback is enabled.

These Actors are complementary. Neither is used as a hidden source for this NCAA dataset.

FAQ

Is this an official NCAA API partnership?

No. The Actor normalizes public data exposed by official NCAA web properties; it is not affiliated with or endorsed by NCAA.

Are scores real-time?

Each run is a snapshot. Schedule repeated runs if your workflow needs updates while games are live.

Will venue always be available?

No. The current scoreboard payload does not expose it, so the field is null rather than inferred from another source.

Can I export future schedules?

Yes, when NCAA exposes contests for the requested date. Future data can be incomplete and may change.

Can I filter multiple schools in one run?

The current input accepts one text filter. Run separate Tasks or omit the filter and split rows downstream.

How should I detect a changed result?

Upsert by gameId and compare status, team scores, period, clock, and scrapedAt between runs.