← Back to Dashboard

📊 +EV Opportunity Tracking

Last refreshed: never
Active Opportunities
0
Avg EV%
0.0%
Best EV
0.0%
Total Value
$0
ℹ️
ℹ️
ℹ️
ℹ️
Found Game League Bet Type Market Type Type # Sharp Bookmaker Odds Initial Pinnacle FL Current Pinnacle FL Initial Consensus FL Current Consensus FL Initial EV (Pin) Current EV (Pin) Initial EV (Con) Current EV (Con) FL Source Confidence Sharp Books DQ Flag Source Pin Liq $ Sharp Liq $ Pred FL Δ Belief Pred Liq $ Initial Kelly% Current Kelly% Variance Start Time Status Act.
Loading opportunities...
Settled Bets
0
Win Rate
0%
Total Units
0.00
ROI
0%
Avg Initial EV
0%
Avg CLV
0%
Avg Edge Decay
0%
Avg Lead Time
-
Detection
Closing
Settlement
Found Event Date League Game Bet Bookmaker Initial Odds Initial EV% Close Odds CLV% Close EV% Edge Decay Lead Time Score Result Source Units +/- ROI% CLV Src Final Book Source Conf
Loading results...
Awaiting Results
0
Avg Time Waiting
-
CLV Captured
0
Expected Value
$0

Scheduled Close Captures (0)

Upcoming close capture tasks that will fetch closing odds near game start time.

Game League Game Start Next Capture Captures Source
Loading scheduled captures...

Games that have started but are waiting for final results to be fetched from result sources.

Event Date League Game Bet Bookmaker Initial EV% CLV% Time Since Start Close Capture CLV Source
Loading pending results...

All opportunities regardless of settlement status.

Found Event Date League Game Bet Bookmaker Initial EV% CLV% Status Result Units +/-
Loading all results...

Bookmaker Performance Analytics

Performance metrics per bookmaker based on historical opportunities from the last 30 days.

Bookmaker Total Opps Avg EV% Wins Losses Win Rate Profit (Units) Avg CLV%
Click "Refresh Stats" to load bookmaker analytics...

Active Opportunities -- Live right now

Distribution by Time Horizon

By Sport

Loading...

14-Day Trend

Total Opportunities
0
High EV (>5%)
0
Avg EV%
0%
Avg Opportunities/Day
0
Active Sources
0
Unique Leagues
0
Market Mix
0 1X2 0 ML 0 DNB 0 AH 0 Totals 0 Consensus Totals 0 Player Props

System Health & Flags Loading... Current issues only

Loading health indicators...

⚠️ Warning History

Detected Warning Details Affected Type Status
Loading warning history...

🔧 Service Reliability Loading...

Loading service health...

Error History (Last 7 Days)

Date Service Error Pattern Count Severity Status
Loading error history...

⏰ Automated Agents

🔍 Data Quality Agent
Investigates data anomalies, validates fairlines, checks for cross-game contamination
Schedule: Every 2h at :00
Last run: -
Next run in --:--:--
🔧 SRE Monitoring Agent
Monitors Render services, detects errors/outages, tracks service health patterns
Schedule: Every 2h at :30
Last run: -
Next run in --:--:--
Agents run via macOS launchd every 2 hours. Reports kept for 30 days.

Result Settlement Loading...

Overall Settlement
-
Soccer
-
Basketball
-
Ice Hockey
-
Missing Results
-

Daily Settlement Rate (Last 7 Days)

Date Total Settled Rate Worst Sport
Loading...
Settlement = past games with bet_result populated. Missing results are caused by TheSportsDB API 429 rate limits. Games must be 3+ hours past start time.

Result Linking Pipeline

Game Results (7d)
Linked to Opps
Unlinked Opps
Link Rate
League (unsettled) Pending Blocker
Loading...
Linking matches ev_opportunities to game_results by sport + team names + time window. Failures are usually team name mismatches or missing results.

