← Back to Dashboard

📊 +EV Opportunity Tracking

Active Opportunities
0
Avg EV%
0.0%
Best EV
0.0%
Total Value
$0
ℹ️
ℹ️
Found Game League Bet Type Market Type # Sharp Bookmaker Odds Initial Pinnacle FL Current Pinnacle FL Initial Consensus FL Current Consensus FL TFL 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% 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

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.