Oddsplug APIOddsplug.com ↗
Find profitable arbitrage betting opportunities across multiple sports and game types through Oddsplug's real-time odds data. Identify mismatches in betting lines to lock in guaranteed returns regardless of the game outcome.
curl -X POST 'https://api.parse.bot/scraper/b18e2890-0c53-4b64-a103-511091e6d8f1/fetch_arbitrages' \
-H 'X-API-Key: $PARSE_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"sport": "All",
"game_type": "prematch"
}'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 oddsplug-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: Oddsplug SDK — fetch arbitrage opportunities across sports."""
from parse_apis.oddsplug_com_api import Oddsplug, Sport, GameType, InvalidInput
client = Oddsplug()
# List all prematch arbitrage opportunities, capped at 5
for arb in client.arbitrages.list(sport=Sport.ALL, game_type=GameType.PREMATCH, limit=5):
print(arb.sport, arb.market_name, arb.arb_percentage)
for bm in arb.bookmakers:
print(f" {bm.bookmaker}: market={bm.market}, odd={bm.odd}")
# Filter to Football only
football_arb = client.arbitrages.list(sport=Sport.FOOTBALL, limit=1).first()
if football_arb:
print(f"Football arb: {football_arb.tournament} | {football_arb.market_name} | {football_arb.arb_percentage}%")
print(f" Starts: {football_arb.start_at_timestamp}, Created: {football_arb.created_at}")
# Handle invalid input gracefully
try:
for arb in client.arbitrages.list(sport=Sport.BASKETBALL, game_type=GameType.LIVE, limit=3):
print(arb.arb_id, arb.market_code)
except InvalidInput as exc:
print(f"Invalid input: {exc}")
print("exercised: arbitrages.list with sport/game_type filters, bookmaker field access")
Fetch current arbitrage betting opportunities. Returns a list of arbitrage opportunities showing the market, bookmakers involved, and the arbitrage percentage. Results can be filtered by sport and game type (prematch or live). Some fields (team names, odds) may be obscured for unauthenticated access.
| Param | Type | Description |
|---|---|---|
| sport | string | Sport to filter arbitrage opportunities by. |
| game_type | string | Type of game to filter by. |
{
"type": "object",
"fields": {
"total": "integer",
"arbitrages": "array of arbitrage opportunity objects with id, sport, tournament, market, bookmakers, and arb_percentage"
},
"sample": {
"data": {
"total": 14,
"arbitrages": [
{
"id": "6a3c2e784f873529e80f30bd",
"sport": "Football",
"arb_id": "e74fe0795405dd9a30194a9bb10936ce",
"status": 1,
"start_at": "xxxx",
"game_type": "prematch",
"bookmakers": [
{
"odd": "xx",
"away": "xxxxxx",
"home": "xxxxxx",
"icon": "https://oddsplug.com/bucket/bookmakers/msport.png",
"odds": {
"ov": "xx",
"un": "xx"
},
"teams": "xxxxxx vs xxxxxx",
"market": "ov",
"bookmaker": "MSport"
},
{
"odd": "xx",
"away": "xxxxxx",
"home": "xxxxxx",
"icon": "https://oddsplug.com/bucket/bookmakers/betwgb1.png",
"odds": {
"ov": "xx",
"un": "xx"
},
"teams": "xxxxxx vs xxxxxx",
"market": "un",
"bookmaker": "BetWGB"
}
],
"created_at": "2026-06-24T19:22:32.873Z",
"tournament": "xxxxx > xxxxx",
"updated_at": "2026-06-24T21:00:08.509Z",
"market_code": "ou_25",
"market_name": "Full time over/under 2.5",
"arb_percentage": "0.09",
"start_at_timestamp": 1782378000
}
]
},
"status": "success"
}
}About the Oddsplug API
The Oddsplug API on Parse exposes 1 endpoint for the publicly available data on Oddsplug.com. Calls return JSON over HTTPS and are billed per successful response.
Pin a release with the API-Snapshot-Version header so canonical updates don't silently change your contract.