Fairline Calibration by Sport

Sport Settled Expected Win% Actual Win% Calibration Error Status
Loading...
Calibration error = Actual Win% - Expected Win%. Negative means underperforming. Values beyond ±3% indicate potential fairline issues.

🤖 Data Quality Investigation Agent Loading...

Autonomous agent (powered by Claude Code) that investigates every indicator, examines every high EV opportunity, and produces detailed reports. Run manually: ./scripts/run_dq_agent.sh

Loading latest report...

📋 Report History

Time Status Type
Loading...

📊 Fairline Accuracy Fairline AccuracyMeasures how well fairlines predict outcomes. Compares actual win rates vs expected rates based on fairline probabilities. "Accurate" means within ±3% deviation. Loading...

Validates fairline quality by comparing different sources and detecting anomalies. Healthy fairlines are essential for accurate EV calculations.

Fairline Source Comparison

Source Count Avg EV% Win Rate Accuracy Alt EV% EV Δ
Loading...
Accuracy = Win Rate vs Expected. Alt EV% = avg EV if the other fairline source had been used. EV Δ = difference (positive = current source is more conservative).

Pinnacle vs Consensus Agreement

Sport Both Present Avg Diff High Diff (>5%) Agreement
Loading...
High disagreement between Pinnacle and Consensus may indicate data quality issues.

🔍 Fairline Anomalies Detected

Anomaly Type Count Last 24h Severity
Loading...

Fairline Coverage by Sport

Sport Events Has Pinnacle Has TFL Consensus Only No Fairline Coverage
Loading...

Confidence & Data Quality

Confidence Score Distribution

Band Count % Bar
Loading...

Data Quality Flag Distribution

Flag Count %
Loading...

Cross-Platform Matching Health

OddsJam SSE Coverage SSE CoverageFormula: events_with_sse / total_events × 100

Percentage of events in omenizer_queue that have real-time odds updates from OddsJam SSE stream.
--
Loading...
Multi-Platform Events (7d) Multi-Platform EventsFormula: events_with_2+_platforms / total_matched_events

Events in omenizer_queue with data from multiple sources (OddsJam, TheOddsAPI, BetBurger). Higher = better fairline triangulation.
--
Loading...
Multi-Platform Opps (24h) Multi-Platform OpportunitiesFormula: opps_with_2+_platforms / total_opps × 100

+EV opportunities where platforms_included array has 2+ entries. These have stronger confidence due to cross-verification.
--
Loading...
Cross-League Issues Cross-League IssuesCount of leagues where platform naming doesn't match (e.g., "UEFA Europa League" vs "UEFA - Europa League"). These block cross-platform matching.
--
Loading...

Cross-Platform Rate (Last 7 Days)

Opportunities with data from 2+ platforms

Date Opportunities Multi-Platform Rate Status
Loading...

Data Source Flow (Last 7 Days)

Opportunities by contributing platform (one opp can count for multiple platforms)

Date OddsJam TheOddsAPI BetBurger Status
Loading...

Data Freshness (Queue Status) Data FreshnessMeasures how recently odds in omenizer_queue were updated. Fresh data (<15min) is used for opportunity detection. Stale data is excluded to prevent acting on outdated prices.

Data older than 15 minutes is excluded from opportunity detection. Low freshness = missing from cross-platform merging.

Platform Fresh (<15min) Fresh RecordsRecords where updated_at is within last 15 minutes. These are eligible for +EV opportunity detection. Stale (>60min) Stale RecordsRecords not updated in 60+ minutes. Excluded from processing - may indicate scraper issues or low-volume leagues. Fresh % Freshness RateFormula: fresh / total × 100

Target: ≥70% for Good status. Low rates mean opportunities may be missed due to stale data.
Status
Loading...

🔀 Platform Divergence Detection 0

Opportunities where median odds differ >20% between data sources. This may indicate mapping issues, stale data, or mixed market types.

