OSopensport.dev
Interactive

Demo

Click Run on any snippet to call a live API returning realistic Premier League data. No API key or account needed.

Upcoming fixtures

Fetch the next Premier League matchweek — all ten Matchweek 30 fixtures.

get_events()
python
from opensport.providers.mock import MockProvider
 
# Initialise provider (zero API keys required)
provider = MockProvider(seed=42)
 
# Fetch all scheduled Premier League matches
events = provider.get_events(
sport="soccer", status="scheduled"
)
 
for event in events:
print(event.summary())

Compare bookmaker prices

Fan out to Cloudbet, Stake, and Polymarket and surface the best available price for each outcome. Fetches the next scheduled PL match live.

get_odds()
python
from opensport.providers import ProviderRegistry, MultiProvider
 
# Auto-loads providers from env vars
registry = ProviderRegistry.from_env()
provider = MultiProvider(registry)
 
# get_odds() fans out to all active bookmakers
events = provider.get_events(sport="soccer", status="scheduled")
snap = provider.get_odds(events[0].id) # next match
 
for market in snap.markets:
for o in market.outcomes:
print(o.bookmaker, o.label, o.decimal_odds)

Scan for value bets

Strip bookmaker overround to find fair probabilities, then surface positive-EV opportunities sorted by edge.

get_value_bets()
python
from opensport.providers.mock import MockProvider
from opensport.utils import get_value_bets
 
provider = MockProvider(seed=42)
 
# Surface all +EV opportunities above 2% edge
bets = get_value_bets(
provider,
sport="soccer",
min_edge_pct=0.02,
)
 
for b in bets:
print(f"{b['outcome_label']} @ {b['decimal_odds']:.2f} edge={b['edge_pct']:.1f}%")

Search by team name

Case-insensitive substring search across all events — handy for tracking a specific club across competitions.

find_events()
python
from opensport.providers.mock import MockProvider
 
provider = MockProvider(seed=42)
 
# Case-insensitive substring match on team name
fixtures = provider.find_events(team="Arsenal")
 
for e in fixtures:
print(e.summary())

Live match score

Poll a live match for the current scoreline and minute. Returns real-time data from Football-Data.org when an API key is set — mock in-progress data otherwise.

get_live_score()
python
from opensport.providers.mock import MockProvider
 
provider = MockProvider(seed=42)
 
# Get all currently live events
live_events = provider.get_events(status="live")
 
# Fetch the current scoreline
score = provider.get_live_score(live_events[0].id)
 
print(f"{score['home_team']} {score['home_score']} – {score['away_score']} {score['away_team']} ({score['minute']}′)")