Pricing
from $5.00 / 1,000 league scrapeds
ESPN Soccer Data Scraper
Extract structured soccer data from ESPN's live data infrastructure β the same feed that powers ESPN's website and app. No API key required. One run delivers standings, match results, team rosters, top scorers, player stats, and news across any major league in the world
Pricing
from $5.00 / 1,000 league scrapeds
Rating
0.0
(0)
Developer
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
β½ ESPN Soccer Data Scraper β Live Scores, Standings & Stats from 70+ Leagues
Extract structured soccer data from ESPN's live data infrastructure β the same feed that powers ESPN's website and app. No API key required. One run delivers standings, match results, team rosters, top scorers, player stats, and news across any major league in the world.
Perfect for: developers building sports apps, data scientists, fantasy platforms, sports media teams, and betting analytics.
π What This Actor Does
This Actor scrapes live soccer data directly from ESPN's public data feed. For each league you provide, it returns a clean, structured dataset record with all requested data types nested inside β ready to use without any transformation.
Supported data types per league:
| Data Type | What You Get |
|---|---|
standings | League table with W/D/L, points, goals for/against |
scoreboard | Match results and upcoming fixtures with scores |
teams | Full team list with logos, colors, and links |
news | Latest news articles for the league |
leaders | Season statistical leaders (goals, assists, etc.) |
athletes | Player roster with positions, nationality, age |
rankings | Competition rankings where available |
No authentication needed. No browser automation. Fast and reliable.
β¨ Key Features
- 70+ leagues worldwide β Premier League, Champions League, MLS, Copa Libertadores, Serie A, Bundesliga, La Liga, and many more
- 7 data types per run β get everything you need in one call
- Optional full match details β per-match possession, shots, fouls, and complete player lineups
- Pay-per-event pricing β pay from $0.05/league, nothing more
- Human-readable league names β just type "Premier League", no slug lookup needed
- Proxy support β built-in Apify proxy integration for reliable production runs
- Free tier β try 1 league with standings + scoreboard at no cost
π§ Why This Actor is Different
Most soccer data APIs charge β¬50ββ¬300/month regardless of usage. This Actor gives you the same ESPN data quality with true pay-as-you-go pricing.
- No subscription β pay $0.05 per league scraped, nothing when you don't run
- 7 data types bundled β competitors charge separately per endpoint
- Clean nested output β one dataset record per league, no flattening required
- 70+ competitions β including niche leagues often absent from commercial APIs
βοΈ Input Configuration
Required
| Field | Type | Description |
|---|---|---|
leagues | string[] | Leagues to scrape. Accepts human-readable names or ESPN slugs. |
Optional
| Field | Type | Default | Description |
|---|---|---|---|
dataTypes | string[] | ["standings","scoreboard"] | Which data types to collect per league |
includeMatchData | boolean | false | Fetch full stats + lineups per match (requires scoreboard) |
maxItemsPerLeague | integer | 50 | Max records per data type. Set 0 for no limit. |
proxyConfiguration | object | Direct | Proxy settings. Residential recommended for large runs. |
Example Input
{"leagues":["Premier League","UEFA Champions League","MLS"],"dataTypes":["standings","scoreboard","teams","news"],"includeMatchData":false,"maxItemsPerLeague":50,"proxyConfiguration":{"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"]}}
Supported League Names (Sample)
| Name | ESPN Slug |
|---|---|
| Premier League | eng.1 |
| UEFA Champions League | uefa.champions |
| La Liga | esp.1 |
| Bundesliga | ger.1 |
| Serie A | ita.1 |
| Ligue 1 | fra.1 |
| MLS | usa.1 |
| Copa Libertadores | conmebol.libertadores |
| FIFA World Cup | fifa.world |
| Saudi Pro League | ksa.1 |
Tip: You can also pass ESPN slugs directly (e.g.,
"jpn.1"for J.League) if a league isn't in the name list.
π€ Output Format
One dataset item per league. Each item contains the league name, slug, scrapedAt timestamp, and an array for each requested data type.
Sample Output
{"league":"UEFA Champions League","slug":"uefa.champions","scrapedAt":"2026-06-26T10:30:00.000Z","standings":[{"team":"Real Madrid","abbreviation":"RM","logo":"https://a.espncdn.com/i/teamlogos/soccer/500/86.png","stats":{"gamesPlayed":"10","wins":"8","losses":"1","ties":"1","points":"25","pointsFor":"22","pointsAgainst":"8"}}],"scoreboard":[{"id":"699001","name":"Real Madrid vs Manchester City","date":"2026-06-20T19:00:00Z","status":"Final","venue":"Santiago BernabΓ©u","homeTeam":"Real Madrid","homeScore":"2","awayTeam":"Manchester City","awayScore":"1","url":"https://www.espn.com/soccer/match/_/gameId/699001"}],"teams":[...],"news":[...],"leaders":[...],"athletes":[...],"rankings":[...]}
Field Reference
Top-level:
leagueβ Name you provided as inputslugβ ESPN slug used internallyscrapedAtβ ISO 8601 timestamp of the run
standings[]: team, abbreviation, logo, stats{} (varies by league β GP, W, D, L, Points, GF, GA, GD)
scoreboard[]: id, name, date, status, venue, homeTeam, homeScore, awayTeam, awayScore, url β plus optional stats{} and lineups{} when includeMatchData: true
teams[]: id, name, shortName, abbreviation, location, logo, color, url
news[]: id, headline, description, published, url, image
leaders[]: category, value, athleteName, athleteId, teamName, teamAbbreviation
athletes[]: id, name, position, nationality, teamName, teamAbbreviation, age, photo
rankings[]: rankingName, rank, previousRank, teamName, points, firstPlaceVotes
βΆοΈ How to Use
Option 1: Apify Console (No Code)
- Open the Actor in the Apify Store and click Try for free
- In the Input tab, add your leagues (e.g.,
"Premier League","MLS") - Select the data types you need
- Click Start β results appear in the Output tab within seconds
Option 2: Apify API
curl-X POST \"https://api.apify.com/v2/acts/YOUR_ACTOR_ID/runs?token=YOUR_TOKEN"\-H"Content-Type: application/json"\-d'{"leagues": ["Premier League", "La Liga"],"dataTypes": ["standings", "scoreboard"],"maxItemsPerLeague": 50}'
Option 3: JavaScript SDK
import{ ApifyClient }from'apify-client';const client =newApifyClient({token:'YOUR_TOKEN'});const run =await client.actor('YOUR_ACTOR_ID').call({leagues:['Premier League','Bundesliga'],dataTypes:['standings','teams','leaders'],maxItemsPerLeague:100,});const{ items }=await client.dataset(run.defaultDatasetId).listItems();console.log(items);
π Use Cases
Fantasy Sports Platforms
Pull weekly standings, top scorers (leaders), and player rosters (athletes) across multiple leagues β without locking in to a monthly API subscription.
Sports Media & Newsletters
Automate your match results digest. Schedule the Actor to run nightly, then pipe scoreboard + news into your newsletter tool or CMS.
Betting Analytics
Build scoreboard datasets for prediction models. Combine match results with team standings for feature engineering across dozens of leagues.
Fan Apps & Dashboards
Power a multi-league standings dashboard with live data. The nested output structure maps directly to frontend state β no join queries needed.
Academic & Sports Research
Study performance trends, league parity, or player career trajectories across seasons with structured, citation-ready data.
π οΈ Advanced Tips
Reduce Costs on Large Runs
- Use
dataTypes: ["standings", "scoreboard"]as a baseline β most use cases only need these two - Set
maxItemsPerLeagueto cap scoreboard size for leagues with large fixture lists - Leave
includeMatchData: falseunless you specifically need per-match stats β it adds one extra HTTP request per game
Proxy Configuration
Direct requests work for small runs. For 10+ leagues or scheduled production runs, enable residential proxies:
{"proxyConfiguration":{"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"]}}
Scheduling
Use Apify's Scheduler to keep your dataset fresh. A daily run at 6 AM costs under $0.50 for 5 leagues β fully automated, no infrastructure required.
π° Pricing
Pay-per-event β you're only charged when data is actually collected.
| Event | Price |
|---|---|
| League scraped | $0.05 |
| Match detail fetched | $0.01 per match |
Example costs:
- 5 leagues, standings + scoreboard β $0.25
- 5 leagues + full match details (20 matches each) β $1.25
Free tier: 1 league, standings + scoreboard, up to 20 records β no credit card needed.
β FAQ
Do I need an ESPN account or API key? No. The Actor uses ESPN's public data feed β no authentication required.
How fresh is the data? Scoreboard data updates in near real-time during live matches. Standings and other data reflect the most recently completed state on ESPN.
Can I get historical season data? The Actor returns current-season data as served by ESPN's live endpoints. Historical seasons are not currently supported.
A league I need isn't in the name list β can I still use it?
Yes. Pass the ESPN soccer slug directly (e.g., "por.1" for Primeira Liga). Find slugs in the ESPN website URL for that league's page.
Why did a data type return 0 records?
Some data types aren't populated for all competitions. rankings is rarely available for club leagues, and leaders may be empty for tournaments between seasons. These return [] without failing the run.
Is this suitable for production use? Yes. Failed data types return empty arrays without crashing the run, proxy support is built in, and runs are hosted on Apify's infrastructure with automatic retries.
π Support
- Email: me@ahmedhrid.com
- Issues & feature requests: Use the Issues tab on the Actor page in the Apify Store
- Community: Apify Community Forum