Divergence by Sport

Sport Divergent Total Rate Status
Loading...

Recent Divergent Opportunities

Event Sport EV% Platforms Detected
Loading...

🛡️ Market Data Validation 0

Markets rejected from fairline calculation due to invalid data. High rejection rates are expected for Soccer (2-way markets without draw) and incomplete SSE data. This prevents false +EV opportunities.

Sharp Book Availability Sharp Book AvailabilityFormula: events_with_sharp / total_events × 100

Percentage of matched events where at least 1 sharp bookmaker has odds across any platform source. Events without sharp data cannot produce fairlines.
--
Loading...
Fairline Coverage Fairline Coverage (given sharp data)Formula: events_with_fairline / events_with_sharp × 100

Of events that have sharp book odds, what % produced a fairline. 100% = engine converts every sharp signal. Event-level, deduplicated across platforms.
--
Loading...
Line Rejection Rate (24h) Line Rejection RateFormula: rejected_lines / total_lines × 100

Per-bookmaker line rejections. High rates (>95%) are normal — most soft books have missing odds or bad overround. Only 2-3 sharp books per game are needed for fairline calculation.
--
Loading...
Lines Processed (24h) Lines ProcessedTotal individual bookmaker lines validated in the last 24h. Each game has ~50-120 bookmaker lines; most are expected to be rejected.
--
Individual bookmaker lines
Trend (7d) Rejection TrendFormula: today_rate - yesterday_rate

Change in rejection rate compared to previous day. ↑ = increasing rejections (worse), ↓ = decreasing (better), → = stable (±2%).
--
Loading...

Daily Rejection Trend (Last 7 Days)

Date Rejections Opportunities Total Rejection Rate
Loading...

Rejections by Reason (24h)

Reason Count % of Total Severity
Loading...

Rejections by Sportsbook (24h)

Sportsbook Total Invalid Overround Both Positive Extreme Prob Missing Odds
Loading...

Liquidity Governance Loading... PRD v1.02 Appendix C

Actionable Rate
--
Loading...
Suppressed
--
Loading...
Avg Confidence (Exch. Included)
--
LIQUID / THIN exchanges
Avg Confidence (Exch. Excluded)
--
ILLIQUID / UNKNOWN exchanges

Actionable Rate Trend

Suppression Reasons

Why opportunities are non-actionable

Reason Count %
Loading...

Exchange Liquidity by Sport

Classification of exchange volume (LIQUID / THIN / ILLIQUID)

Sport Liquid Thin Illiquid Unknown
Loading...

League Breakdown (Upcoming Games)

League ↕ Sport Events ↕ Odds Records ↕ Fairline Cov. Opps (24h) ↕
Loading...

Mapping Issues

Issue Type Details Count Severity Suggested Action
Loading...

Daily Opportunities Found

Opportunities by EV Threshold

Platform Coverage Analysis

Coverage by # of Platforms

Platform Combinations

Combination Count Avg EV% %
Loading...

Platform Coverage Over Time

Bookmaker Performance

Top Bookmakers by Opportunities

Bookmaker Statistics

Bookmaker Opps Avg EV ≥5% EV ≥10% EV
Loading...

Top 5 Bookmakers Trend (Opportunities per Day)

Top Performing Leagues

Opportunities by League (Top 10)

League Statistics

League Opps Avg EV Win Rate ROI
Loading...

Top 5 Leagues Trend (Opportunities per Day)

Daily Breakdown

Date Total ≥1% EV ≥3% EV ≥5% EV ≥10% EV Avg EV Leagues Bookmakers
Loading...

Performance by EV Range

EV Range Count Win Rate Avg CLV ROI Total P&L
Loading performance data...

CLV Performance

CLV Range Count Win Rate Avg EV ROI Total P&L
Loading CLV data...

📊 League Coverage & Cross-Platform Analysis

