BetExplorer APIBetexplorer.com ↗
Access daily football match schedules and 1X2 betting odds from BetExplorer. Retrieve scores, match status, and home/draw/away odds by date via one API endpoint.
What is the BetExplorer API?
The BetExplorer API exposes one endpoint — search_matches — that returns all football matches for a given date, covering 10 response fields per match including home/away teams, match status, final score, and 1X2 odds. Results are grouped by country and league, making it straightforward to ingest a full day's fixture list alongside opening or current betting lines in a single call.
curl -X GET 'https://api.parse.bot/scraper/5daf70d1-eaad-46ba-afbb-c57c0d5ebc3e/search_matches?date=2026-08-14' \ -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 betexplorer-com-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: BetExplorer SDK — bounded, re-runnable; every call capped."""
from parse_apis.betexplorer_com_api import BetExplorer, InvalidDate
client = BetExplorer()
# Search today's football matches with odds
for match in client.matches.search(limit=3):
print(match.home_team, "vs", match.away_team, "| Odds:", match.odds_home, match.odds_draw, match.odds_away)
# Search a specific date
match = client.matches.search(date="2026-07-24", limit=1).first()
if match:
print(match.country, match.league, match.home_team, match.away_team, match.score, match.status)
# Handle invalid date input
try:
client.matches.search(date="not-a-date", limit=1).first()
except InvalidDate as e:
print("invalid date:", e)
print("exercised: matches.search")
Retrieve all football matches scheduled or completed for a given date, grouped by country and league. Each match includes home/away teams, match status (FIN, upcoming time, live minute), final score when available, and 1X2 betting odds (home win, draw, away win). Results cover all leagues worldwide for the requested day. Odds are average closing odds; upcoming matches or reserve-league matches may have null odds.
| Param | Type | Description |
|---|---|---|
| date | string | Date to retrieve matches for, ISO format YYYY-MM-DD. Defaults to today (UTC). |
{
"type": "object",
"fields": {
"date": "the date queried, ISO format YYYY-MM-DD",
"matches": "array of match objects with event_id, country, league, home_team, away_team, time, status, score, odds_home, odds_draw, odds_away"
},
"sample": {
"data": {
"date": "2026-07-24",
"matches": [
{
"time": "",
"score": "3:0",
"league": "CECAFA Kagame Cup",
"status": "FIN",
"country": "Africa",
"event_id": "QgLJobgJ",
"away_team": "CF GR/SIAF",
"home_team": "Vipers",
"odds_away": "6.25",
"odds_draw": "3.55",
"odds_home": "1.45"
},
{
"time": "",
"score": "2:1",
"league": "Liga Profesional",
"status": "FIN",
"country": "Argentina",
"event_id": "pSjL3djo",
"away_team": "Rosario Central",
"home_team": "Belgrano",
"odds_away": "2.97",
"odds_draw": "2.91",
"odds_home": "2.57"
},
{
"time": "21:45",
"score": null,
"league": "Liga Profesional",
"status": "",
"country": "Argentina",
"event_id": "MosWPn7m",
"away_team": "Central Cordoba",
"home_team": "Gimnasia Mendoza",
"odds_away": null,
"odds_draw": null,
"odds_home": null
}
]
},
"status": "success"
}
}About the BetExplorer API
What the API Returns
The search_matches endpoint returns a structured list of football matches for any date you specify via the date parameter (ISO format YYYY-MM-DD). Omit the date and it defaults to today in UTC. Each match object includes event_id, country, league, home_team, away_team, time, status, score, odds_home, odds_draw, and odds_away. The top-level response also echoes back the date queried for easy reference.
Match Status and Score Fields
The status field distinguishes between finished matches (FIN), live matches (current minute), and upcoming fixtures (scheduled kick-off time). The score field is populated for completed matches and is empty or null for fixtures that haven't started. This lets you filter server-side for finished results, in-play events, or pre-match odds depending on your use case.
Odds Coverage
Odds are returned as three discrete fields — odds_home, odds_draw, and odds_away — representing the standard 1X2 market. The values reflect the odds available on BetExplorer for each fixture. Coverage spans matches across multiple countries and leagues within a single response, grouped naturally by country and league in the returned array.
The BetExplorer API is a managed, monitored endpoint for Betexplorer.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when Betexplorer.com 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 Betexplorer.com 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 daily football fixture dashboard showing match times, leagues, and 1X2 odds in one view.
- Track closing odds versus opening lines by calling
search_matchesat different points in the day. - Identify value bets by comparing
odds_home,odds_draw, andodds_awayacross fixtures from multiple countries. - Populate a sports betting tracker app with match results using the
scoreandstatusfields for completed games. - Generate a daily email digest of fixtures grouped by
countryandleaguewith pre-match odds attached. - Backfill historical match outcomes and odds by querying past dates using the
dateparameter. - Filter live matches from a full-day fixture list by checking the
statusfield for in-play minute values.
| 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.
Does BetExplorer have an official developer API?+
What does `search_matches` return for a date with no matches scheduled?+
date field and an empty matches array. The endpoint does not return an error for valid dates that simply have no fixtures listed.Does the API cover betting markets beyond 1X2, such as over/under or Asian handicap?+
odds_home, odds_draw, and odds_away per match. You can fork this API on Parse and revise it to add endpoints that pull additional market types.Can I retrieve matches for a specific league or country only?+
search_matches endpoint returns all matches for the given date without a built-in country or league filter — filtering needs to be done client-side on the country and league fields in the response. You can fork this API on Parse and revise it to add server-side filtering parameters for specific competitions.How fresh is the data for live matches?+
status shows the current minute and score reflects the latest available result, but there is no push or streaming mechanism — you need to poll search_matches repeatedly to track live updates.