Methodology

How the +EV detector scores an alert.

The exact math, applied in the same order the detector applies it.

Vig-removed consensus across the seven tracked books

Before any alert can fire, the detector needs a "fair" price for the market the promo is attached to. For every active market, services/odds-scorer.js queries the Polsia agent with web search across all seven book feeds, takes the consensus line, and converts whatever shape the venues use — US (+150, −200), fractional (5/2), or decimal (3.50) — into a single canonical decimal fair odds per market.

That canonical number is the vig-removed synthetic price: one per market, not one per book. The conversion itself is the same math your book uses to print a line on the screen, only inverted:

fair_odds = 1 / true_probability

The detector watches these seven venues, which together cover the US regulated market:

DraftKings FanDuel BetMGM BetMGM (alt adapter) Caesars Bet365 PointsBet

Is the boost actually paying you more than fair?

Once the detector has both a boosted price (from the sportsbook) and a fair price (from the consensus), it computes the edge. The two formulations are algebraically identical — pick whichever reads more naturally:

edge% = (boosted_odds − fair_odds) / fair_odds × 100

Equivalent to the canonical form OddsWatch writes into ev_percent on each scored promo:

EV% = (boosted_odds ÷ fair_odds − 1) × 100

Anything strictly above 0% is +EV. Negative means the sportsbook is paying less than the real probability warrants — pass. The detector also flips an explicit boolean (is_positive_ev) and, on the way out, gates the row on ev_score × 100 ≥ thresholdPct, defaulting to 3.0%.

Quarter-Kelly, capped at the book's stake ceiling

A book's boost may be +EV, but staking your whole bankroll on a single line is how +EV bettors go broke. The detector sizes stakes from a quarter-Kelly fraction:

stake = bankroll × edge / (decimal_odds − 1) × ¼

Quarter-Kelly is the standard conservative choice: it captures most of the expected growth from a +EV bet while limiting drawdowns during inevitable losing streaks. Plug in the worked example in the section below and it returns the same dollar figure the +EV Alert card shows.

OddsWatch surfaces each sportsbook's own stake cap as max_stake_usd on the promos row, and the +EV Alert card echoes it as the recommended stake for subscribers who haven't configured a custom bankroll — so the suggested stake never exceeds what the sportsbook itself will actually accept.

Which alerts actually fire

The four formulas above produce an EV score for every scraped promo. The filter chain in front of the alert decides which of those become real notifications. An alert only fires when every condition is met:

Reconciling to a /samples card

The first card on /samples ships these numbers as the morning briefing: boosted_odds = 4.20, fair_odds = 3.70, max_stake_usd = 50, confidence_score = 0.88. Running the same detector pipeline against them, in plain decimal math:

true_probability = 1 / 3.7 = 27.0%
edge% = (4.2 ÷ 3.7 − 1) × 100 = +13.5%
quarter-Kelly stake at $1,000 bankroll = 1000 × 0.135 ÷ (4.2 − 1) ÷ 4 = $10.55

This is the same boosted / fair / edge / stake a subscriber sees on the morning-briefing card titled DraftKings · Bills -3.5 @ Patriots, viewable at /samples#draftkings-bills-patriots. The and $50 max stake from the book seats as the recommended stake for users who haven't set a custom bankroll.

boosted_odds = 4.2  ·  fair_odds = 3.7  ·  max_stake_usd = $50  ·  confidence_score = 0.88

See sample alerts FAQ Coverage Samples

For educational and informational purposes only. Not a sportsbook. Not a betting service. Always bet responsibly. 21+ in eligible states.