--
Leagues
--
Total Events
--
Cross-Platform %
--
Active Opps
--
Mapping Gaps
-
Events vs Yesterday
League Platforms Events Days Ahead Cross-Platform Opportunities Opp Density Health
Loading league coverage data...
OddsJam TheOddsAPI BetBurger | 🟢 Healthy (2+ platforms, fresh) 🟡 Warning (1 platform or stale) 🔴 Critical (no data) ⚠️ Mapping gaps | More vs yesterday Less vs yesterday

🗺️ Team Mapping Health

--
Match Rate
-- mapped / -- seen
--
Unmapped Teams
blocking event matching
--
Leagues with Gaps
--
--
Stale Mappings
not used in 90+ days
⚠️ Top Unmapped Teams (Last 7 Days)
Team League Platform #
Loading...
📊 League Coverage Gaps (Worst First)
League Platform Coverage %
Loading...
Pinnacle Odds Divergence Monitor
Multi-Source Events
-
Avg Divergence
-
Max Divergence
-
PIN/TOA Exact Match
-
OJ Mkt Mismatch
-
PIN Direct Events
-
PIN Direct
-
TheOddsAPI w/ PIN
-
OddsJam w/ PIN
-
Event Sport PIN H/A TOA H/A OJ H/A Max Div% Src
Loading...
Compares Pinnacle odds from PIN direct, TheOddsAPI, and OddsJam. PIN/TOA should be ~0% (same CDN). OJ soccer uses draw_no_bet (not comparable to h2h).

Spider Run Health (Last 24h)

Run Status Distribution

Current Cycle

Loading...

Cycle Duration Trend

Scraping Freshness by Platform

Platform Last Scraped Age Status
Loading...

Stale Fairline Backlog

Stale Events
--
Total Upcoming
--
Stale Rate
--

Recent Spider Runs

Platform Started Duration Status
Loading...
Leagues with Opportunities
0
Missing ESPN Mappings
0
Unprocessed Past Games
0
Coverage Rate
0%

League Coverage Report

League Total Opps With Results Without Results Coverage % Result Sources Mapping Status Overall Status Action
Loading results tracker data...

Add Custom Mapping

Find ESPN slugs: Soccer | NBA | MLB - look at the URL (e.g., league=eng.1, league=nba)

Potential Name Mismatches

These leagues might have ESPN coverage under a different name:

Opportunity League Name Possible ESPN Match Similarity Action
Checking for mismatches...

League Details

Select a league to see its games and identify mapping issues:

Reprocess Results

After adding new ESPN mappings, you need to reprocess older games to fetch their results:

# Navigate to the ESPN scraper directory
cd scrapy-scraper/espn-results-scraper

# Run the fetch missing results script
python3 fetch_missing_results.py

# Or run the full pipeline (fetch + match + update)
python3 espn_scraper.py --once && python3 espn_matcher.py && python3 update_results.py

Note: The fetch_missing_results.py script targets games older than 72 hours and uses the ESPN Core API to search for results by team names and date. Make sure the config.json file has the correct database credentials.

Result Sources Statistics

Overview of all configured result sources, their mappings, and actual results obtained.

Total Sources
-
Active Mappings
-
Results Obtained
-
Overall Coverage
-
Source Type Configured Mappings Unique Leagues Results Obtained Result Leagues Coverage % Status
Loading...

EV Tracking Configuration

Only include games with odds updated within this time window when calculating EV opportunities
Method for removing bookmaker margin (vig) from odds to calculate fair probabilities.
Additive: Simple proportional removal (default)
Power: Adjusts for favorite-longshot bias
Shin: Accounts for informed bettors, best for soccer
Worst Case: Assumes all vig on your side (conservative)

🎯 Fairline Configuration

Configure sharp bookmaker weights, prediction market settings, and consensus bookmakers. These settings control how fairlines are calculated.

Weight determines influence in consensus. 0 = excluded, 1.0 = full weight.
These bookmakers are used for the Consensus fairline (public market mean).

