Flashscore APIflashscore.es ↗
Retrieve pre-match 1X2 betting odds from Flashscore.es across all sports and leagues. Get daily match overviews or per-bookmaker odds with opening lines and movement.
What is the Flashscore API?
The Flashscore.es API provides pre-match betting odds data through 2 endpoints covering every sport and league on the platform. get_daily_odds returns all scheduled matches for a given day with 1X2 odds, team names, league, and start times. get_match_odds drills into a single event to return per-bookmaker odds including opening values, current values, and whether the line has moved up, down, or held steady.
curl -X GET 'https://api.parse.bot/scraper/84a9cb2a-05b5-4fff-b726-7442dcc662f6/get_daily_odds?sport=football&day_offset=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-es-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 Odds API — browse today's matches and drill into detailed odds."""
from parse_apis.flashscore_es_api import Flashscore, Sport, BetType, BetScope, InputFormatInvalid
client = Flashscore()
# List today's football matches with their headline 1X2 odds.
for match in client.matches.list(sport=Sport.FOOTBALL, day_offset=0, limit=5):
print(f"{match.home_team} vs {match.away_team} | {match.league}")
print(f" 1X2: {match.home_odds} / {match.draw_odds} / {match.away_odds}")
# Drill into one match for full bookmaker odds with movement info.
match = client.matches.list(sport=Sport.FOOTBALL, day_offset=0, limit=1).first()
if match is not None:
try:
odds = match.get_odds(bet_type=BetType.HOME_DRAW_AWAY, bet_scope=BetScope.FULL_TIME)
except InputFormatInvalid as e:
print(f"Invalid input: {e.message}")
else:
if odds.odds is not None:
for outcome_name, outcome in odds.odds.items():
print(f" {outcome_name}: {outcome.value} (opened {outcome.opening}, {outcome.change_type})")
print("exercised: matches.list / match.get_odds")
Returns all scheduled matches for a given sport and day with their primary 1X2 (home/draw/away) odds from the featured bookmaker. Each match includes league, country, team names, start timestamp, and current/previous odds. Makes two internal requests (matches feed + odds feed) per call. Results are not paginated; one call returns all matches for the day (typically 200-900+ for football).
| Param | Type | Description |
|---|---|---|
| sport | string | Sport to retrieve odds for. |
| day_offset | integer | Day offset from today. 0 = today, 1 = tomorrow, -1 = yesterday, etc. |
{
"type": "object",
"fields": {
"total": "integer total number of matches returned",
"matches": "array of match objects with event_id, league, country, home_team, away_team, start_time (unix), home_odds, draw_odds, away_odds, and previous odds values"
},
"sample": {
"total": 929,
"matches": [
{
"league": "ALEMANIA: 2. Bundesliga",
"country": "Alemania",
"event_id": "Ewns1nkl",
"away_odds": "4.75",
"away_team": "Cottbus",
"draw_odds": "4.2",
"home_odds": "1.62",
"home_team": "Arminia Bielefeld",
"start_time": 1786879800,
"bookmaker_id": "549",
"away_odds_previous": "3.6",
"draw_odds_previous": "3.8",
"home_odds_previous": "1.85"
}
]
}
}About the Flashscore API
Daily Match Odds
get_daily_odds accepts a sport parameter and a day_offset integer (0 for today, 1 for tomorrow, negative values for past days) and returns a list of all scheduled matches with their primary 1X2 odds. Each match object in the matches array includes event_id, league, country, home_team, away_team, start_time (Unix timestamp), and the current and previous home_odds, draw_odds, and away_odds from the featured bookmaker. The total field gives the count of matches returned for that day and sport combination.
Per-Match, Per-Bookmaker Odds
get_match_odds takes a required event_id (the 8-character alphanumeric identifier from get_daily_odds) plus optional parameters for bet_type, bet_scope, and bookmaker_id. Common bookmaker IDs include 1133 for FanDuel, 549 for bet365, 851 for BetMGM, and 1205 for DraftKings. The response returns an odds object with each outcome's current value, opening value, active status, and change direction (UP, DOWN, or NONE), making it straightforward to detect line movement since opening.
Bet Types and Scope
Beyond the standard 1X2 market, get_match_odds supports additional bet_type values covering over/under totals, both teams to score, Asian handicap, and double chance markets. The bet_scope parameter lets you target specific time windows within a match (e.g., first half). This allows coverage of multiple markets per event rather than limiting analysis to the full-match result.
The Flashscore API is a managed, monitored endpoint for flashscore.es — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when flashscore.es 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.es 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?+
- Track opening-to-current odds movement across bookmakers to identify sharp line shifts before kickoff
- Aggregate daily 1X2 odds across all leagues using get_daily_odds to feed a betting comparison dashboard
- Alert users when a specific match's odds change direction using the UP/DOWN/NONE movement field from get_match_odds
- Compare bet365 vs BetMGM odds on the same event by calling get_match_odds twice with different bookmaker_id values
- Build a historical odds dataset by archiving daily snapshots using the day_offset parameter
- Filter upcoming matches by start_time and country to surface only relevant fixtures for a regional betting product
- Analyze closing line value by comparing opening_value and current_value fields across multiple bookmakers
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.