Sports Data Scraper: 11 Sports, 25 Leagues, One Table avatar

Sports Data Scraper: 11 Sports, 25 Leagues, One Table

Pricing

from $0.50 / 1,000 row returneds

Go to Apify Store
Sports Data Scraper: 11 Sports, 25 Leagues, One Table

Sports Data Scraper: 11 Sports, 25 Leagues, One Table

[$3.00 / 1K] Games, live scores, league tables, teams, rosters, schedules and news for MLB, NBA, NHL, NFL, UFC, F1, golf, tennis, soccer, cricket and more, in one schema. Date ranges are split into days so a whole week comes back in one run. Changes only since your last run.

Pricing

from $0.50 / 1,000 row returneds

Rating

0.0

(0)

Developer

deriverge s.r.o.

deriverge s.r.o.

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Sports Data Scraper

What does Sports Data Scraper do?

Sports Data Scraper returns games, live scores, league tables, teams, rosters, schedules and news for 11 sports and 25 leagues in one schema. Baseball, basketball, ice hockey, American football, soccer, tennis, golf, motorsport, MMA, cricket and lacrosse, all as the same table, so a query can be sorted by start time across sports without writing glue code for each one.

No browser, no proxies, no API key. The data comes from a public JSON interface, which keeps runs fast and cheap.

Every sport, one table

Eleven sports have eleven vocabularies. Baseball counts innings, soccer counts halves, golf counts rounds, an MMA bout has no score at all. This actor normalises them:

SportLeague keysOne row is
Baseballmlba game
Basketballnba, wnba, ncaab, gleaguea game
Ice hockeynhla game
American footballnfl, ncaafa game
Soccerepl, laliga, bundesliga, seriea, ligue1, mls, ucla game
Tennisatp, wtaa match inside the tournament
Golfpga, lpgaa player on the leaderboard
Motorsportf1, indycara race
MMAufc, pflan event with its fighters
Cricketcricket-worldcupa match
Lacrossenlla game

A tennis tournament is not one row with a hundred matches hidden inside it, and a golf tournament is not one row with the whole field hidden inside it. That is the difference between a table you can query and a blob you have to unpack.

Past the one-day limit

The source answers one day per request. Every other scraper in this category passes that limit on to you, so a week of fixtures means seven runs and seven result sets to merge.

Give this actor a dateFrom and a dateTo and it splits the range into day-sized queries, runs them all and merges the results, deduplicated by game. Measured on 21 September 2026 for Major League Baseball:

QueryRows returned
One request, one day15
13 to 14 September as a range25

Ranges longer than 120 days are cut at 120, so a typo in a date cannot run up a bill.

Only what changed

Turn on newOnly, give the run a watch name or save it as a task, and schedule it. Every run compares its results with the previous snapshot and returns only the rows that are new or whose status or score moved. A live-score feed that bills for real changes rather than for re-reading the same finished games.

The CHANGES record lists what appeared, what disappeared and what moved. Comparison itself costs nothing.

Input

{
"leagues": ["mlb", "nfl"],
"mode": "scoreboard",
"dateFrom": "2026-09-13",
"dateTo": "2026-09-14",
"statusFilter": "all",
"includeGameDetail": false,
"newOnly": true,
"watchKey": "my-league",
"maxItems": 2000
}

Modes: scoreboard for fixtures and results, standings for the league table, teams for the clubs, roster and schedule for a team or for every team in the league, news for the league feed.

Output

{
"key": "espn:nfl:401872963",
"type": "game",
"sport": "americanfootball",
"league": "nfl",
"leagueName": "National Football League",
"gameId": "401872963",
"name": "Philadelphia Eagles at Chicago Bears",
"startsAt": "2026-09-29T00:15:00.000Z",
"status": "pre",
"statusDetail": "Mon, September 28th at 8:15 PM EDT",
"home": { "name": "Chicago Bears", "shortName": "CHI", "score": 0, "record": "1-1" },
"away": { "name": "Philadelphia Eagles", "shortName": "PHI", "score": 0, "record": "2-0" },
"venue": { "name": "Soldier Field", "city": "Chicago", "state": "IL", "country": "USA", "indoor": false },
"broadcasts": ["ESPN", "ABC"],
"odds": { "provider": "DraftKings", "details": "PHI -4.5", "overUnder": 43.5, "spread": 4.5 },
"url": "https://www.espn.com/nfl/game/_/gameId/401872963/eagles-bears"
}

Betting lines come with the fixture when the source publishes them, which is normally for games that have not started. Fields a sport does not have are null, never a guessed value.

What it does not collect

No contact details, no email addresses, no social handles, and nothing about private individuals. Athlete rows carry only what the league itself publishes about a professional in their professional role: name, team, shirt number, position, listed height and weight, and the public injury status.

Pricing

EventPrice
Row returned$0.003, falling to $0.0015 on higher plans
Box score, injuries and last play, only when requested$0.002
Rows removed by the status filter, rows unchanged in change mode, days that returned nothingfree

No start fee. A run that returns nothing costs nothing.

Frequently asked questions

How current is it? Read live at run time. A game in progress comes back with its current score, period and clock.

Can I get the full box score? Turn on includeGameDetail and every game gains team statistics, the injury list, headlines and the last play. It costs one extra request per game and is billed as a separate event, so it stays off by default.

Why does a Formula 1 race have no participants? The source does not publish the field on the race listing, so the row is the race itself: name, circuit, date and status. Guessing a grid would be worse than leaving it out.

How do I find a team identifier? Run the teams mode once for the league. Every row has the identifier and the abbreviation, which are what the roster and schedule modes accept.

Which leagues can I combine in one run? Any of them. Pass several keys in leagues and the results come back in one table with the league on every row.

How to use Sports Data Scraper

  1. Open the actor and pick a league and a mode in the input form, or paste the JSON input from the example above.
  2. Click Start. The first rows appear in the Output tab within seconds; the run summary is in the Storage tab under the key SUMMARY.
  3. Download the results as JSON, CSV or Excel from the Output tab, or read them through the API link shown there.
  4. To run it on a schedule, click Save as a task, set the input once and add a schedule. Scheduled tasks keep their own change snapshot, so the change mode works without any extra setup.

Integrations

The actor is available in the Apify apps for Make, Zapier, n8n and Keboola, where you pick it by name and map the input fields. It is also exposed to AI agents through the Apify MCP server, and callable from any language through the Apify API; the API tab on this page has ready-made snippets for Node.js, Python and curl. Every run can post its results to a webhook when it finishes.

Support

Questions and problems go into the Issues tab of this actor. Each issue is answered by the maintainer, and fixes ship as new builds without any change on your side.

Built and operated by deriverge s.r.o. Same rules as our other actors: unified schema, honest billing, no charge for what you did not get.