🤖 Data Quality Agent Thresholds

Configure detection thresholds for the Data Quality Monitoring Agent. Values beyond these thresholds trigger warnings or critical alerts.

Outright / Futures Filters

Controls which outright EV opportunities are surfaced. These thresholds apply to multi-runner markets (tournament winners, championship futures, election outrights). Sport-specific overrides can be added via the database.

Minimum edge to surface. Below this, noise exceeds signal.
Above this, almost always a stale recreational price.
Ignore deep long-tail runners. Consensus unreliable below this.
Reject when rec book diverges this much from consensus (stale price).
Minimum sharp/exchange books for valid consensus.
Minimum runners for valid N-way devigging.
Below this = exchange suspended runner (Betfair 1.01 artifact).
Reject bookmakers with overround above this (corrupted data).

Indicators Reference

Expected Value (EV)

Raw EV%(decimal_odds × fair_probability - 1) × 100
Edge before any risk adjustment. Source: Pinnacle/Consensus fairline vs bookmaker odds.
Adjusted EV%raw_ev × haircut_factor
Risk-adjusted EV using empirical calibration. Haircut varies by segment (sport × market_type × market_state). Source: segment_calibration table, updated daily.
Current Best EVHighest EV across all recreational bookmakers for the selected devig method. Excludes sharps, exchanges, prediction markets, and cross-validation flagged bookmakers. Refreshed every 30s.

Fairlines

Pinnacle FairlineDevigged probabilities from Pinnacle's odds using the selected method (additive, multiplicative, power, shin, worst_case). Pinnacle is the primary sharp bookmaker — their prices reflect the most efficient market.
Consensus FairlineWeighted median of devigged probabilities from all non-Pinnacle sharp bookmakers (CEP = Consensus Excluding Pinnacle). Only available when 2+ sharps have odds. Used as cross-validation, not primary reference.
Devig MethodsAdditive: subtract equal margin from each outcome. Multiplicative: scale proportionally. Power: favorite-longshot bias correction. Shin: insider trading model. Worst Case: maximum margin removal (most conservative).

Market State

Classification of the opportunity's data quality structure. Drives haircut factors and EV thresholds.

STRONG SHARP3+ sharp bookmakers, native market. Best data quality.
MULTI SHARP2 sharp bookmakers, native market. Good independent price validation.
THIN SHARP1 sharp bookmaker (typically Pinnacle only). Higher variance, still actionable.
DERIVED STRONGDerived market (DNB, double chance) with 2+ sharps. Fairline derived from 3-way odds.
DERIVED THINDerived market with 1 sharp. Weakest structure — requires high EV threshold (5%+).

Note: Exchanges (Betfair, Matchbook) are NOT counted as sharp bookmakers. They provide an independent price signal via the Exchange Agreement indicator.

Confidence Score (0-100)

Penalty-based model starting at 100. Measures signal reliability, NOT edge magnitude. Recomputed every 30s refresh.

