Use case: Python dashboard builders
Build a positive EV dashboard in Streamlit
A small Python dashboard that polls EV candidates, shows the consensus behind each edge, and logs entries for CLV grading.
Who this is for
Python developers who want an OddsJam-style EV screen they own: a Streamlit page that polls the EV endpoint, explains each candidate against the no-vig consensus, and writes every logged entry to a file for later grading.
- Poll /ev per sport inside st.cache_data with a short TTL
- Render candidates with edge, book, and price columns
- Show the no-vig consensus beside each candidate for context
- Log entries you act on, then grade them later with the CLV endpoints
The three endpoints this build uses
GET /v1/sports/{sport_key}/evPositive EV candidates with edge percentages, computed against a no-vig consensus from real book prices.GET /v1/sports/{sport_key}/consensusThe fair line behind each edge, so the dashboard can show why a price is flagged instead of asking for blind trust.GET /v1/sports/{sport_key}/line-movementWhat moved since the last poll, which turns a static table into a dashboard worth leaving open.Working code
import requests, streamlit as st
st.title("Positive EV board")
sport = st.selectbox("Sport", ["basketball_nba", "americanfootball_nfl", "baseball_mlb"])
@st.cache_data(ttl=120)
def load(sport_key):
return requests.get(
f"https://parlay-api.com/v1/sports/{sport_key}/ev",
headers={"X-API-Key": st.secrets["PARLAY_KEY"]},
).json()
st.dataframe(load(sport))
Which tier fits
Prototype the whole page against the keyless sandbox routes under /v1/sandbox, then move to a real key. The 120 second cache above keeps a one-sport dashboard modest on credits. Current limits are on the pricing page.
Example repo
Start from betting-model-starter, an open-source starting point for this exact build.
Build links
/answers/positive-ev-api/answers/oddsjam-api/use-cases/positive-ev-alerts