bet365 APIbet365.com.au ↗
Access live and upcoming betting markets with odds from bet365 Australia, plus a full sports category list. 2 endpoints, no auth setup required.
What is the bet365 API?
The bet365 Australia API covers 2 endpoints that return live and upcoming betting market data from bet365.com.au. The get_live_games endpoint delivers an array of market selections — each with odds, handicap values, fixture IDs, and selection names — while get_sports_list returns every sport and navigation category available on the platform, including path data and icon identifiers.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/c0fe2c86-eadf-4f33-b1b0-c76efe87f962/get_live_games' \ -H 'X-API-Key: $PARSE_API_KEY'
Point-in-time snapshot of every priced betting selection shown on the bet365 Australia homepage across all sports (soccer, tennis, baseball, rugby league, Australian rules, American football and whatever else is featured at the time), fetched in one call with no input parameters. The response has two views of the same data. `markets` is a flat list of selection rows, one per priced record in the source payload (the same selection may appear more than once when the site shows it in several panels; `total_markets` counts rows). Each row keeps the original fields (selection_id, selection_name, odds, handicap, fixture_id; empty string when absent) and adds identity fields that are null when the source payload does not publish them: sport_id / sport_name, competition_code (the site's short league code) / competition_name, fixture_name, home_team / away_team and their numeric team ids, fixture_start_time_utc (ISO 8601, UTC), market_id (the site's numeric market type) / market_name, participant_name (player the row belongs to in player-prop panels), handicap_or_line, odds_fractional, odds_decimal (fractional price converted to a 2-decimal decimal price, as the site displays it), market_state, provider_timestamp_utc (server time of the source response), bet_builder_id (id of the pre-built multi the row is a leg of) and source_record_type. `fixtures` groups the same selections by fixture_id, then by market_id, de-duplicated by selection_id, so grouping needs no inference; rows without a fixture_id (pre-built multi prices whose legs span several fixtures) appear only in `markets`. market_state is 'suspended' when the site flags the price suspended, 'upcoming' when the fixture start time is still ahead of the provider timestamp, 'started' when it has passed (this payload does not publish a live/closed flag), or null when no start time is known. For coupon-style panels the site labels selections only by column header (e.g. '1', 'X', '2', 'Line', 'Total', 'To Win'); selection_name then carries that label and the team the row belongs to is not published. sport_name comes from the payload where it labels the sport and otherwise from a fixed mapping of the site's sport ids; sport_id is always the site's id. home_team/away_team follow the site's display order ('Home v Away', or 'Away @ Home' for US sports). The set of fixtures and markets changes constantly as fixtures start, finish and the homepage is re-curated. Response size is large (typically a few thousand rows).
No input parameters required.
{
"type": "object",
"fields": {
"markets": "array of selection rows: legacy fields selection_id, selection_name, odds, handicap, fixture_id (strings, '' when absent) plus identity fields that are null when unpublished: sport_id, sport_name, competition_code, competition_name, fixture_name, home_team, away_team, home_team_id, away_team_id, fixture_start_time_utc (ISO UTC), market_id, market_name, participant_name, handicap_or_line, odds_fractional, odds_decimal (number), market_state (suspended|upcoming|started|null), provider_timestamp_utc, bet_builder_id, source_record_type (MA|PA|MG)",
"fixtures": "array of fixture groups {fixture_id, fixture_name, sport_id, sport_name, competition_code, competition_name, home_team, away_team, home_team_id, away_team_id, fixture_start_time_utc, markets:[{market_id, market_name, selections:[{selection_id, selection_name, participant_name, handicap_or_line, odds_fractional, odds_decimal, market_state, bet_builder_id, source_record_type}]}]} de-duplicated by selection_id",
"total_markets": "integer - number of selection rows in markets (duplicates across panels counted)",
"total_fixtures": "integer - number of distinct fixtures in fixtures",
"provider_timestamp_utc": "ISO 8601 UTC server time of the source response the snapshot was taken from"
},
"sample": {
"data": {
"markets": [
{
"odds": "711947/16000",
"handicap": "",
"sport_id": "1",
"away_team": null,
"home_team": null,
"market_id": null,
"fixture_id": "",
"sport_name": "Soccer",
"market_name": "Six-Folds",
"away_team_id": null,
"fixture_name": null,
"home_team_id": null,
"market_state": null,
"odds_decimal": 45.5,
"selection_id": "",
"bet_builder_id": "3189014",
"selection_name": "Six-Folds",
"odds_fractional": "711947/16000",
"competition_code": "UEFA-CL",
"competition_name": "UEFA Champions League",
"handicap_or_line": null,
"participant_name": null,
"source_record_type": "MG",
"fixture_start_time_utc": null,
"provider_timestamp_utc": "2026-09-08T10:00:12Z"
},
{
"odds": "17/10",
"handicap": "",
"sport_id": "1",
"away_team": "Aston Villa",
"home_team": "Club Brugge",
"market_id": "40",
"fixture_id": "200382665",
"sport_name": "Soccer",
"market_name": "Full Time Result",
"away_team_id": "100002",
"fixture_name": "Club Brugge v Aston Villa",
"home_team_id": "126282",
"market_state": "upcoming",
"odds_decimal": 2.7,
"selection_id": "2019772797",
"bet_builder_id": "3189014",
"selection_name": "Aston Villa",
"odds_fractional": "17/10",
"competition_code": "UEFA-CL",
"competition_name": "UEFA Champions League",
"handicap_or_line": null,
"participant_name": null,
"source_record_type": "MA",
"fixture_start_time_utc": "2026-09-08T17:45:00Z",
"provider_timestamp_utc": "2026-09-08T10:00:12Z"
}
],
"fixtures": [
{
"markets": [
{
"market_id": "40",
"selections": [
{
"market_state": "upcoming",
"odds_decimal": 2.7,
"selection_id": "2019772797",
"bet_builder_id": "3189014",
"selection_name": "Aston Villa",
"odds_fractional": "17/10",
"handicap_or_line": null,
"participant_name": null,
"source_record_type": "MA"
},
{
"market_state": "upcoming",
"odds_decimal": 2.5,
"selection_id": "2019772794",
"bet_builder_id": null,
"selection_name": "1",
"odds_fractional": "6/4",
"handicap_or_line": null,
"participant_name": null,
"source_record_type": "PA"
},
{
"market_state": "upcoming",
"odds_decimal": 3.6,
"selection_id": "2019772796",
"bet_builder_id": null,
"selection_name": "X",
"odds_fractional": "13/5",
"handicap_or_line": null,
"participant_name": null,
"source_record_type": "PA"
}
],
"market_name": "Full Time Result"
},
{
"market_id": "981",
"selections": [
{
"market_state": "upcoming",
"odds_decimal": 1.7,
"selection_id": "2019772799",
"bet_builder_id": "3189030",
"selection_name": "Over",
"odds_fractional": "7/10",
"handicap_or_line": "2.5",
"participant_name": null,
"source_record_type": "MA"
}
],
"market_name": "Total Goals"
}
],
"sport_id": "1",
"away_team": "Aston Villa",
"home_team": "Club Brugge",
"fixture_id": "200382665",
"sport_name": "Soccer",
"away_team_id": "100002",
"fixture_name": "Club Brugge v Aston Villa",
"home_team_id": "126282",
"competition_code": "UEFA-CL",
"competition_name": "UEFA Champions League",
"fixture_start_time_utc": "2026-09-08T17:45:00Z"
}
],
"total_markets": 2686,
"total_fixtures": 230,
"provider_timestamp_utc": "2026-09-08T10:00:12Z"
},
"status": "success"
}
}About the bet365 API
What the API Returns
The get_live_games endpoint returns all currently live and upcoming betting markets across every sport on the bet365 Australia homepage. Each item in the markets array includes a selection_id, selection_name, current odds, a handicap value where applicable, and a fixture_id tying the selection to a specific event. The response also includes a total_markets integer giving the count of all selections returned in the payload.
Sports and Navigation Coverage
The get_sports_list endpoint returns every sport and category currently listed on bet365.com.au. Each entry in the sports array carries a sport_name, a path_data value used for navigation, and an icon identifier. A total_sports count is included at the top level. This endpoint is useful for discovering which sports have active markets before querying odds data.
Inputs and Freshness
Neither endpoint accepts query parameters — both return a full snapshot of the current state of the bet365 Australia homepage at the time of the request. Because odds on live markets change frequently, repeated polling is the standard pattern for tracking movement. There is no built-in filtering by sport, event type, or time window within the API itself.
Data Shape Notes
Odds are returned per selection, not per event, so a single fixture will typically produce multiple markets entries — one for each betting option (e.g. home win, draw, away win). The fixture_id field is the consistent join key if you want to group selections belonging to the same event.
The bet365 API is a managed, monitored endpoint for bet365.com.au — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when bet365.com.au 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 bet365.com.au 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?+
- Monitor real-time odds movement across live bet365 Australia markets using repeated calls to
get_live_games - Build a sport-specific odds dashboard by filtering
marketsresults by sport after cross-referencingget_sports_listoutput - Track handicap values over time for specific fixtures using the
fixture_idandhandicapfields - Aggregate selection counts per sport to identify which categories have the most active in-play markets
- Alert on odds changes for a watched
fixture_idby diffing successiveget_live_gamesresponses - Enumerate available sports and their path data from
get_sports_listto drive navigation in a betting aggregator UI
| 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 bet365 Australia offer an official developer API?+
What does the `get_live_games` endpoint actually return for each selection?+
markets array contains five fields: selection_id (unique identifier for that betting option), selection_name (the label shown to bettors), odds (current decimal or fractional odds as returned), handicap (the line value, present where applicable), and fixture_id (links the selection to its parent event). The total_markets integer at the top level gives the total count of selections in the response.Can I filter results by a specific sport or event when calling `get_live_games`?+
selection_name or fixture_id fields. You can cross-reference sport categories returned by get_sports_list to build a mapping. If you need server-side filtering, you can fork the API on Parse and revise it to add a sport or fixture filter parameter.Does the API cover historical odds or settled markets?+
How fresh is the odds data, and does the API support streaming updates?+
get_live_games returns a point-in-time snapshot. Odds on live markets can shift within seconds, so the data reflects what was available at the moment of the request. The API does not support push or streaming updates; continuous polling is required to track changes over time.