Sharp Depth0 to -60Non-Pinnacle sharp bookmakers contributing to the fairline for this specific line.
Sharp Diversity0 to -25Number of independent corporate pricing groups. 1 group = all sharp data from same entity.
Dispersion0 to -30Max probability spread among CEP sharp books. High dispersion = sharps disagree on fair price.
Market Derivation0 to -30-30 / sharp_count for derived markets (DNB, double chance). 3 sharps = -10, 1 sharp = -30.
Exchange Liquidity0 to -10Penalty when an exchange in the CEP has THIN liquidity classification.
Exchange Agreement-5 to +5Comparison of exchange devigged probability vs Pinnacle. Within 2% = confirms (+5), >5% = contradicts (-5). Source: Betfair, Matchbook.
Prediction Market-5 to +8Agreement between prediction market (Polymarket/Kalshi) and sharp fairline. Only when liquidity ≥ $1K. Weight scales with liquidity ($1K = ~1%, $100K+ = full). Source: Polymarket, Kalshi.
Prediction Mkt Penalty0 to -10Applied when the opportunity bookmaker IS a prediction market. Different market dynamics.
Data Quality0 to -50Penalties for: impossible_ev (>100%), low_sharp_dnb, odds/fairline mismatch, cross-market inconsistency.
Market Consensus Density-15 to +10Other recreational bookmakers within 5% of opportunity odds (excluding self). 5+ = +10 (strong confirmation), 0 = -15 (isolated price).
Hold Comparison0 to -15Bookmaker overround vs Pinnacle overround. Large difference suggests aggressive margin extraction.
Longshot Risk0 to -20Penalty for low-probability outcomes (fair prob < 15%). Small errors in probability estimation create disproportionate EV on longshots.
Soft Tail Inflation0 to -15Detects when recreational bookmakers systematically price longshots higher than sharps. Only for odds > 3.0 decimal.
Bookmaker VolatilityDB-drivenPer-bookmaker penalty for known volatile/unreliable odds providers (e.g., GGBet = -15). Stored in canonical_bookmakers.confidence_penalty.

Market Agreement & Divergence

Phase 1 scoring signals that measure structural support for the edge. Computed per-bookmaker during EV detection.

Market AgreementSharp-weighted cluster analysis. Measures how many sharp bookmakers support the fairline side. High agreement = many sharps agree = efficient market. Score 0–1.
Market Divergence (v3)Z-score based. Market-specific classification:
Moneyline/AH/Totals (monotonic): higher z = better. Bands: WEAK (<1.5), MODEST (1.5–2), GOOD (2–3), STRONG (3+).
3-way/DNB (non-monotonic): sweet spot at z 2–3. Bands: WEAK (<1.5), STRONG (1.5–3), EXTREME_CAUTION (3+).
Divergence MultiplierApplied to per-bookmaker EV based on divergence band. STRONG/GOOD = 1.0x, MODEST = 0.9x, WEAK = 0.75x, EXTREME_CAUTION = 0.5x.

Opportunity Classification

Edge classification based on market agreement, divergence, and sharp book count. Data-calibrated 2026-03-26 — empirical CLV/ROI per class shown.

HIGH_VALUEBETEV ≥ 15% at any confidence level. +22.9% ROI across 732 settled bets. Large detected edge — profitable regardless of confidence score.
PRIMEBETConfidence ≥ 80, EV ≥ 2%. +3-4% ROI, best risk-adjusted segment. High fairline quality + meaningful edge = most reliable opportunities.
STANDARDBETConfidence 50-79, EV ≥ 2%. +1-3% ROI. Solid fairline quality with decent edge.
VALUEBETConfidence < 50, EV ≥ 2%. +1% ROI, profitable but volatile. Lower confidence (thin fairline source) but still positive expectation from settlement data.
THIN_EVPASSEV < 2%. -1.83% ROI across 5,434 bets. Edge too thin to survive vig and line movement. Only consistently losing segment.
NO_EDGEPASS0 sharp books or negative/zero EV. No reliable fairline to evaluate against. -14.4% ROI when 0 sharps.

Key insight: the classifier measures signal quality, not edge quality. High signal quality (STRONG) often means efficient markets with small edges. Low signal quality (THIN, FALSE) can still be profitable. Edge Score in the Combo Finder normalizes for this.

Edge Score (0–100) — Combo Finder

Composite score for comparing combos across all dimensions. Normalizes for odds tier inflation so a +5% CLV favorites combo and a +15% CLV longshots combo are comparable. Used in the Combo Finder (ROI Statistics tab).

