Bet365 Sports Data Scraper - Scores, Fixtures, Stats, Odds
Pricing
from $2.99 / 1,000 results
Bet365 Sports Data Scraper - Scores, Fixtures, Stats, Odds
Extract scores, fixtures, player stats, lineups, xG, transfers, and 1X2 odds from Bet365. 15 actions across 13 sports and 2600+ competitions. Team and player names auto-resolved, no IDs needed. Up to 46 stat types per match, odds in 3 formats, full season history. JSON/CSV export, free to try.
Pricing
from $2.99 / 1,000 results
Rating
0.0
(0)
Developer
Zen Studio
Maintained by CommunityActor stats
1
Bookmarked
69
Total users
16
Monthly active users
1.1 hours
Issues response
4 days ago
Last modified
Categories
Share
| Zen Studio Sports Betting • Real-time odds and scores across every major sportsbook | |||
|
➤ You are here |
39 sports, all markets |
13 sports, real-time |
Lines, props, SGP |
One actor for all sports data — scores, fixtures, match detail, player profiles, squad stats, transfers, and betting insights. 15 actions across 13 sports and 2600+ competitions.
No IDs to look up: competitions take slugs, teams and players take names, and country/team/source come back as resolved names. Match detail carries up to 46 stat types per game (including expected goals), per-period scores for every sport, and full lineups.
Recent updates
See the Changelog tab for the full history.
- Names, not IDs — country, team and news source now come resolved across the discovery actions; no lookup tables to maintain.
- Richer records — transfer fees + news articles, betting-trend teams, player injury status, match venues, and a
dataAvailabilityhint on every match. scoresdate filter —startDateFrom/startDateTopull just a date window instead of a whole season (far cheaper recurring refreshes).- Per-sport match stats — up to 46 for football (incl. expected goals), with per-period scores for every sport.
dailyTipreturns real tips, andsquadStatsranks a squad by several stats in one run.
Copy to your AI assistant
Copy this block into ChatGPT, Claude, Cursor, or any LLM to start building with this API.
zen-studio/bet365-sports-data on Apify. Call: ApifyClient("TOKEN").actor("zen-studio/bet365-sports-data").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items for results. Key inputs: action (string, required), competitionIds (string), gameIds (array). Full actor spec (input schema with all params/enums/defaults, output dataset fields, README): GET https://api.apify.com/v2/acts/zen-studio~bet365-sports-data/builds/default (Bearer TOKEN) → inputSchema, actorDefinition.storages.dataset, readme. Pricing: $2.99/1k results, item-scraped $0.00299/item. Get token: https://console.apify.com/account/integrations
Also available as an MCP server — add zen-studio/bet365-sports-data for natural language access.
Output Example
|
Use Cases
- Full season match data — all 380 Premier League games or 850 NBA games for the current season; switch to "Last season" / "2 seasons ago" for history (football leagues have up to 3 seasons).
- Cheap recurring refresh —
scoreswithstartDateFrom/startDateTopulls just the next two weeks of a league (~20 items vs a full 380-game season) to catch postponements, kickoff changes and results. - Player game logs — game-by-game stats for any player. Football: goals, assists, minutes, clean sheets. Basketball: full box scores (points, rebounds, assists, FG%, 3PT, blocks, steals).
- Squad rankings — rank a team's players by goals, xG, assists, tackles, clean sheets, or any of 12 stat types within a competition.
- Betting analysis — 1X2 odds with opening and current prices, head-to-head trends, and daily tips with tipster ROI and win rates.
- Multi-sport coverage — football, basketball, tennis, hockey, American football, baseball, rugby, handball, volleyball. 2600+ competitions from Premier League to NBA to ATP.
- Transfer tracker — latest player transfers with fees and cited news, filtered by competition.
Actions
Scores & Games
| Action | Description | Required Input |
|---|---|---|
scores | Games by competition (paginated; supports historical pulls and a startDateFrom/startDateTo date window) | competitionIds |
fixtures | Full season fixtures with results | competitionIds |
gameDetail | Complete game data: events, lineups, per-sport stats (up to 46 for football), venue, officials | gameIds |
teamGames | Team's recent and upcoming matches | competitorId |
Players
| Action | Description | Required Input |
|---|---|---|
playerProfile | Player profiles with market value, career stats, injury status, photo (batch supported) | athleteIds |
playerGames | Player match history with per-game stats | athleteIds (first) |
squadStats | Squad ranked by one or more stat types (goals, xG, assists, cards, etc.) | competitorId, competitionIds (first), statType or statTypes |
teamStats | Team player stats overview across all stat categories | competitorId |
Discovery
| Action | Description | Required Input |
|---|---|---|
popular | Top entities for a sport — Football: athletes, teams & competitions; other sports: top competitions | sportType |
search | Find players, teams, and competitions by name | searchQuery |
competitions | Full competition catalog (2600+) | sportType |
transfers | Recent player transfers with fees and news | competitionIds (first) |
Betting
| Action | Description | Required Input |
|---|---|---|
odds | 1X2 match odds from Bet365 (decimal, fractional, American) | competitionIds |
trends | Betting trends and head-to-head insights with recommendations | gameIds (first) |
dailyTip | Daily betting tips: recommendation, odds (3 formats), outcome, linked game, plus the tipster's win rate and ROI | None |
Example Inputs
Premier League scores (last 50 games):
{ "action": "scores", "competitionIds": "premier-league", "maxResults": 50 }
Several competitions, just the next two weeks:
{ "action": "scores", "competitionIds": "premier-league, champions-league, bundesliga", "startDateFrom": "2026-06-25", "startDateTo": "2026-07-09" }
Player profiles by name (batch):
{ "action": "playerProfile", "athleteIds": ["Mbappe", "Haaland", "Salah"] }
Real Madrid squad ranked by several stats at once:
{ "action": "squadStats", "competitorId": "Real Madrid", "competitionIds": "laliga", "statTypes": ["Goals", "Assists", "Expected Goals (xG)"] }
Full game detail:
{ "action": "gameDetail", "gameIds": ["4679449"] }
Top football competitions (one cheap call):
{ "action": "popular", "sportType": "Football", "entityTypes": ["competition"] }
Output
Every action is documented below, and the complete field set always lands in your dataset — the examples show representative shapes, not the full set.
| Action | Returns (key fields) |
|---|---|
scores / fixtures / teamGames | gameId, teams (+ logos, codes, ids), score, halftime, periodScores, status, minute, result, venue, attendance, fanVote, odds (optional), dataAvailability, webUrl |
gameDetail | everything in scores plus events, lineups (formations + players), per-sport statistics (up to 46 football), venue, officials, coaches, missingPlayers, standings, headToHead, topPerformers, videos, series |
playerProfile | name, age, nationality, club, position, height/weight, marketValue, injuryStatus, seasonStats (per competition), careerStats, photo |
playerGames | per-game line: teams, score, competition, season, minutes + sport stats, didNotPlayReason |
squadStats | ranked players: name, team, country, plus each requested stat (Goals / xG / Assists / …) |
teamStats | top players per stat category across the squad |
search | athletes / teams / competitions by name, with resolved countryName / sportName, market value, popularity |
popular | top athletes / teams / competitions for a sport, resolved names + season metadata |
competitions | catalog: name, slug, countryName, sport, gender, season dates, popularity |
transfers | player, from/to teams, fee + currency, formation position, news articles, likes |
odds | 1X2 odds per game (decimal / fractional / American, opening + current) |
trends | per-team betting trends with recommendations + structured betLines |
dailyTip | tipster picks: recommendation, odds (3 formats), outcome, linked game, win rate, ROI |
Match data (scores, fixtures, teamGames)
{"gameId": 4452851,"sportType": "Football","competition": "Premier League","competitionId": 7,"season": 131,"startTime": "2026-03-14T15:00:00Z","status": "finished","homeTeam": "Sunderland","homeTeamId": 117,"homeTeamCode": "SUN","homeTeamLogo": "https://cdn.example.com/.../Competitors/117","awayTeam": "Brighton","awayTeamCode": "BHA","homeScore": 0,"awayScore": 1,"homeHalftimeScore": 0,"awayHalftimeScore": 0,"result": "away","attendance": 45497,"venue": { "id": 9007, "name": "Stadium of Light" },"dataAvailability": { "lineups": true, "statistics": true, "standings": true, "odds": true },"fanVote": { "home": 3603, "draw": 1629, "away": 3021 },"odds": {"bookmaker": "Bet365", "settled": true,"homeWinOdds": 3.5, "homeWinFractional": "5/2", "homeWinAmerican": "+250", "homeWinOpeningOdds": 3.3,"drawOdds": 3.6, "awayWinOdds": 2.05, "awayWinWon": true}}
Add "includeOdds": true to attach the odds block to every game. The standalone odds action returns the same odds block per game.
Per-period scores — every sport
Each match row carries periodScores (per-set / per-quarter / per-period, with the winner). homeHalftimeScore/awayHalftimeScore are football-only; individual sports also include homeRanking/awayRanking and recent form.
// Tennis (sets, with a set-2 tie-break)"periodScores": [{ "name": "Set 1", "shortName": "S1", "home": 3, "away": 6, "winner": "away" },{ "name": "Set 2", "shortName": "S2", "home": 7, "away": 6, "winner": "home", "tieBreak": { "home": 7, "away": 2 } },{ "name": "Set 3", "shortName": "S3", "home": 5, "away": 7, "winner": "away" }]// Basketball (quarters): Q1 23-22, Q2 31-39, Q3 25-26, Q4 22-28
Game detail (gameDetail)
{"gameId": 4679449,"competition": "UEFA Champions League","homeTeam": "FC Barcelona","awayTeam": "Newcastle United","homeScore": 7, "awayScore": 2,"status": "finished", "result": "home","aggregateScore": [8.0, 3.0],"events": [{ "type": "Goal", "subType": "Open Play", "minute": 6.0, "minuteDisplay": "6'", "player": "Raphinha", "team": "home", "assistPlayers": ["Fermín López"] }// ... every goal and card],"lineups": {"home": { "formation": "4-2-3-1", "players": [ { "name": "Joan García", "jerseyNumber": 13, "position": 1, "isStarter": false, "age": 24, "rating": 6.1 } /* 23 per team */ ] },"away": { "formation": "4-3-3", "players": [ /* ... */ ] }},"statistics": {"possession": { "home": "64%", "away": "36%", "homePct": 0.64, "awayPct": 0.36 },"totalShots": { "home": "22", "away": "7" },"expectedGoals": { "home": "4.85", "away": "1.40" },"expectedAssists": { "home": "3.90", "away": "1.10" },"bigChancesCreated": { "home": "9", "away": "2" },"passesCompleted": { "home": "612", "away": "320" }// ... up to 46 football stat types},"venue": { "id": 122, "name": "Spotify Camp Nou", "country": "Spain", "capacity": 105000, "surface": "grass", "location": { "lat": 2.12, "lng": 41.38 } },"officials": [{ "name": "Francois Letexier", "role": "Referee" }],"coaches": [{ "name": "Hans-Dieter Flick", "team": "home" }],"missingPlayers": [{ "name": "Jules Koundé", "team": "home", "reason": "Thigh injury" }],"standings": [ /* full table: position, played, won/draw/lost, GF/GA, points */ ]}
statistics keys are labeled per sport. Football is shown above; basketball returns shooting splits, rebounds, fast-break and points-in-the-paint; tennis returns serve/return splits and winners / unforced errors by shot type; ice hockey, volleyball and rugby are labeled too. Any stat the source does not name is returned as stat<N>, so nothing is dropped.
Player profile (playerProfile)
{"athleteId": 39789,"name": "Raphinha","age": 29,"nationality": "Brazil","club": "FC Barcelona","position": "Attacker","marketValue": 85000000,"marketValueCurrency": "EUR","nationalTeamId": 2379,"injuryStatus": { "injuryType": "Hamstring Injury", "expectedReturn": "Early July 2026" },"seasonStats": [{ "competition": "LaLiga", "competitionId": 11, "Goals": "11", "Assists": "3", "Appearances": "19", "Time Played": "1210" }// ... more competitions (club + national team kept separately)],"careerStats": { "Goals": "120", "Assists": "75" },"popularityRank": 175}
Transfers (transfers)
{"transferId": 354519,"playerName": "Raúl Jiménez","formationPosition": "Centre Forward","playerCountry": "Mexico","origin": "Fulham","target": "Everton","time": "2026-03-21T19:38:00Z","price": "Terms Agreed","priceValue": 0,"priceCurrency": "GBP","likes": 10857,"dislikes": 4543,"articles": [{ "source": "Fabrizio Romano", "url": "https://x.com/FabrizioRomano/status/...", "publishTime": "2026-06-09T09:19:00Z" }],"status": "Rumor"}
Betting trends (trends)
{"category": "Team Trends","competitors": ["Barcelona"],"text": "Barcelona won - 5/6 Last Matches","recommendation": "Barcelona to win","recommendations": ["Barcelona to win"],"betLines": [{ "recommendation": "Barcelona to win", "lineTypeId": 1, "param": null, "optionNum": 1, "competitorId": 104 }],"gameId": 4679449, "homeTeam": "Barcelona", "awayTeam": "Newcastle Utd"}
Quick Reference
Competition Slugs
Use these in competitionIds. Comma-separate for multiple.
| Slug | Competition | Slug | Competition |
|---|---|---|---|
premier-league | Premier League | champions-league | UEFA Champions League |
laliga | LaLiga | europa-league | UEFA Europa League |
bundesliga | Bundesliga | fa-cup | FA Cup |
serie-a | Serie A | copa-del-rey | Copa del Rey |
ligue-1 | Ligue 1 | nba | NBA |
nfl | NFL | nhl | NHL |
70+ slugs built in. Run the competitions action to discover all 2600+.
Teams and Players
Type names directly, no IDs needed:
- Teams:
"Real Madrid","Arsenal","Inter Miami"— auto-resolved (football teams prioritized) - Players:
"Mbappe","Haaland","Salah"— auto-resolved to the best match - Numeric IDs also accepted
Input Reference
| Field | Type | Used By | Description |
|---|---|---|---|
action | enum | All | Which action to run (required) |
competitionIds | string | scores, fixtures, odds (all), squadStats, transfers (first) | Competition slugs, comma-separated. E.g. premier-league, champions-league |
season | enum | fixtures | Current season, Last season, or 2 seasons ago |
startDateFrom | string | scores | Only games on/after this date (YYYY-MM-DD). Cheap date-window refresh instead of a full season. |
startDateTo | string | scores | Only games on/before this date (YYYY-MM-DD). Up to a 30-day range; set just one bound for a 14-day window. |
gameIds | string[] | gameDetail (all), trends (first) | Game IDs (from scores or fixtures output) |
competitorId | string | teamGames, squadStats, teamStats | Team name or ID. E.g. Real Madrid or 131 |
athleteIds | string[] | playerProfile (all), playerGames (first) | Player names or IDs. E.g. ["Mbappe", "Haaland"] |
statType | enum | squadStats | Goals, Assists, Expected Goals (xG), Rating, etc. |
statTypes | string[] | squadStats | Several stats at once (e.g. Goals, Assists, xG), all returned per player in one run. Overrides statType. |
searchQuery | string | search | Search by name (teams, competitions) |
sportType | enum | popular, competitions | Football, Basketball, Tennis, etc. |
entityTypes | array | popular | Limit to athlete, team, competition. Empty = all. E.g. ["competition"] for top leagues. |
maxResults | int | All | Max items to return (default: 500) |
includeOdds | bool | scores, teamGames | Add Bet365 1X2 odds |
language | enum | All | English, Deutsch, Español, Français, etc. |
Pricing
Pay per dataset item. No subscriptions. $2.99 per 1,000 results. Free to try: the first 5 runs are free (up to 50 results each).
| Use Case | Items | Cost |
|---|---|---|
| Full EPL season fixtures | 380 | $1.14 |
| 3 player profiles | 3 | $0.01 |
| 50 historical EPL scores | 50 | $0.15 |
| Squad goals ranking (LaLiga team) | ~20 | $0.06 |
| Popular competitions (Basketball, Tennis, etc.) | 20 | $0.06 |
Billing is per result, so the rich extra fields (per-sport stats, resolved names, venues, trends) don't add to your cost.
FAQ
Do I need to know any IDs?
No. Competitions use slugs (premier-league), teams and players accept names (Real Madrid, Mbappe), and sports/stats are dropdowns. Country, team and source come back as resolved names too. Only game IDs (from scores output) are numeric, since games have no names.
Can I pull historical data?
Yes. scores paginates backwards through history (set maxResults: 5000 for multiple seasons), and fixtures returns the full current season in one call. Use startDateFrom/startDateTo for a cheap date window.
What's the difference between this and the Live Scores actor? This actor is for batch pulls: historical data, player profiles, transfers, full seasons. The Live Scores actor is a real-time Standby API for polling live games every 30-60 seconds.
What sports are covered? Football (813 competitions), Basketball (215), Tennis (1105), Hockey (47), Handball (38), American Football (15), Baseball (24), Volleyball (323), Rugby (35).
Support
Bug reports, feature requests, or questions? Open an issue in the Issues tab.
15 actions. 13 sports. 2600+ competitions. Scores, players, stats, transfers, odds, trends.