Sofascore Scraper - Teams, Players, Matches, No Login avatar

Sofascore Scraper - Teams, Players, Matches, No Login

Pricing

$3.00 / 1,000 result scrapeds

Go to Apify Store
Sofascore Scraper - Teams, Players, Matches, No Login

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.

Pricing

$3.00 / 1,000 result scrapeds

Rating

0.0

(0)

Developer

Gio

Gio

Maintained by Community

Actor stats

0

Bookmarked

62

Total users

7

Monthly active users

12 days ago

Last modified

Categories

Share

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, when includeMatches is 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",
    "Champions League"
    ) - returns the tournament entity with its Sofascore id and URL.
  • 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

FieldTypeDescription
typestringteam, player, tournament or match.
namestringDisplay name of the entity, or "Home vs Away" for a match.
sportstring/nullSport name, when available for the entity.
countrystring/nullCountry associated with the entity.
teamstring/nullClub name, for player entities.
tournamentstring/nullLeague or competition name, for match items.
homeTeam / awayTeamstring/nullSet only on match items.
scorestring/null"home-away" goals/points, null if not played yet.
statusType / statusDescriptionstring/nullMatch state (e.g. finished, not started) and its label.
startTimestring/nullISO timestamp of kickoff, for match items.
userCountinteger/nullSofascore follower count for the entity.
sofascoreIdintegerSofascore's internal id for the entity or event.
slugstring/nullURL slug used by Sofascore.
urlstringCanonical Sofascore URL for the entity or match.
searchTermstringThe keyword you searched, echoed back for traceability.
scrapedAtstringISO timestamp of when the item was scraped.

Pricing

EventPrice
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.
  • score is null for 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 warning item 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