Validation (35 pts)Historical backtest agreement + ROI. Largest component — a combo without historical validation can never rank highest.
Validated + hist ROI > 0 = 35. Validated + hist ROI ≤ 0 = 20. Directional + hist ROI > 0 = 25. Directional + hist ROI ≤ 0 = 10. Low Sample + hist ROI > 0 = 15. No Data = 8. Disagree = 0–5. Both Negative = 0.
Consistency (30 pts)+CLV% × 30. How often you beat the closing line. A combo at 80% +CLV scores 24/30.
Edge Quality (20 pts)min(CLV / EV, 2.0) / 2.0 × 20. Did the detected edge hold at close? CLV/EV ratio normalizes across odds tiers. Ratio of 1.0 = edge held perfectly. Capped at 2.0 to prevent outlier inflation.
Sample Size (15 pts)min(ln(n) / ln(200), 1.0) × 15. Log-scaled, maxes out at n=200. n=20 → 8.5 pts, n=50 → 11.1, n=100 → 13.0, n=200 → 15.0. A 6.5-point spread between smallest and largest samples.

Color coding: 80+ strong edge, 60–79 promising, 40–59 weak, <40 avoid.

Combo Validation Badges

Historical backtest (585K simulated opps from 6-month TheOddsAPI data) compared to live results. Backtest CLV is from sparse hourly snapshots — directional guide only, not precise.

ValidatedSame CLV direction (both positive) + historical +CLV% ≥ 50% + gap within 10x. Strongest signal that the edge is real and persistent.
DirectionalSame direction but weak: historical +CLV% < 50% or gap > 10x. Edge might be real but historical data doesn't strongly confirm it.
DisagreeOpposite directions — live says profitable, historical says not (or vice versa). Treat with caution.
Both NegBoth live and historical CLV are negative. Strong signal to avoid this combo.
Low SampleHistorical match exists but below the Backtest min-bets threshold. Not enough historical data to validate.
No HistNo matching historical combo at all. Common for markets/sports not covered in the 6-month TheOddsAPI dataset.

Fairline Source Tiers

Fairlines are calculated using a priority cascade. Higher tiers are preferred when available.

Tier 1: PinnacleDevigged Pinnacle odds. Most accurate fairline. Confidence cap: 100.
Tier 2: Consensus EVWeighted median of 2+ non-Pinnacle sharp bookmakers. Used when Pinnacle has no odds for the event. Confidence cap: 100.
Tier 3: Betfair ExchangeDevigged Betfair odds when liquidity is LIQUID or UNKNOWN. Independent price from exchange orderbook. Confidence cap: 55.
Tier 4: RobinhoodPrediction market probabilities from Robinhood. Different market dynamics — use as last resort. Confidence cap: 45.
No SourceNo sharp/exchange/prediction market data available. Event cannot be priced — no opportunities generated.

Coverage improvement: Pinnacle alone covers ~40% of events. Adding Betfair (+15%) and Robinhood (+3%) brings total coverage to ~56%.

Stake Recommendation

Raw Kelly%(b × p - q) / b where b = decimal_odds - 1, p = fair_prob, q = 1 - p. Optimal bankroll fraction assuming the fairline is exact.
Adjusted Kelly%raw_kelly × (confidence / 100). Scales stake by model trust. Confidence 0 = no bet regardless of raw Kelly.
RecommendationNo Bet: adj. kelly ≤ 0. Minimum: < 0.5%. Small: < 2%. Standard: < 5%. Aggressive: ≥ 5%.

Ranking Score (0–100) — Per-Opportunity

Composite score for real-time opportunity prioritization in the Active Opportunities table. Different from Edge Score (which is for combos/aggregates).

Adjusted EV (40%)0–40 points. 20% adjusted EV = max 40 points.
Confidence (30%)0–30 points. Confidence score × 0.3.
Adjusted Kelly (20%)0–20 points. 5% adjusted kelly = max 20 points.
Market Quality (10%)STRONG_SHARP=10, MULTI=8, THIN=5, DERIVED_STRONG=4, DERIVED_THIN=1.

Calibration System

