Sportradar Match Stats Scraper — Lineups, Timeline, Players
Pricing
from $2.00 / 1,000 matches
Sportradar Match Stats Scraper — Lineups, Timeline, Players
Match statistics from Sportradar at $2 per 1,000 matches plus $1 per 1,000 data layers: lineups, timeline, team and player stats, head-to-head and form for any Sportradar match id · the same ids Betano and other bookmakers publish · no browser.
Pricing
from $2.00 / 1,000 matches
Rating
0.0
(0)
Developer
Black Falcon Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 hours ago
Last modified
Categories
Share
What does Sportradar Match Stats Scraper do?
Sportradar Match Stats Scraper reads the public match-statistics widget on sportradar.com and returns one JSON row per match. You give it Sportradar match ids. It gives you the teams, competition, kickoff, status, score, venue, referee and managers, plus the headline team statistics. Nine further data layers are switched on per run: team statistics with half splits, player statistics, lineups, the incident timeline, per-minute pressure, head to head, form, league tables and fun facts. A full match link works as an id, so the stats URL a bookmaker publishes next to a fixture can be pasted straight in. No browser.
How to use this actor
- 👉 Register for a free Apify account — no credit card required.
- 🎉 Just click Sign up free on Apify → and complete a quick signup.
- 💰 A free Apify account includes $5 in monthly credits — enough to test this actor.
- ⏳ Scrape during the free trial, with no commitment or upfront payment required.
Key features
- 🔗 Driven by the ids you already have: A bare Sportradar match id works, and so does a full match link: paste the stats URL a bookmaker publishes next to a fixture and the id is read out of it. It is the same id Betano and other books carry as
betRadarId, so an odds feed and this actor join on one key with no name matching and no lookup table in between. - 📚 Nine data layers, switched on per run: on top of the header: team statistics with first and second half splits, per-player minutes, goals, assists, saves and cards, lineups with formation, bench, substitutions and player profiles, the full incident timeline with pitch coordinates, per-minute pressure, head-to-head with a summarised record, each team's last ten matches with results, league tables and fun facts.
- 💵 You pay for what arrives: each match is one fee for the header, and each extra layer is charged once and only when it comes back with data. A fixture with no lineup published yet is delivered without one, the layer is listed on the row under
layersFailed, and it is not billed. - 📦 Compact mode: header only: match, teams, competition, kickoff, status, score and venue. Layers you asked for are still fetched and still charged, so this is an output-shape switch rather than a cost switch.
- 🧹 Empty-field stripping: drop null, empty-string, and empty-array fields from each record before push. Smaller payloads for AI agents and dashboards that already handle missing fields gracefully.
- 📤 Export anywhere: Download the dataset as JSON, CSV, or Excel from the Apify Console, or stream live via the Apify API and integrations (Make, Zapier, Google Sheets, n8n, …).
What data can you extract from sportradar.com?
Each result includes Core match fields (matchId, client, sport, competition, competitionId, season, seasonId, and round, and more). In standard mode, all fields are always present — unavailable data points are returned as null, never omitted. In compact mode, only core fields are returned.
Input
The main inputs are a result limit. Additional filters and options are available in the input schema.
Key parameters:
matchIds— Sportradar match ids, one per line. A full match link works too and is the easier way in: paste the stats link a bookmaker publishes next to a fixture (for example https://s5.sir.sportradar.com/betano/en/match/72221220) or a statshub.sportradar.com match URL, and the id is read from it. The same id is what Betano and other books carry as betRadarId. (default:[])layers— Which blocks of data to attach to each match. The header (teams, competition, kickoff, status, score, venue, referee and managers) is always included and is what the match fee covers, along with the headline team statistics once the match is under way — a fixture that has not kicked off has none to publish. Every layer you add here is fetched separately and charged separately, and only when it comes back with data. (default:["teamStats"])client— Which edition of the stats widget to read. Both serve the same match data; leave this on Betano unless a match answers only on the generic edition. (default:"betano")- ...and 4 more parameters
Input examples
Team and player statistics for two matches — Bare match ids, the two statistics layers.
→ One row per match with possession, shots, corners, fouls and cards per side, half splits, and a row per player with minutes, goals, assists, saves and cards.
{"matchIds": ["72221158","72221220"],"layers": ["teamStats","playerStats"]}
Everything about one fixture — All nine layers on a single match.
→ One row carrying lineups with player profiles, the full timeline with pitch coordinates, per-minute pressure, head to head, both teams' form, the league tables and the fun facts.
{"matchIds": ["72221158"],"layers": ["teamStats","playerStats","lineups","timeline","situations","h2h","form","tables","funfacts"]}
Compact rows for an agent or a dashboard — Header only. The layers are still fetched and still charged, so ask only for what you want to keep.
→ Flat rows: match, teams, competition, kickoff, status, score, venue and which layers were delivered.
{"matchIds": ["72221158","72221220"],"layers": ["teamStats"],"compact": true,"excludeEmptyFields": true}
Pre-match research from a bookmaker's stats link — Paste the match URL a book publishes next to its odds; the id is read from it.
→ Form for both sides with W/D/L, the record between the teams, the league table around them and the fixture's fun facts.
{"startUrls": ["https://s5.sir.sportradar.com/betano/en/match/72221220"],"layers": ["form","h2h","tables","funfacts"]}
Output
Each run produces a dataset of structured match records. Results can be downloaded as JSON, CSV, or Excel from the Dataset tab in Apify Console.
Example match record
{"matchId": "72221158","client": "betano","sport": "Soccer","competition": "Premier League","competitionId": "17","season": "Premier League 26/27","seasonId": "140756","round": 1,"week": 34,"startTime": "2026-08-22T14:00:00.000Z","status": "Ended","statusCode": 100,"homeTeam": {"id": "4867","uid": "48","name": "Everton","mediumName": "Everton FC","abbr": "EVE","country": "England","countryCode": "ENG"},"awayTeam": {"id": "342002","uid": "7","name": "Crystal Palace","mediumName": "Crystal Palace","abbr": "CRY","country": "England","countryCode": "ENG"},"score": {"home": 2,"away": 0,"winner": "home","periods": {"p1": {"home": 1,"away": 0},"ft": {"home": 2,"away": 0}}},"venue": {"id": "83422","name": "Hill Dickinson Stadium","city": "Liverpool","country": "England","capacity": 52769,"coordinates": "53.4251, -3.0028"},"referee": {"id": "104864","name": "Tierney, Paul","nationality": "England"},"managers": {"home": {"id": "52950","name": "Moyes, David","fullName": "Moyes, David William","nationality": "Scotland"},"away": {"id": "2736867","name": "Sage, Pierre","nationality": "France"}},"coverage": {"lineup": 2,"formations": 0,"livetable": 108752,"injuries": 1,"ballspotting": false,"cornersonly": false,"multicast": true,"scoutmatch": 1,"scoutcoveragestatus": 0,"scoutconnected": true,"liveodds": true,"deepercoverage": true,"tacticallineup": true,"basiclineup": true,"hasstats": true,"inlivescore": true,"insights": true,"penaltyshootout": 2,"scouttest": false,"lmtsupport": 4,"venue": false,"matchdatacomplete": false,"mediacoverage": true,"substitutions": true,"live": {"id": 843,"level": {"name": "Level 1","value": 1}},"match_creation": {"id": 841,"level": {"name": "Level 1","value": 1}},"player_service": {"id": 855,"level": {"name": "Level 1","value": 1}},"resulting": {"id": 853,"level": {"name": "Level 1","value": 1}},"stats_creation_cup": {"id": 845,"level": {"name": "Cup 1","value": 1}},"stats_creation_table": {"id": 847,"level": {"name": "Level 1","value": 1}}},"teamStats": {"home": {"ballPossession": 42,"goalAttempts": 9,"shotsOnTarget": 5,"shotsOffTarget": 4,"shotsBlocked": 7,"saves": 3,"cornerKicks": 4,"freeKicks": 14,"offsides": 2,"fouls": 6,"goalKicks": 5,"throwIns": 21,"yellowCards": 0,"yellowRedCards": 0,"redCards": 0,"substitutions": 4,"injuries": 0,"ballSafe": 67,"ballSafePercentage": 50,"attack": 62,"attackPercentage": 14,"dangerousAttack": 36,"dangerousAttackPercentage": 36,"penalties": 0},"away": {"ballPossession": 58,"goalAttempts": 8,"shotsOnTarget": 3,"shotsOffTarget": 5,"shotsBlocked": 3,"saves": 3,"cornerKicks": 0,"freeKicks": 6,"offsides": 0,"fouls": 13,"goalKicks": 11,"throwIns": 15,"yellowCards": 1,"yellowRedCards": 0,"redCards": 0,"substitutions": 5,"injuries": 1,"ballSafe": 66,"ballSafePercentage": 58,"attack": 66,"attackPercentage": 24,"dangerousAttack": 41,"dangerousAttackPercentage": 18,"penalties": 0},"periods": {"home": {"ballPossession": "46/42","yellowCards": "0/0","redCards": "0/0","cornerKicks": "2/2","freeKicks": "6/8","goalKicks": "2/3","throwIns": "14/7","offsides": "2/0","shotsOnTarget": "2/3","shotsOffTarget": "2/2","saves": "1/2","fouls": "3/3","shotsBlocked": "2/5","yellowRedCards": "0/0","substitutions": "0/4","goalAttempts": "4/5","injuries": "0/0","ballSafe": "46/54","attack": "15/12","dangerousAttack": "39/34"},"away": {"ballPossession": "54/58","yellowCards": "1/0","redCards": "0/0","cornerKicks": "0/0","freeKicks": "3/3","goalKicks": "5/6","throwIns": "7/8","offsides": "0/0","shotsOnTarget": "1/2","shotsOffTarget": "4/1","saves": "1/2","fouls": "6/7","shotsBlocked": "1/2","yellowRedCards": "0/0","substitutions": "0/5","goalAttempts": "5/3","injuries": "0/1","ballSafe": "64/53","attack": "20/27","dangerousAttack": "16/20"}},"types": [{"key": "ballPossession","id": "110","name": "Ball possession"},{"key": "goalAttempts","id": "goalattempts","name": "Goal attempts"},{"key": "shotsOnTarget","id": "125","name": "Shots on target"},{"key": "shotsOffTarget","id": "126","name": "Shots off target"},{"key": "shotsBlocked","id": "171","name": "Shots blocked"},"... 19 more items"]},"playerStats": [{"side": "home","teamId": "4867","teamUid": "48","teamName": "Everton","playerId": "110846","name": "Keane, Michael","position": "Defender","positionType": "D","nationality": "England","stats": {"starting": 0}},{"side": "home","teamId": "4867","teamUid": "48","teamName": "Everton","playerId": "138530","name": "Pickford, Jordan","fullName": "Pickford, Jordan Lee","position": "Goalkeeper","positionType": "G","nationality": "England","stats": {"minutes": 90,"goaltendingTotalSavesPercentage": 1,"saves": 2,"starting": 1}},{"side": "home","teamId": "4867","teamUid": "48","teamName": "Everton","playerId": "145188","name": "Tarkowski, James","fullName": "Tarkowski, James Alan","position": "Defender","positionType": "D","nationality": "England","stats": {"minutes": 90,"shotsOffGoal": 1,"starting": 1}},{"side": "home","teamId": "4867","teamUid": "48","teamName": "Everton","playerId": "934536","name": "Travers, Mark","position": "Goalkeeper","positionType": "G","nationality": "Ireland","stats": {"starting": 0}},{"side": "home","teamId": "4867","teamUid": "48","teamName": "Everton","playerId": "935132","name": "Mykolenko, Vitaliy","position": "Defender","positionType": "D","nationality": "Ukraine","stats": {"minutes": 90,"starting": 1}},"... 35 more items"],"lineups": {"home": {"formation": "4-3-3","startingXI": [{"playerId": "138530","name": "Pickford, Jordan","shirtNumber": "1","position": "G","positionName": "Goalkeeper","matchPosition": "G","order": 1,"height": 185,"weight": 77,"foot": "Left","birthdate": "1994-03-07T00:00:00.000Z","nationality": "England","marketValue": 22000000},{"playerId": "2102914","name": "Rohl, Merlin","shirtNumber": "34","position": "M","positionName": "Right back","matchPosition": "D","order": 2,"height": 192,"weight": 77,"foot": "Both","birthdate": "2002-07-05T00:00:00.000Z","nationality": "Germany","marketValue": 3000000},{"playerId": "145188","name": "Tarkowski, James","shirtNumber": "6","position": "D","positionName": "Central defender","matchPosition": "D","order": 3,"height": 185,"weight": 81,"foot": "Right","birthdate": "1992-11-19T00:00:00.000Z","nationality": "England","marketValue": 13000000},{"playerId": "1720484","name": "Branthwaite, Jarrad","shirtNumber": "4","position": "M","positionName": "Central defender","matchPosition": "D","order": 4,"height": 195,"weight": 89,"foot": "Left","birthdate": "2002-06-27T00:00:00.000Z","nationality": "England","marketValue": 25000000},{"playerId": "935132","name": "Mykolenko, Vitaliy","shirtNumber": "16","position": "D","positionName": "Left back","matchPosition": "D","order": 5,"height": 180,"weight": 71,"foot": "Left","birthdate": "1999-05-29T00:00:00.000Z","nationality": "Ukraine","marketValue": 28000000},"... 6 more items"],"substitutes": [{"playerId": "934536","name": "Travers, Mark","shirtNumber": "12","position": "G","positionName": "Goalkeeper","height": 191,"weight": 82,"foot": "Right","birthdate": "1999-05-18T00:00:00.000Z","nationality": "Ireland","marketValue": 3500000},{"playerId": "110846","name": "Keane, Michael","shirtNumber": "5","position": "D","positionName": "Defender","height": 191,"weight": 82,"foot": "Right","birthdate": "1993-01-11T00:00:00.000Z","nationality": "England","marketValue": 7000000},{"playerId": "1297412","name": "Garner, James","shirtNumber": "37","position": "M","positionName": "Midfielder","height": 186,"weight": 77,"foot": "Right","birthdate": "2001-03-13T00:00:00.000Z","nationality": "England","marketValue": 20000},{"playerId": "1381883","name": "Patterson, Nathan","shirtNumber": "2","position": "D","positionName": "Defender","height": 183,"weight": 83,"foot": "Right","birthdate": "2001-10-16T00:00:00.000Z","nationality": "Scotland","marketValue": 15000000},{"playerId": "1645136","name": "O'Brien, Jake","shirtNumber": "15","position": "D","positionName": "Defender","height": 197,"weight": 94,"foot": "Right","birthdate": "2001-05-15T00:00:00.000Z","nationality": "Ireland"},"... 4 more items"],"manager": {"id": "52950","name": "Moyes, David","fullName": "Moyes, David William","nationality": "Scotland"},"substitutions": [{"minute": 79,"playerIn": {"id": "1658367","name": "Beto"},"playerOut": {"id": "2203482","name": "Barry, Thierno"}},{"minute": 79,"playerIn": {"id": "1297412","name": "Garner, James"},"playerOut": {"id": "1978891","name": "Hackney, Hayden"}},{"minute": 84,"playerIn": {"id": "1646334","name": "Johnson, Brennan"},"playerOut": {"id": "2437845","name": "George, Tyrique"}},{"minute": 90,"playerIn": {"id": "2005163","name": "Alcaraz, Carlos"},"playerOut": {"id": "1055173","name": "Dewsbury-Hall, Kiernan"}}]},"away": {"formation": "3-4-3","startingXI": [{"playerId": "353202","name": "Henderson, Dean","shirtNumber": "1","position": "G","positionName": "Goalkeeper","matchPosition": "G","order": 1,"height": 188,"weight": 85,"foot": "Right","birthdate": "1997-03-12T00:00:00.000Z","nationality": "England","marketValue": 12000000},{"playerId": "2839263","name": "Canvot, Jaydee","shirtNumber": "6","position": "D","positionName": "Central defender","matchPosition": "D","order": 2,"height": 188,"weight": 75,"foot": "Right","birthdate": "2006-07-29T00:00:00.000Z","nationality": "France"},{"playerId": "1512315","name": "Richards, Chris","shirtNumber": "26","position": "D","positionName": "Central defender","matchPosition": "D","order": 3,"height": 189,"weight": 87,"foot": "Right","birthdate": "2000-03-28T00:00:00.000Z","nationality": "USA","marketValue": 8000000},{"playerId": "2070773","name": "Riad, Chadi","shirtNumber": "4","position": "D","positionName": "Central defender","matchPosition": "D","order": 4,"height": 186,"weight": 85,"foot": "Left","birthdate": "2003-06-17T00:00:00.000Z","nationality": "Morocco"},{"playerId": "1108227","name": "Munoz, Daniel","shirtNumber": "2","position": "D","positionName": "Right winger","matchPosition": "M","order": 5,"height": 180,"weight": 69,"foot": "Right","birthdate": "1996-05-26T00:00:00.000Z","nationality": "Colombia"},"... 6 more items"],"substitutes": [{"playerId": "249859","name": "Benitez, Walter","shirtNumber": "44","position": "G","positionName": "Goalkeeper","height": 191,"weight": 93,"foot": "Right","birthdate": "1993-01-19T00:00:00.000Z","nationality": "Argentina","marketValue": 10000000},{"playerId": "1057441","name": "Mingueza, Oscar","shirtNumber": "30","position": "D","positionName": "Defender","height": 184,"weight": 75,"foot": "Right","birthdate": "1999-05-13T00:00:00.000Z","nationality": "Spain"},{"playerId": "1065792","name": "Strand Larsen, Jorgen","shirtNumber": "22","position": "F","positionName": "Forward","height": 193,"weight": 79,"foot": "Right","birthdate": "2000-02-06T00:00:00.000Z","nationality": "Norway"},{"playerId": "1428491","name": "Guessand, Evann","shirtNumber": "29","position": "F","positionName": "Forward","height": 188,"weight": 79,"foot": "Right","birthdate": "2001-07-01T00:00:00.000Z","nationality": "Cote d’Ivoire"},{"playerId": "1634220","name": "Pino, Yeremy","shirtNumber": "10","position": "F","positionName": "Forward","height": 174,"weight": 65,"foot": "Right","birthdate": "2002-10-20T00:00:00.000Z","nationality": "Spain"},"... 4 more items"],"manager": {"id": "2736867","name": "Sage, Pierre","nationality": "France"},"substitutions": [{"minute": 55,"playerIn": {"id": "2275035","name": "Khalaili, Anan"},"playerOut": {"id": "1108227","name": "Munoz, Daniel"}},{"minute": 55,"playerIn": {"id": "1634220","name": "Pino, Yeremy"},"playerOut": {"id": "937000","name": "Nketiah, Eddie"}},{"minute": 63,"playerIn": {"id": "1428491","name": "Guessand, Evann"},"playerOut": {"id": "1484502","name": "McNeil, Dwight"}},{"minute": 63,"playerIn": {"id": "1065792","name": "Strand Larsen, Jorgen"},"playerOut": {"id": "1027583","name": "Mateta, Jean-Philippe"}},{"minute": 72,"playerIn": {"id": "772819","name": "Tomiyasu, Takehiro"},"playerOut": {"id": "2070773","name": "Riad, Chadi"}}]}},"timeline": [{"id": "4306456f-bd2c-4f38-95b0-4abd90d95288","type": "match_about_to_start","name": "Match about to start","minute": -1,"seconds": -1,"injuryTime": 0,"timestamp": "2026-08-22T13:59:35.000Z"},{"id": "d43ec4e2-9015-4577-a62a-0b47dd2d27f7","type": "match_started","name": "Started","minute": -1,"seconds": -1,"injuryTime": 0,"team": "home","timestamp": "2026-08-22T14:00:20.000Z","detail": {"result": {"home": 0,"away": 0},"status": {"_doc": "status","_id": 20,"name": "Started","shortName": "STA"}}},{"id": "0026bd69-5888-47f7-8405-d47b4cbebaa5","type": "periodstart","name": "1st half","minute": -1,"seconds": -1,"injuryTime": 0,"timestamp": "2026-08-22T14:00:26.000Z","detail": {"period": 1}},{"id": "9441cb64-ca63-48e6-8d50-aedc5d092fa0","type": "freekick","name": "Freekick","minute": 1,"seconds": 21,"injuryTime": 0,"team": "away","x": 65,"y": 62,"timestamp": "2026-08-22T14:00:47.000Z"},{"id": "caa3eb0d-8072-44ff-a57b-381606a607bb","type": "throwin","name": "Throw-in","minute": 2,"seconds": 85,"injuryTime": 0,"team": "home","x": 35,"y": 0,"timestamp": "2026-08-22T14:01:53.000Z"},"... 142 more items"],"situations": {"perMinute": [{"minute": 1,"injuryTime": 0,"home": {"attack": 4,"dangerous": 0,"safe": 17,"attackcount": 2,"dangerouscount": 0,"safecount": 1},"away": {"attack": 0,"dangerous": 0,"safe": 39,"attackcount": 0,"dangerouscount": 0,"safecount": 1}},{"minute": 2,"injuryTime": 0,"home": {"attack": 0,"dangerous": 0,"safe": 40,"attackcount": 0,"dangerouscount": 0,"safecount": 1},"away": {"attack": 1,"dangerous": 0,"safe": 19,"attackcount": 1,"dangerouscount": 0,"safecount": 0}},{"minute": 3,"injuryTime": 0,"home": {"attack": 1,"dangerous": 0,"safe": 47,"attackcount": 1,"dangerouscount": 0,"safecount": 1},"away": {"attack": 7,"dangerous": 5,"safe": 0,"attackcount": 1,"dangerouscount": 1,"safecount": 0}},{"minute": 4,"injuryTime": 0,"home": {"attack": 24,"dangerous": 18,"safe": 16,"attackcount": 1,"dangerouscount": 1,"safecount": 1},"away": {"attack": 0,"dangerous": 0,"safe": 2,"attackcount": 0,"dangerouscount": 0,"safecount": 1}},{"minute": 5,"injuryTime": 0,"home": {"attack": 15,"dangerous": 7,"safe": 14,"attackcount": 1,"dangerouscount": 1,"safecount": 1},"away": {"attack": 2,"dangerous": 6,"safe": 16,"attackcount": 1,"dangerouscount": 1,"safecount": 2}},"... 97 more items"],"events": [{"id": "44cdd33f-3a70-47ce-b6de-20cd8ec8f1c0","timestamp": "2026-08-22T14:00:27.000Z","team": "home","situation": "attack","x": 50,"y": 50,"minute": 1,"injuryTime": 0},{"id": "4f0a1249-b14b-48e0-bbc4-df154c593e99","timestamp": "2026-08-22T14:00:27.000Z","team": "home","situation": "safe","x": 38,"y": 39,"minute": 1,"injuryTime": 0},{"id": "5e345ce2-1ff0-4330-b5cc-fb83a677b8a0","timestamp": "2026-08-22T14:00:28.000Z","team": "home","situation": "safe","x": 35,"y": 15,"minute": 1,"injuryTime": 0},{"id": "edcf076f-2eec-4f10-a105-99eeea7c74be","timestamp": "2026-08-22T14:00:29.000Z","team": "home","situation": "safe","x": 29,"y": 53,"minute": 1,"injuryTime": 0},{"id": "baa3b806-41ed-4e53-a92c-2bcb74a4cfd5","timestamp": "2026-08-22T14:00:30.000Z","team": "home","situation": "safe","x": 29,"y": 19,"minute": 1,"injuryTime": 0},"... 813 more items"]},"h2h": {"homeTeam": {"id": "4867","uid": "48","name": "Everton","mediumName": "Everton FC","abbr": "EVE"},"awayTeam": {"id": "342002","uid": "7","name": "Crystal Palace","mediumName": "Crystal Palace","abbr": "CRY"},"matches": [{"matchId": "72221158","startTime": "2026-08-22T14:00:00.000Z","competitionId": "17","round": 1,"homeTeam": {"id": "4867","uid": "48","name": "Everton","mediumName": "Everton FC","abbr": "EVE"},"awayTeam": {"id": "342002","uid": "7","name": "Crystal Palace","mediumName": "Crystal Palace","abbr": "CRY"},"score": {"home": 2,"away": 0,"winner": "home","periods": {"ft": {"home": 2,"away": 0},"p1": {"home": 1,"away": 0}}},"comment": "1:0 (42.) K.Dewsbury-Hall, 2:0 (53.) T.Barry"},{"matchId": "61301229","startTime": "2026-05-10T13:00:00.000Z","competitionId": "17","round": 36,"homeTeam": {"id": "342002","uid": "7","name": "Crystal Palace","mediumName": "Crystal Palace","abbr": "CRY"},"awayTeam": {"id": "4867","uid": "48","name": "Everton","mediumName": "Everton FC","abbr": "EVE"},"score": {"home": 2,"away": 2,"periods": {"ft": {"home": 2,"away": 2},"p1": {"home": 1,"away": 1}}},"comment": "0:1 (6.) J.Tarkowski, 1:1 (34.) I.Sarr, 1:2 (47.) Beto, 2:2 (77.) J.Mateta"},{"matchId": "61300637","startTime": "2025-10-05T13:00:00.000Z","competitionId": "17","round": 7,"homeTeam": {"id": "4867","uid": "48","name": "Everton","mediumName": "Everton FC","abbr": "EVE"},"awayTeam": {"id": "342002","uid": "7","name": "Crystal Palace","mediumName": "Crystal Palace","abbr": "CRY"},"score": {"home": 2,"away": 1,"winner": "home","periods": {"ft": {"home": 2,"away": 1},"p1": {"home": 0,"away": 1}}},"comment": "0:1 (37.) D.Munoz, 1:1 (76.) I.Ndiaye (pen), 2:1 (90.) J.Grealish"},{"matchId": "50850451","startTime": "2025-02-15T17:30:00.000Z","competitionId": "17","round": 25,"homeTeam": {"id": "342002","uid": "7","name": "Crystal Palace","mediumName": "Crystal Palace","abbr": "CRY"},"awayTeam": {"id": "4867","uid": "48","name": "Everton","mediumName": "Everton FC","abbr": "EVE"},"score": {"home": 1,"away": 2,"winner": "away","periods": {"ft": {"home": 1,"away": 2},"p1": {"home": 0,"away": 1}}},"comment": "0:1 (42.) Beto, 1:1 (47.) J.Mateta, 1:2 (80.) C.Alcaraz"},{"matchId": "50850075","startTime": "2024-09-28T14:00:00.000Z","competitionId": "17","round": 6,"homeTeam": {"id": "4867","uid": "48","name": "Everton","mediumName": "Everton FC","abbr": "EVE"},"awayTeam": {"id": "342002","uid": "7","name": "Crystal Palace","mediumName": "Crystal Palace","abbr": "CRY"},"score": {"home": 2,"away": 1,"winner": "home","periods": {"ft": {"home": 2,"away": 1},"p1": {"home": 0,"away": 1}}},"comment": "0:1 (10.) M.Guehi, 1:1 (47.) D.McNeil, 2:1 (54.) D.McNeil"},"... 32 more items"],"upcomingMatches": [{"matchId": "72221804","startTime": "2027-04-10T14:00:00.000Z","competitionId": "17","round": 31,"homeTeam": {"id": "342002","uid": "7","name": "Crystal Palace","mediumName": "Crystal Palace","abbr": "CRY"},"awayTeam": {"id": "4867","uid": "48","name": "Everton","mediumName": "Everton FC","abbr": "EVE"}}],"summary": {"played": 37,"homeWins": 18,"draws": 13,"awayWins": 6,"goalsHome": 57,"goalsAway": 37}},"form": {"home": {"team": {"uid": "48","name": "Everton","mediumName": "Everton FC","abbr": "EVE"},"matches": [{"matchId": "73667724","startTime": "2026-08-26T19:00:00.000Z","competitionId": "21","round": 8,"homeTeam": {"id": "4838","uid": "21","name": "Preston","mediumName": "Preston North End","abbr": "PNE"},"awayTeam": {"id": "66575","uid": "48","name": "Everton","mediumName": "Everton FC","abbr": "EVE"},"score": {"home": 0,"away": 4,"winner": "away","periods": {"ft": {"home": 0,"away": 4},"p1": {"home": 0,"away": 1}}},"comment": "0:1 (25.) T.Barry, 0:2 (59.) T.Barry, 0:3 (70.) T.Barry, 0:4 (72.) B.Johnson"},{"matchId": "72221158","startTime": "2026-08-22T14:00:00.000Z","competitionId": "17","round": 1,"homeTeam": {"id": "4867","uid": "48","name": "Everton","mediumName": "Everton FC","abbr": "EVE"},"awayTeam": {"id": "342002","uid": "7","name": "Crystal Palace","mediumName": "Crystal Palace","abbr": "CRY"},"score": {"home": 2,"away": 0,"winner": "home","periods": {"ft": {"home": 2,"away": 0},"p1": {"home": 1,"away": 0}}},"comment": "1:0 (42.) K.Dewsbury-Hall, 2:0 (53.) T.Barry"},{"matchId": "72392312","startTime": "2026-08-15T14:00:00.000Z","competitionId": "853","homeTeam": {"id": "119940","uid": "48","name": "Everton","mediumName": "Everton FC","abbr": "EVE"},"awayTeam": {"id": "11034883","uid": "1643","name": "Lille","mediumName": "Lille OSC","abbr": "LIL"},"score": {"home": 1,"away": 1,"periods": {"ft": {"home": 1,"away": 1},"p1": {"home": 1,"away": 0}}},"comment": "1:0 (41.) I.Ndiaye (pen), 1:1 (90.) H.Haraldsson"},{"matchId": "71942308","startTime": "2026-08-12T16:15:00.000Z","competitionId": "853","homeTeam": {"id": "119940","uid": "48","name": "Everton","mediumName": "Everton FC","abbr": "EVE"},"awayTeam": {"id": "120328","uid": "39","name": "Newcastle","mediumName": "Newcastle United","abbr": "NEW"},"score": {"home": 3,"away": 1,"winner": "home","periods": {"ft": {"home": 3,"away": 1},"p1": {"home": 2,"away": 0}}},"comment": "1:0 (27.) T.Barry, 2:0 (36.) I.Ndiaye (pen), 3:0 (73.) T.George, 3:1 (85.) H.Barnes"},{"matchId": "72185464","startTime": "2026-08-08T15:00:00.000Z","competitionId": "853","homeTeam": {"id": "228585","uid": "2677","name": "Stuttgart","mediumName": "VfB Stuttgart","abbr": "VFB"},"awayTeam": {"id": "119940","uid": "48","name": "Everton","mediumName": "Everton FC","abbr": "EVE"},"score": {"home": 3,"away": 1,"winner": "home","periods": {"ft": {"home": 3,"away": 1},"p1": {"home": 1,"away": 0}}},"comment": "1:0 (16.) N.Nartey, 2:0 (65.) R.Hendriks, 2:1 (72.) T.Barry (pen), 3:1 (90.) B.Bouanani"},"... 5 more items"],"results": ["W","W","D","W","L","... 5 more items"]},"away": {"team": {"uid": "7","name": "Crystal Palace","mediumName": "Crystal Palace","abbr": "CRY"},"matches": [{"matchId": "72221158","startTime": "2026-08-22T14:00:00.000Z","competitionId": "17","round": 1,"homeTeam": {"id": "4867","uid": "48","name": "Everton","mediumName": "Everton FC","abbr": "EVE"},"awayTeam": {"id": "342002","uid": "7","name": "Crystal Palace","mediumName": "Crystal Palace","abbr": "CRY"},"score": {"home": 2,"away": 0,"winner": "home","periods": {"ft": {"home": 2,"away": 0},"p1": {"home": 1,"away": 0}}},"comment": "1:0 (42.) K.Dewsbury-Hall, 2:0 (53.) T.Barry"},{"matchId": "72367306","startTime": "2026-08-15T12:00:00.000Z","competitionId": "853","homeTeam": {"id": "119837","uid": "2538","name": "Freiburg","mediumName": "SC Freiburg","abbr": "SCF"},"awayTeam": {"id": "119935","uid": "7","name": "Crystal Palace","mediumName": "Crystal Palace","abbr": "CRY"},"score": {"home": 3,"away": 0,"winner": "home","periods": {"ft": {"home": 3,"away": 0},"p1": {"home": 1,"away": 0}}}},{"matchId": "73449096","startTime": "2026-08-07T17:00:00.000Z","competitionId": "853","homeTeam": {"id": "225577","uid": "43","name": "Fulham","mediumName": "Fulham FC","abbr": "FUL"},"awayTeam": {"id": "119935","uid": "7","name": "Crystal Palace","mediumName": "Crystal Palace","abbr": "CRY"},"score": {"home": 1,"away": 2,"winner": "away","periods": {"ft": {"home": 1,"away": 2},"p1": {"home": 1,"away": 1}}}},{"matchId": "73301084","startTime": "2026-07-31T18:45:00.000Z","competitionId": "853","homeTeam": {"id": "119935","uid": "7","name": "Crystal Palace","mediumName": "Crystal Palace","abbr": "CRY"},"awayTeam": {"id": "34462358","uid": "1367912","name": "Alula SC","mediumName": "Alula SC","abbr": "ALU"},"score": {"home": 3,"away": 1,"winner": "home","periods": {"ft": {"home": 3,"away": 1},"p1": {"home": 2,"away": 1}}}},{"matchId": "72498008","startTime": "2026-07-28T18:30:00.000Z","competitionId": "853","homeTeam": {"id": "1400244","uid": "49531","name": "Famalicao","mediumName": "FC Famalicao","abbr": "FAM"},"awayTeam": {"id": "119935","uid": "7","name": "Crystal Palace","mediumName": "Crystal Palace","abbr": "CRY"},"score": {"home": 4,"away": 5,"winner": "away","periods": {"ft": {"home": 0,"away": 0},"p1": {"home": 0,"away": 0},"ap": {"home": 4,"away": 5}}}},"... 5 more items"],"results": ["L","L","W","W","W","... 5 more items"]}},"tables": {"slice": {"id": "108752","name": "Premier League","seasonId": "140756","currentRound": 1,"maxRounds": 38,"totalRows": 20,"rows": [{"position": 4,"team": {"id": "4867","uid": "48","name": "Everton","mediumName": "Everton FC","abbr": "EVE"},"played": 1,"win": 1,"draw": 0,"loss": 0,"goalsFor": 2,"goalsAgainst": 0,"goalDiff": 2,"points": 3,"change": 0,"promotion": "Champions League"},{"position": 16,"team": {"id": "342002","uid": "7","name": "Crystal Palace","mediumName": "Crystal Palace","abbr": "CRY"},"played": 1,"win": 0,"draw": 0,"loss": 1,"goalsFor": 0,"goalsAgainst": 2,"goalDiff": -2,"points": 0,"change": 0}]},"season": {"id": "108752","name": "Premier League","seasonId": "140756","currentRound": 1,"maxRounds": 38,"totalRows": 20,"rows": [{"position": 1,"team": {"id": "6601990","uid": "30","name": "Brighton","mediumName": "Brighton & Hove Albion","abbr": "BRI"},"played": 1,"win": 1,"draw": 0,"loss": 0,"goalsFor": 4,"goalsAgainst": 0,"goalDiff": 4,"points": 3,"change": 0,"promotion": "Champions League"},{"position": 2,"team": {"id": "4871","uid": "42","name": "Arsenal","mediumName": "Arsenal FC","abbr": "ARS"},"played": 1,"win": 1,"draw": 0,"loss": 0,"goalsFor": 3,"goalsAgainst": 0,"goalDiff": 3,"points": 3,"change": 0,"promotion": "Champions League"},{"position": 2,"team": {"id": "13241732","uid": "50","name": "Brentford","mediumName": "Brentford FC","abbr": "BRE"},"played": 1,"win": 1,"draw": 0,"loss": 0,"goalsFor": 3,"goalsAgainst": 0,"goalDiff": 3,"points": 3,"change": 0,"promotion": "Champions League"},{"position": 4,"team": {"id": "4867","uid": "48","name": "Everton","mediumName": "Everton FC","abbr": "EVE"},"played": 1,"win": 1,"draw": 0,"loss": 0,"goalsFor": 2,"goalsAgainst": 0,"goalDiff": 2,"points": 3,"change": 0,"promotion": "Champions League"},{"position": 4,"team": {"id": "1274472","uid": "96","name": "Hull","mediumName": "Hull City","abbr": "HUL"},"played": 1,"win": 1,"draw": 0,"loss": 0,"goalsFor": 2,"goalsAgainst": 0,"goalDiff": 2,"points": 3,"change": 0,"promotion": "UEFA Europa League"},"... 15 more items"]}},"funfacts": ["When playing at home, Everton have not lost to Crystal Palace in their last 12 encounters.","Everton have played 4 home matches in a row without winning.","During the last 17 meetings with Everton playing at home, Everton have won 10 times, there have been 4 draws while Crystal Palace have won 3 times. The goal difference is 35-19 in favour of Everton."],"layersDelivered": ["info","teamStats","playerStats","lineups","timeline","... 5 more items"],"sourceUrl": "https://statshub.sportradar.com/betano/en/match/72221158","scrapedAt": "2026-08-28T19:40:15.449Z"}
How to scrape sportradar.com
- Go to Sportradar Match Stats Scraper in Apify Console.
- Configure the input.
- Set
maxResultsto control how many results you need. - Click Start and wait for the run to finish.
- Export the dataset as JSON, CSV, or Excel.
Use cases
- Extract match data from sportradar.com for market research and competitive analysis.
- Feed structured data into AI agents, MCP tools, and automated pipelines using compact mode.
- Export clean, structured data to dashboards, spreadsheets, or data warehouses.
How much does it cost to scrape sportradar.com?
Sportradar Match Stats Scraper uses pay-per-event pricing. You pay a small fee when the run starts and then for each result that is actually produced.
- Run start: $0.001 per run
- Per match (primary event): $0.002
You are billed only for the events your run actually triggers. Prices below are the Free plan tier.
| Event | Price (Free tier) | Charged when |
|---|---|---|
| Actor Start | $0.001 (one-time) | Charged once per run (one event per GB of memory, minimum one). Platform usage (compute and data transfer) is billed separately by Apify at your plan rates. |
| Match (primary) | $0.002 | One match delivered to your dataset with its header: teams, competition, season, round, kickoff, status, score, venue, referee and managers, plus the headline team statistics once the match is under way. A fixture that has not kicked off yet has no statistics to publish and still costs one match. Charged once per match, however many data layers ride on it. |
| Data layer | $0.001 | Added once per extra data layer delivered on a match: team statistics with half splits, player statistics, lineups, timeline, match situations, head-to-head, form, league tables or fun facts. A layer the source has no data for is not charged. |
Example costs (primary event only — other events above add cost when they fire):
- 10 results: $0.021
- 25 results: $0.051
- 100 results: $0.2
- 200 results: $0.4
- 500 results: $1
Platform usage is billed on top of these prices. The figures above are Apify event fees only. Compute units and proxy traffic are billed separately by Apify at your actual consumption, and for proxy- or browser-heavy workloads they can exceed the event fees. What you actually pay depends on your own input — how many results you request, whether detail enrichment is on, the run memory you choose, and your proxy settings — so it cannot be stated as a fixed figure here. Every run reports its exact platform usage on the run detail page.
The Actor Start event is charged once per GB of run memory (minimum one), so a run configured with 2 GB is charged two start events rather than one.
FAQ
How many results can I get from sportradar.com?
The number of results depends on the search query and available matches on sportradar.com. Use the maxResults parameter to control how many results are returned per run.
Can I integrate Sportradar Match Stats Scraper with other apps?
Yes. Sportradar Match Stats Scraper works with Apify's integrations to connect with tools like Zapier, Make, Google Sheets, Slack, and more. You can also use webhooks to trigger actions when a run completes.
Can I use Sportradar Match Stats Scraper with the Apify API?
Yes. You can start runs, manage inputs, and retrieve results programmatically through the Apify API. Client libraries are available for JavaScript, Python, and other languages.
Can I use Sportradar Match Stats Scraper through an MCP Server?
Yes. Apify provides an MCP Server that lets AI assistants and agents call this actor directly. Use compact mode and excludeEmptyFields to keep payloads manageable for LLM context windows.
Is it legal to scrape sportradar.com?
This actor extracts publicly available data from sportradar.com. Web scraping of public information is generally considered legal, but you should always review the target site's terms of service and ensure your use case complies with applicable laws and regulations, including GDPR where relevant.
Your feedback
If you have questions, need a feature, or found a bug, please open an issue on the actor's page in Apify Console. Your feedback helps us improve.
You might also like
- Betano Odds API — Live and Pre-Match Odds, 14 Countries — $3 day pass or $0.002 per call. Betano odds as a REST API: pre-match and live with score and clock,.
- Betano Odds Scraper — Live + All Markets, 14 Countries — Scrape Betano betting odds from 14 country books at $3 per 1,000 events: pre-match and in-play.
- Elpris Scraper — Danish Electricity Prices & Suppliers — Scrape every electricity product Danish suppliers report to elpris.dk — supplier, price bands.
- Google Trends Scraper [Just 💰$0.49] — Interest & Related — 💰 $0.49 per 1,000 trending terms — the cheapest paid Google Trends scraper. Scrape live trending.
- MLB Stats Scraper 💰$2/1K — Rosters & Season Stats — Scrape statsapi.mlb.com for every MLB player in a season: full roster with batting, pitching.
- Outseo Scraper: Full Leaderboard — Scrape every ranked site on the outseo.lol organic-traffic leaderboard, not just the first page,.
- Transfermarkt Scraper [Just 💰$0.5] — football market values — 💰 $0.5 per 1,000 records. Scrape transfermarkt.com — player market values with full history ·.
Getting started with Apify
New to Apify? Create a free account with $5 credit — no credit card required.
- Sign up — $5 platform credit included
- Open this actor and configure your input
- Click Start — export results as JSON, CSV, or Excel
Need more later? See Apify pricing.
How billing works
Two per-result fees, both charged only for what reaches your dataset. The match fee covers the header of every delivered match: teams, competition, season, round, kickoff, status, score, venue, referee, managers and the headline team statistics. It is charged once per match however many layers ride on it, because a match is always one row. The data-layer fee is added once for each extra layer that came back with data, so a match delivered with team statistics, lineups and the timeline is one match fee plus three layer fees. A layer you asked for that the source has no document for is listed on the row under layersFailed and is not charged, and a match whose header cannot be read is skipped and not charged at all. Platform usage (compute and data transfer) is billed by Apify at your plan's rates on top of these fees; a header-only run uses very little of it, and the timeline and match-situation layers are the two that move it.
Where the match ids come from
Every Sportradar match has one numeric id, and bookmakers that embed the Sportradar widget publish it next to their fixtures. On Betano it is the betRadarId field on an event, and the stats link on the event page is the same id in URL form. You can paste either into matchIds: a bare id, a statshub.sportradar.com match URL, or the s5.sir.sportradar.com link a book publishes. That means an odds feed and this actor join on a single key, with no name matching and no lookup table in between.
Disclaimer
This actor reads publicly available match statistics from Sportradar's own stats widget. It is not affiliated with, endorsed by or operated by Sportradar. Statistics, lineups, timelines, tables and fixture data are reproduced as the widget served them at the time of the run: live matches change minute by minute, and figures can be corrected or withdrawn afterwards. Availability depends on the source. Not every match has every layer, coverage differs by competition, and a fixture with no lineup published yet is delivered without one; when the source is down or has no document for an id, a run can return fewer matches or none. In that case you still pay the Actor start fee and the platform usage the run consumed, but no per-match or per-layer fees, because those are charged only for what is delivered to your dataset.
Search keywords
sportradar scraper, sportradar api, apify sportradar, sportradar data extraction, sportradar match stats scraper, sportradar match stats api, apify sportradar match stats, sportradar match stats data extraction, sportradar.com scraper, sportradar.com data, sportradar.com api.