Fussballdaten APIfussballdaten.de ↗
Access soccer match schedules, scores, and team data from fussballdaten.de. Covers Bundesliga, Premier League, La Liga, Champions League, and more.
What is the Fussballdaten API?
The fussballdaten.de API exposes 4 endpoints for retrieving soccer match data across German and European competitions. Use get_matches_by_date to pull all fixtures and scores for any calendar date, get_upcoming_matches to scan ahead up to 60 days with optional team filtering, get_team_schedule for a club's full-season results and fixtures, and search_teams to resolve team slugs. Response objects include kick-off times, half-time scores, competition names, league group filters, and team rankings.
curl -X GET 'https://api.parse.bot/scraper/8b3591cb-cd83-4dfe-8492-35c438b61d6e/get_matches_by_date?date=2026-07-11&filter=all' \ -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 fussballdaten-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.
from parse_apis.fussballdaten_de_soccer_matches_api import Fussballdaten, MatchFilter, Team, MatchDay
client = Fussballdaten()
# Search for teams to find their slugs
for team in client.teams.search(query="bayern"):
print(team.name, team.slug, team.url)
# Get a specific team's full season schedule
bayern = client.team("fc-bayern-muenchen")
for match in bayern.matches.list():
print(match.date, match.home_team, match.away_team, match.venue, match.score)
# Get today's matches filtered to German leagues
day = client.matchdays.get(filter=MatchFilter.DEUTSCH)
print(day.date, day.total_matches)
for match in day.matches:
print(match.competition, match.home_team, match.away_team, match.kick_off_time)
# Get upcoming matches across top European leagues
for match in client.matchdays.upcoming(days=7, filter=MatchFilter.TOPLIGEN):
print(match.date, match.home_team, match.away_team, match.competition)
Retrieve all soccer matches scheduled for a specific date across all tracked competitions. Returns match details including teams, scores (for completed matches), kick-off times (for upcoming), and competition context. Supports filtering by league group. When no date is provided, returns today's matches.
| Param | Type | Description |
|---|---|---|
| date | string | Date in YYYY-MM-DD format. When omitted, returns today's matches. |
| filter | string | Filter matches by league group. |
{
"type": "object",
"fields": {
"date": "string - The date queried in YYYY-MM-DD format",
"filter": "string - Filter applied",
"matches": "array of match objects with competition, home_team, away_team, kick_off_time or score/half_time_score, match_url, match_id",
"total_matches": "integer - Total number of matches returned"
},
"sample": {
"data": {
"date": "2026-06-10",
"filter": "all",
"matches": [
{
"date": "2026-06-10",
"score": "2:1",
"match_id": "878963",
"away_team": "Nigeria",
"home_team": "Portugal",
"match_url": "https://www.fussballdaten.de/freundschaftsspiele/2026/portugal-nigeria/",
"competition": "International, Freundschaftsspiele",
"half_time_score": "1:1"
},
{
"date": "2026-06-10",
"score": "2:0",
"match_id": "870368",
"away_rank": 12,
"away_team": "Norrby IF",
"home_rank": 1,
"home_team": "Varbergs BoI",
"match_url": "https://www.fussballdaten.de/schweden/superettan/2026/11/varbergsboi-norrbyif/",
"competition": "Schweden, Superettan, 11. Spieltag",
"half_time_score": "1:0"
}
],
"total_matches": 14
},
"status": "success"
}
}About the Fussballdaten API
Match Data by Date and Lookahead
get_matches_by_date accepts a date parameter in YYYY-MM-DD format and an optional filter parameter (all, deutsch, topligen, etc.) to narrow results to a league group. Each match object in the response carries home_team, away_team, competition, kick_off_time for upcoming matches, and score plus half_time_score for completed ones. Omitting date returns today's fixtures. The total_matches integer tells you how many records came back without counting the array manually.
get_upcoming_matches lets you look ahead from today by setting days (up to 60). Pass a comma-separated teams string to scope results to specific clubs using case-insensitive partial matching — for example, 'Bayern,Dortmund' — useful when you only care about a handful of sides across all competitions. The response includes home_rank and away_rank fields alongside match_url and match_id, which link directly to the source detail page.
Team Schedule and Club Discovery
get_team_schedule returns a full-season view for one club across all competitions — league, cup, and continental. It requires a team_slug such as fc-bayern-muenchen or borussia-dortmund. Past matches include scores; future matches include kick-off times. The venue field marks each fixture as home or away. Use search_teams first to find valid slugs: pass a query string for a partial-match search, or omit it to list all available teams. Each result includes name, slug, url, and optionally country.
The Fussballdaten API is a managed, monitored endpoint for fussballdaten.de — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when fussballdaten.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 fussballdaten.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 Bundesliga match calendar that surfaces kick-off times and half-time scores for each matchday.
- Set up fixture alerts for specific clubs by filtering
get_upcoming_matcheswith a team name list. - Aggregate weekly fixtures across Champions League and Europa League for a multi-competition dashboard.
- Track a team's home-versus-away record using the
venuefield inget_team_scheduleresponses. - Populate a fantasy football app with upcoming fixtures and results for top European leagues.
- Cross-reference
home_rankandaway_rankdata from upcoming matches to build form-based previews.
| 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 fussballdaten.de offer an official public developer API?+
What does the `filter` parameter in `get_matches_by_date` actually control?+
deutsch returns German leagues including Bundesliga, 2. Bundesliga, 3. Liga, and Regionalliga. topligen returns top European competitions. all returns everything. Omitting it defaults to all matches for the given date.Does the API return live in-match scores or only pre-match and full-time data?+
score plus half_time_score for completed ones. Live in-progress scores are not currently distinguished as a separate state in the response. You can fork this API on Parse and revise it to add a live-match polling endpoint.