Haircut Factoravg_clv / avg_raw_ev per segment. What fraction of displayed edge historically materializes. Floored at 0.10, capped at 1.00. Segments: sport × market_type × market_state. Updated daily at 6 AM UTC.
Min EV ThresholdLowest EV band where positive CLV rate ≥ 50%. Per segment. Prevents detection of opportunities in segments where low EV historically loses money.
Bayesian Shrinkage(segment_val × n + parent_val × k) / (n + k), k=50. Small segments blend toward parent (market_state level) to prevent overfitting. 30+ samples required for segment-specific calibration.
Close Quality Score0-1 scale. time_score (0-0.5): proximity to start (T-0 = 0.5, T-10h = 0). sharp_score (0-0.5): sharp books at close (3+ = 0.5). Higher quality CLV data is preferred in calibration.

Closing Line Value (CLV)

CLV%(closing_fairline - initial_implied_prob) / initial_implied_prob × 100. Measures whether the initial bet had edge relative to the closing price. Positive CLV = the line moved in your favor. Visible in Results & Analysis tab.
Edge Decayinitial_ev - closing_ev. How much edge eroded between detection and close. High decay = the market corrected quickly.

Data Quality Signals

Price OutlierBookmaker odds > 2 standard deviations from the market cluster mean. Warning shown in modal when the opportunity bookmaker is the outlier.
Cross-ValidationFor parameterized markets (AH, spread): detects when a bookmaker's odds appear identically under a different market type or param on the same event. Indicates platform labeling error. Flagged bookmakers excluded from Best EV.
Platform DivergenceMedian odds differ by > 20% between platforms for the same event. Indicates stale data or market type mixing. Opportunity suppressed.
Impossible EVEV > 100%. Indicates mapping error or data corruption. Opportunity suppressed.

Bookmaker Categories

RecreationalStandard sportsbooks (DraftKings, FanDuel, bet365, etc.). These are the actionable bookmakers — opportunities are detected against their odds. Shown in main table.
★ SharpPrice-making bookmakers (Pinnacle, Marathon, Circa, etc.). Their devigged odds form the fairline. Not actionable — shown as reference in modal only.
↔ ExchangeBetting exchanges (Betfair, Matchbook). Provide independent price discovery. Not counted as sharp books. Exchange Agreement signal in confidence. Shown as reference in modal.
Prediction MktBelief-based markets (Polymarket, Kalshi). Different probability semantics — not devigged. Provide Prediction Market Agreement signal when liquidity ≥ $1K. Never actionable.

Data Sources

OddsJam RESTBatch odds fetch every 20 minutes. Covers all major sportsbooks + prediction markets. Source of most bookmaker odds.
OddsJam SSEReal-time odds stream. Updates existing records with live odds changes. Low latency.
TheOddsAPIScrapy spider, priority-tiered schedule. Primary source for Pinnacle odds and European bookmakers.
Prediction Mkt LiquidityUSD liquidity per outcome from Kalshi (weight 1.0) and Polymarket (weight 0.85). Used for the $1K liquidity gate on prediction signals.

Per-opportunity indicators recompute every 30-second refresh cycle. Calibration updates daily at 6 AM UTC. Edge Score and combo validation update on-demand via Combo Finder. Classification recalibrated 2026-03-26 based on 15K+ live opportunities. Formulas reference PRD v2.2.1, CLV Calibration PRD v1.0, and Quality Scoring PRD v1.0.

Loading pipeline funnel...
Loading ROI statistics...
Cross-Tab Explorer
Rows: ×
Filter to:
Select dimensions and click Generate
Profitable Combo Finder
Live min: Backtest min:
Finds the most and least profitable combinations of Market × Sport × Odds × EV × Confidence × Classification × Stake
Profitability Over Time
ROI and cumulative P/L over time windows. Shows if edge is stable, growing, or decaying.
Data Quality Dashboard
Coverage, settlement rates, CLV quality, fairline sources, and historical data completeness by sport and market type