Sports APIsports.ru ↗
Access football league standings, match details, top scorers, and player profiles from Sports.ru across major tournaments via 6 structured endpoints.
What is the Sports API?
The Sports.ru API covers football data across major tournaments through 6 endpoints, returning league standings, match schedules, top scorer tables, and individual player profiles. The get_league_matches endpoint retrieves fixtures grouped by date with team info and scores, while get_match_details returns full lineups, match events, and per-team statistics by match slug. Tournament IDs from get_tournament_list serve as the common key across most other endpoints.
curl -X GET 'https://api.parse.bot/scraper/9d9626f6-544c-4498-81ed-7d7600d6cf06/get_tournament_list?sport_id=208' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace sports-ru-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Sports.ru API — browse tournaments, standings, matches, and player profiles."""
from parse_apis.Sports_ru_API import SportsRu, MatchStatus, SportId, NotFound
client = SportsRu()
# List available football tournaments (capped at 5)
for tournament in client.tournaments.list(sport_id=SportId._208, limit=5):
print(tournament.id, tournament.name)
# Construct a tournament by ID (EPL = 52) and get standings
epl = client.tournament(id=52)
standings_group = epl.standings.list(limit=1).first()
if standings_group:
for team in standings_group.teams[:3]:
print(team.place, team.team_info.name, team.score)
# Get recent matches for EPL, take the first date-group
match_day = epl.matches.list(status=MatchStatus.LAST, limit=1).first()
if match_day:
for entry in match_day.matches[:2]:
print(entry.first_team.name, entry.first_team.goals,
"-", entry.second_team.goals, entry.second_team.name)
# Fetch detailed match statistics with error handling
try:
detail = client.match_details.get(match_slug="1857018")
print(detail.info.home_team, "vs", detail.info.away_team, "|", detail.info.round)
for stat in detail.statistics[:3]:
print(f" {stat.name}: {stat.home} / {stat.away}")
except NotFound as exc:
print(f"Match not found: {exc}")
# Look up a player profile from top scorers
scorers = epl.top_scorers.list(limit=1).first()
if scorers and scorers.players:
top_player = scorers.players[0]
profile = client.player_profiles.get(player_slug=top_player.tag_url.split("/person/")[-1].strip("/"))
print(profile.bio.citizenship, profile.bio.club)
for season in profile.stats[:2]:
print(season.season, season.team, season.goals, "goals")
print("exercised: tournaments.list / tournament.standings / tournament.matches"
" / match_details.get / top_scorers.list / player_profiles.get")
Retrieves the list of football tournaments available on sports.ru. Only football (sport_id=208) returns data; other sport IDs yield empty results. Each tournament has an id usable in other endpoints and a localized Russian name.
| Param | Type | Description |
|---|---|---|
| sport_id | integer | ID of the sport. Only Football (208) is supported and returns data. |
{
"type": "object",
"fields": {
"tournament_list": "array of tournament objects each with id (integer) and name (string)"
},
"sample": {
"data": {
"tournament_list": [
{
"id": 195,
"name": "Чемпионат мира"
},
{
"id": 31,
"name": "Россия. Премьер-лига"
},
{
"id": 52,
"name": "Англия. Премьер-лига"
},
{
"id": 49,
"name": "Испания. Ла Лига"
}
]
},
"status": "success"
}
}About the Sports API
Tournament and League Data
Start with get_tournament_list, passing sport_id=208 (football is the only supported sport) to receive an array of tournament objects, each with an id and name. Use those IDs as the tournament_id parameter in downstream endpoints. get_league_standings returns a tournament_table array organized by group, with each entry carrying place, score, matches, and team_info — enough to reconstruct a full points table including qualification zone indicators.
Match Data
get_league_matches accepts a tournament_id and an optional status filter — 'last' for completed matches or 'future' for upcoming fixtures — and returns matches grouped by date. Each match object includes team info and scores. The base_url field on each match object doubles as the match_slug for get_match_details, which returns four data blocks: info (teams, tournament, round), events (goals and cards with minute, player, side, and type), lineups (starting XI and substitutes for each side), and statistics (per-team stat name/value pairs).
Player Data
get_league_top_scorers returns a players_stat array broken into named categories (goals, assists, and others), each listing player name, team, and stat values. The tag_url field on each player in those results is the slug for get_player_profile. That endpoint returns a bio object (birth date, nationality, club, position, height/weight) and a stats array with per-season rows covering matches, goals, assists, cards, and minutes across different teams and tournaments.
The Sports API is a managed, monitored endpoint for sports.ru — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when sports.ru changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official sports.ru API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Display live league standings tables with points, matches played, and qualification zones for major football tournaments
- Build a fixture calendar by fetching upcoming matches per tournament with
status=future - Show detailed match reports including starting lineups, substitutions, goal events, and per-team statistics
- Aggregate top scorer and assist leader rankings across tournaments using
players_statcategory data - Render full player career pages with season-by-season stats pulled from
get_player_profile - Track recent results for a specific league by querying
get_league_matcheswithstatus=last - Cross-reference player slugs from top scorer lists to retrieve biographical and career data
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Sports.ru have an official developer API?+
Which sports are covered by get_tournament_list?+
What does get_match_details return beyond the final score?+
info with teams, tournament, and round; events listing goals and cards with the minute, player name, side, and event type; lineups with starting XI and substitutes for both home and away teams; and statistics with named per-team stat pairs such as possession or shots.Does the API return live in-progress match data or odds?+
get_league_matches covers completed results and upcoming fixtures, and get_match_details reflects post-match data. Odds and live score feeds are not currently part of the API. You can fork it on Parse and revise to add a live-match endpoint if you need real-time score updates.Is historical season data available beyond the current standings and top scorers?+
get_player_profile returns multi-season career stats per player. However, historical standings snapshots and archived match data by season are not currently exposed through dedicated parameters — the standings and match endpoints reflect the current active season. You can fork this API on Parse and revise it to add season-scoped filtering endpoints.