Skip to content
No picks tracked yetSave a pick and this strip becomes your running P/L.See tomorrow's slate →
betsetgo
Methodology · the answer in one page

What the model is actually based on.

A complete, honest list of every input that drives a probability number on this site — and what we deliberately don't use. Read it; if you don't buy our methodology, don't buy our edges.

One · The raw signal

Data inputs

Match results

two seasons deep, not a decade

Historical scores, league tables, fixture metadata. The Elo engine consumes these the moment they settle. Measured 2026-07-26: football reaches back to August 2024 across 12 competitions — the big five, the Champions League, the Championship, Eredivisie, Primeira Liga, Brasileirão, Copa Libertadores and the World Cup; the NBA reaches back to October 2024; tennis to January 2022 across both tours with surface tags. Two seasons is the honest depth for football and the NBA, and it is why rating confidence matters more here than a long-history model would need.

Recent form

last 10 matches · football + NBA

W/L/D outcome, goals/points for and against, home or away. Fed into a form-strength feature alongside Elo. Tennis has no per-match form feed yet, so the form term is zero for tennis and its prediction rests on surface-aware Elo alone.

Head-to-head

last 5 meetings · football only

Direct meetings between the two competitors. Lower weight than Elo because samples are small, but we surface them so you can sanity-check. Not wired for NBA or tennis — those predictions carry no head-to-head term at all.

Rest days

schedule density · football + NBA

Days since each side's last match, read off the form feed. NBA back-to-back and European-tournament fatigue effects are sport-tuned. Tennis has no rest-day input, because it has no form feed to derive one from.

Home advantage

league-specific factor

Empirically estimated home-court / home-pitch lift per league. Folded into the rating diff before the logistic. Zero for tennis, which has no home venue — and deliberately so: the tennis track record stores the winner in the first slot, so any home bonus would inflate the model against its own measurement.

Player rosters + box scores

NBA only

Per-player minutes, points, rebounds, assists, threes, PRA for the last N games. Drives NBA player-prop normal distributions.

Market odds

one sharp book · Pinnacle preferred

One book's price per market rather than a cross-book best: Pinnacle where it is quoted, then Betfair Exchange, then whatever the provider returns. Vig is stripped multiplicatively and that line is treated as the consensus probability we beat or lose to. Taking the best price across books instead would carry a negative overround and flatter our edge, so we don't.

News context

grounded-search LLM

Per-team summary, named injuries with impact level, named suspensions, lineup notes, form notes, and the sources cited. See it on the Newsroom. Cached per match, regenerated when an analysis is rerun.

Two · How probabilities are formed

The model, per sport

Football · 1X2

logistic on Elo + form + rest

Logistic regression takes the Elo diff, recent-form gap, rest differential, and home-advantage factor. Output is a calibrated win/draw/away triple.

Football · scorelines + derivatives

bivariate Poisson on team xG

Recent xG-for and xG-against per team feed two correlated Poisson rates. The full score grid is integrated to derive BTTS, totals (over/under 1.5/2.5/3.5), Asian handicap, clean sheet, win-to-nil, and HT/FT.

NBA · moneyline + totals

normal distribution on team rates

Each team's recent points-for / points-against are fitted to a normal distribution; difference + sum drive moneyline, spread (team_totals featured market), and game O/U.

NBA · player props

per-player normal pricing

Points / rebounds / assists / threes / PRA each get a mean+std fit from the player's last N games (starter or bench filtered). Over/under model probability is the integral past the line.

Tennis · match win

surface-aware Elo

Surface-specific Elo (hard/clay/grass) feeds a logistic output. Best-of-3 vs best-of-5 differs because long matches converge to favourite.

Calibration

Platt scaling on graded history

Raw model probabilities are stretched/compressed against the actual hit rate at each confidence bucket — see the calibration plot. The number we publish is the calibrated number, not the raw model number.

Three · How we decide it's a +EV bet

Edge calculation

  1. 01
    Take the sharpest book's posted price for the market.

    Not every book, and not the best of them: one bookmaker per market, Pinnacle first, then Betfair Exchange, then whatever the provider returns. We record which book quoted it and when.

  2. 02
    Strip the vig.

    Two-sided markets are divided by the sum of their implied probabilities to back out the no-vig fair line.

  3. 03
    Compare model probability to fair market probability.

    Edge % = (model_prob − market_prob) / market_prob. Positive = model thinks the price is mispriced in our favour.

  4. 04
    Apply the +EV threshold.

    Below ~3%, the edge is dominated by model noise. We tag those as 'fair'. Between 3–6% is mainline; above 6% is an outlier we surface in the ribbon ticker.

  5. 05
    Suggest a stake via fractional Kelly.

    Quarter-Kelly by default (75% lower variance than full Kelly with very small ROI cost). Slider on every match page.

Four · The bright lines

What we deliberately don't do

No proprietary 'inside info'

Every input is documented above. If we don't list it, the model doesn't see it.

No tipster mode

We publish probabilities and edge, not picks. You decide what to back. Our P&L is your P&L, graded on the same scorecard you see.

No survivorship bias

Every analysis we generate is graded — wins and losses both visible on /accuracy. We never delete a bad call.

No affiliate-bias incentive

We are not affiliated with any sportsbook. Best-price highlighting is purely a function of the posted lines, not a kickback.

Five · Where we still owe you better

What's not at full strength yet

  • Asian handicap ladder is mostly model-only.

    Our odds provider gives one handicap line per match on the current tier; the full ladder is generated by the model so you can read across, but only the lines books actually post show real prices + edge.

  • Corners + cards markets are partial.

    These markets cost more credits than our current odds provider tier covers efficiently. A secondary provider is integrated and activates as soon as that key is set.

  • Player props for football aren't priced.

    We model 1X2, BTTS, totals, AH, corners and cards — but not player-level shots/goals/assists. NBA has player props. Football player props are on the roadmap.

  • Closing-line value (CLV) is data-blocked, not code-blocked.

    The closing-line capture pipeline runs daily; CLV math reads it live. The landing hero shows 'unavailable' until ~30 picks have closing odds captured — never a backtest figure. The number lights up automatically as Phase 1 paper-trading accumulates.

  • News context can lag during high-volume days.

    Our news provider has a daily call cap and will return empty rather than risk overrun. When that happens, the news block on a match page falls back to 'no context available' — the model still runs without the news features.

If something on this list isn't how you'd want a model built, tell us. The methodology gets sharper because real users push on it.