Sports Data Scraper: 11 Sports, 25 Leagues, One Table
Pricing
from $0.50 / 1,000 row returneds
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.
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
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:
| Sport | League keys | One row is |
|---|---|---|
| Baseball | mlb | a game |
| Basketball | nba, wnba, ncaab, gleague | a game |
| Ice hockey | nhl | a game |
| American football | nfl, ncaaf | a game |
| Soccer | epl, laliga, bundesliga, seriea, ligue1, mls, ucl | a game |
| Tennis | atp, wta | a match inside the tournament |
| Golf | pga, lpga | a player on the leaderboard |
| Motorsport | f1, indycar | a race |
| MMA | ufc, pfl | an event with its fighters |
| Cricket | cricket-worldcup | a match |
| Lacrosse | nll | a 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:
| Query | Rows returned |
|---|---|
| One request, one day | 15 |
| 13 to 14 September as a range | 25 |
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
| Event | Price |
|---|---|
| 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 nothing | free |
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
- Open the actor and pick a league and a mode in the input form, or paste the JSON input from the example above.
- Click Start. The first rows appear in the Output tab within seconds; the run summary is in the Storage tab under the key
SUMMARY. - Download the results as JSON, CSV or Excel from the Output tab, or read them through the API link shown there.
- 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.