Sofascore Scraper - Teams, Players, Matches, No Login
Pricing
$3.00 / 1,000 result scrapeds
Sofascore Scraper - Teams, Players, Matches, No Login
Search Sofascore by team, player or league keyword and get back the entity plus fixtures with scores. Flat $0.003 per result, no extra fees, no login needed.
Why use this scraper
Sofascore is the fastest-updating sports data site on the web for football, basketball, tennis and dozens of other sports, but it has no public API and its pages are rendered from a heavily obfuscated internal JSON feed that changes often. Anyone who wants Sofascore data in a spreadsheet, a betting model, a fan app or a content pipeline either reverse-engineers that feed themselves or pays someone who already did. This actor does that work for you: give it a single search keyword and it resolves the entity (team, player or tournament), returns clean structured JSON, and, for teams, also pulls the recent and upcoming fixtures with live or final scores. No login, no cookies, no browser automation to maintain.
Overview
Input is one search term per call (run it with an array of terms via Apify's input list, or fan out multiple runs for a full roster). Output is one JSON item per match for the top entity that the search resolves to, plus one item per fixture when the entity is a team and fixtures are requested. A typical single-team search with fixtures completes in a few seconds and returns between 1 and ~20 items depending on how many recent and upcoming matches the team has. You are billed per result item, not per page load or per minute of run time, so a search that resolves to one player costs a fraction of a cent.
Supported inputs
- Team name (e.g.
"Manchester City","Real Madrid") - returns the team entity and, whenincludeMatchesis on, its recent and upcoming fixtures with scores. - Player name (e.g.
"Erling Haaland","Djokovic") - returns the player entity: Sofascore id, slug, country, and follower count (userCount). - Tournament or league name (e.g.
"Premier League",) - returns the tournament entity with its Sofascore id and URL."Champions League" - maxItems caps the total items returned per run, useful for keeping a single call cheap while testing.
Use cases
- Betting and prediction models: pull a team's last and next fixtures with final or live scores as one of your model's structured inputs.
- Sports stats dashboards: track form across a season for any team by re-running the same keyword on a schedule.
- Fan and content apps: resolve a player or team name typed by a user straight to a Sofascore id, slug and canonical URL for deep linking.
- Scouting and research: look up a tournament or player and get back the exact entity Sofascore tracks, disambiguated from similarly named teams in other sports or countries.
- Sports journalism automation: feed match results into recap or preview generation without manually checking scores.
How it works
The actor queries Sofascore's own public search endpoint for the keyword,
takes the best-matching entity (team, player or tournament), and normalizes
it into one flat JSON record with a consistent set of fields across all
three entity types. When the top match is a team and includeMatches is
true, it makes a second call for that team's event list and emits one
record per fixture, with home and away team names, score and match status
already parsed out instead of left as nested Sofascore internals. This
means you get the same field names (name, score, startTime, url...)
no matter whether you searched for a team, a player or a league, so
downstream code does not need a different parser per entity type.
Input configuration
Team search with fixtures:
{"searchTerm": "Manchester City","includeMatches": true,"maxItems": 50}
Player search (fixtures are skipped automatically for non-team entities):
{"searchTerm": "Erling Haaland","includeMatches": true,"maxItems": 10}
Team entity only, no fixtures, for a lighter and cheaper run:
{"searchTerm": "Real Madrid","includeMatches": false,"maxItems": 1}
Tournament lookup:
{"searchTerm": "Premier League","includeMatches": false,"maxItems": 5}
Output sample
Real items from a production run (October 2026), searching
"Manchester City"[{"type": "team","name": "Manchester City","sport": "Football","country": "England","team": null,"homeTeam": null,"awayTeam": null,"score": null,"startTime": null,"userCount": 4417170,"sofascoreId": 17,"slug": "manchester-city","url": "https://www.sofascore.com/team/manchester-city/17","searchTerm": "Manchester City","scrapedAt": "2026-10-02T09:25:25.847Z"},{"type": "player","name": "Erling Haaland","sport": null,"country": "Norway","team": "Manchester City","homeTeam": null,"awayTeam": null,"score": null,"startTime": null,"userCount": 1136426,"sofascoreId": 839956,"slug": "erling-haaland","url": "https://www.sofascore.com/player/erling-haaland/839956","searchTerm": "Manchester City","scrapedAt": "2026-10-02T09:25:25.847Z"},{"type": "player","name": "Enzo Fernández","sport": null,"country": "Argentina","team": "Manchester City","homeTeam": null,"awayTeam": null,"score": null,"startTime": null,"userCount": 168150,"sofascoreId": 974505,"slug": "enzo-fernandez","url": "https://www.sofascore.com/player/enzo-fernandez/974505","searchTerm": "Manchester City","scrapedAt": "2026-10-02T09:25:25.847Z"}]
When includeMatches resolves fixtures for a team, each fixture item adds
tournament, homeTeam, awayTeam, score (e.g. "2-1" or null for a
match not yet played), statusType and statusDescription on top of the
same base shape.
Key output fields
| Field | Type | Description |
|---|---|---|
type | string | team, player, tournament or match. |
name | string | Display name of the entity, or "Home vs Away" for a match. |
sport | string/null | Sport name, when available for the entity. |
country | string/null | Country associated with the entity. |
team | string/null | Club name, for player entities. |
tournament | string/null | League or competition name, for match items. |
homeTeam / awayTeam | string/null | Set only on match items. |
score | string/null | "home-away" goals/points, null if not played yet. |
statusType / statusDescription | string/null | Match state (e.g. finished, not started) and its label. |
startTime | string/null | ISO timestamp of kickoff, for match items. |
userCount | integer/null | Sofascore follower count for the entity. |
sofascoreId | integer | Sofascore's internal id for the entity or event. |
slug | string/null | URL slug used by Sofascore. |
url | string | Canonical Sofascore URL for the entity or match. |
searchTerm | string | The keyword you searched, echoed back for traceability. |
scrapedAt | string | ISO timestamp of when the item was scraped. |
Pricing
| Event | Price |
|---|---|
| Result scraped (each team, player, tournament or match item) | $0.003 |
Pay per result only. No charge for a search that returns 0 results, and no separate charge for fetching a team's fixtures beyond the fixture items themselves.
What makes this richer than the competition
Two other Sofascore scrapers on the Apify Store, by users in the last 30
days: abotapi/sofascore-scraper (72) and scrapesmith/sofascore-scraper
(23). Both expose a much wider field set (odds, lineups, standings) aimed
at users who already know the exact match or team URL they want. This
actor is built for the opposite entry point: one plain-text keyword in,
with automatic resolution to the right team, player or tournament and,
for a team, its fixtures in the same call, no URL hunting required.
On price, abotapi/sofascore-scraper charges a per-result base of $0.002
to $0.001 (tiered by plan) plus a separate fee per "detail enrichment"
page, and scrapesmith/sofascore-scraper adds a flat $0.005 actor-start
fee on top of its per-result price. This actor charges one flat $0.003 per
result and nothing else, so the final bill is predictable before you run
it.
Notes & limitations
- The actor returns the single best-matching entity for your keyword, not
a full search results list. A precise
searchTerm(full team or player name) gives the most reliable match. - Fixtures (
includeMatches) only populate when the resolved entity is a team; player and tournament searches return the entity record only. scoreisnullfor fixtures that have not been played yet and for all non-match items.- Sofascore runs bot protection on its search endpoint. A run can
occasionally come back with a
warningitem and 0 real results if a request gets blocked; simply re-running the same search normally succeeds. This actor does not retry automatically within a single run. - Only the top-level entity is scraped: full player career stats, team rosters beyond what the search endpoint returns, or odds are not part of this actor's output.
FAQ
Does this need a Sofascore account or login? No. Every field comes from Sofascore's public search, which is open without authentication.
Can I search for a league or cup instead of a team?
Yes, searchTerm accepts tournament and competition names and returns a
tournament type item with its Sofascore id and URL.
Why did my run return a warning and no data?
Sofascore's bot protection blocked that specific request. Re-run the same
search; it typically succeeds on a retry.
Can I get a full season schedule for a team?
includeMatches returns the team's recent and upcoming fixtures as
Sofascore currently lists them, not a full historical season archive.
Does maxItems limit fixtures separately from the team entity?
No, maxItems caps the total item count for the run, team or player entity
included.
Is the score live or only final?
Both. statusType and statusDescription tell you whether a match is
finished, in progress or not started yet, and score reflects the current
state.
For AI Agents & LLM Apps
This actor is callable directly from an MCP-compatible client at
mcp.apify.com, or via the standard Apify API. Example with the
run-sync-get-dataset-items endpoint, which runs the actor and returns the
dataset items in one call:
curl "https://api.apify.com/v2/acts/gio21~sofascore-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"searchTerm": "Manchester City", "includeMatches": true, "maxItems": 10}'
Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Sofascore or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.
SEO Keywords
sofascore scraper, sofascore api, football scores scraper, live sports scores api, team fixtures scraper, sports data scraper