Flashscore APIflashscore.de ↗
Access Flashscore.de match listings, lineups with player ratings, match statistics, team rosters, and German football news via a single structured API.
What is the Flashscore API?
The Flashscore.de API exposes 7 endpoints covering football, tennis, and basketball data from the German-locale version of Flashscore, including match listings by sport and country, per-match lineups with individual player ratings, structured statistics (xG, possession, shots, corners, and more), team rosters with seasonal stats, and a German-language football news feed. The get_match_lineups endpoint in particular returns per-player rating fields unavailable from most public sports data sources.
curl -X GET 'https://api.parse.bot/scraper/4a508f5f-139d-43fa-9270-251ed9296e4c/get_matches?date=de_1&sport=1&country=0' \ -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 flashscore-de-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.
"""Walkthrough: Flashscore SDK — match data, lineups, statistics, team rosters, and news."""
from parse_apis.flashscore_de_api import Flashscore, Sport, TeamNotFound
client = Flashscore()
# List today's football matches worldwide (capped to 5 items)
for match in client.matches.list(sport=Sport.FOOTBALL, limit=5):
print(match.event_id, match.home_team, "vs", match.away_team, match.start_time)
# Drill into a single match for lineups and statistics
match = client.matches.list(sport=Sport.FOOTBALL, limit=1).first()
if match:
lineup = match.lineups()
print(lineup.event_id, lineup.home_team_average_rating, lineup.away_team_average_rating)
for player in lineup.players[:3]:
print(player.name, player.rating, player.side, player.is_best)
stats = match.statistics()
for section in stats.sections[:2]:
print(section.section_name)
for stat in section.stats[:3]:
print(stat.name, stat.home, stat.away)
# Batch lineups for multiple matches at once
for lineup in client.matches.batch_lineups(event_ids="2H6JIIeT,f5racMKi", limit=2):
print(lineup.event_id, len(lineup.players))
# Fetch a team roster with typed error handling
try:
team = client.teams.get(team_id="4jcj2zMd", team_slug="bayer-leverkusen")
print(team.team_name, team.total_players)
for player in team.players[:3]:
print(player.name, player.position, player.goals, player.nationality)
except TeamNotFound as exc:
print(f"Team not found: {exc}")
# Fetch the news feed
news = client.newsfeeds.get()
print(news.name)
for section in news.sections[:2]:
print(section.name, section.direction)
for article in section.articles[:2]:
print(article.title, article.published, article.article_type)
print("exercised: matches.list / match.lineups / match.statistics / matches.batch_lineups / teams.get / newsfeeds.get")
Retrieve match listings for a given sport and country. Returns parsed match sections including league headers and individual match entries with event IDs, team names, and start times. Pagination is not supported; one page of current/upcoming matches is returned. Default scope is all football worldwide.
| Param | Type | Description |
|---|---|---|
| date | string | Date/locale string for the feed. Use 'de_1' for today's German-locale feed. |
| sport | integer | Sport ID: 1=football, 2=tennis, 3=basketball. |
| country | integer | Country ID. 0 returns matches from all countries. |
{
"type": "object",
"fields": {
"raw": "string containing first 1000 chars of the raw decoded response",
"sections": "array of match/league objects with _type, event_id, home_team, away_team, start_time"
},
"sample": {
"data": {
"raw": "SA÷1¬~ZA÷ARGENTINIEN...",
"sections": [
{
"_type": "match",
"event_id": "l4TAoyFM",
"away_team": "Barracas Central 2",
"home_team": "Argentinos Juniors 2",
"start_time": "AD1781114400"
}
]
},
"status": "success"
}
}About the Flashscore API
Match Listings and Detail
The get_matches endpoint returns match listings filtered by sport (1=football, 2=tennis, 3=basketball), country, and an optional date string. Each entry in the sections array carries an event_id, home_team, away_team, and start_time. That event_id is the key that flows into every other per-match endpoint. get_match_detail accepts an event_id and returns key-value pairs covering team IDs, image references, and league standings data.
Lineups, Ratings, and Statistics
get_match_lineups returns a players array with player_id, name, team, side, rating, is_best, and number for each player, plus home_team_average_rating and away_team_average_rating at the match level. Ratings populate only for completed matches; the array will be empty for future fixtures or non-football events. For batch workflows, get_player_ratings_for_matches accepts a comma-separated list of event_ids and returns aggregated player arrays for each, along with a total_matches count. get_match_statistics delivers sectioned stats — each section has a section_name and a stats array of objects with name, home, and away values, covering metrics such as xG, possession, shots on target, corners, fouls, passes, and cards.
Rosters and News
get_team_roster requires both a team_id and a team_slug (both taken from the team's Flashscore.de URL). It returns a players array with position, number, name, nationality, age, matches_played, minutes_played, goals, assists, and a player_url. Invalid ID/slug combinations return a stale_input indicator rather than silently failing. get_news requires no parameters and returns a structured feed of German-locale football articles, each with a title, timestamp, and image URL.
The Flashscore API is a managed, monitored endpoint for flashscore.de — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when flashscore.de 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 flashscore.de 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?+
- Build a live match tracker that pulls fixtures by sport and country from
get_matchesand refreshes scores viaget_match_detail. - Aggregate player performance ratings across a season using
get_player_ratings_for_matcheswith a batch of event IDs. - Populate a fantasy football dashboard with per-match ratings,
is_bestflags, and team average ratings fromget_match_lineups. - Power a statistics comparison tool using xG, possession, and shot data returned by
get_match_statistics. - Sync a team squad page with current roster data — goals, assists, minutes, and nationality — from
get_team_roster. - Display a German-language football news widget using titles, timestamps, and images from
get_news. - Identify top-rated players across multiple matches by iterating
get_player_ratings_for_matcheson a full matchday's event IDs.
| 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 Flashscore have an official public developer API?+
When are player ratings missing from `get_match_lineups`?+
players array will be empty for matches that have not yet been played or for sports other than football. For completed football matches, individual rating values and the home_team_average_rating / away_team_average_rating fields are populated.Does the API cover live in-play events or match incidents (goals, cards, substitutions)?+
How do I find the correct `team_id` and `team_slug` for `get_team_roster`?+
/team/{team_slug}/{team_id}/. Passing a mismatched pair returns a stale_input indicator rather than an error, so verifying the combination against the actual URL before calling is advisable.Is tennis or basketball statistics data available the same way as football?+
get_matches endpoint accepts sport IDs for football (1), tennis (2), and basketball (3), returning event listings for all three. However, the lineups and statistics endpoints are oriented toward football; the players array will be empty for non-football matches. Coverage of tennis or basketball-specific stats is not currently included. You can fork this API on Parse and revise it to add sport-specific stat endpoints.