Skip to content
Bankroll
$1000.00
Today
+0.00
Risk
0.0%
Open
0
7-day
+0.00
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

football-data.org · balldontlie

Historical scores, league tables, fixture metadata. The Elo engine consumes these the moment they settle. Football covers top-7 European leagues + UEFA competitions; NBA covers regular season + playoffs since 2008; tennis covers ATP/WTA tour matches with surface tags.

Recent form

last 5 matches per team

W/L/D outcome, goals/points for and against, home or away. Fed into a form-strength feature alongside Elo.

Head-to-head

last 5 H2H, surface-aware for tennis

Direct meetings between the two competitors. Lower weight than Elo because samples are small, but we surface them so you can sanity-check.

Rest days

schedule density

Days since each side's last match. NBA back-to-back and European-tournament fatigue effects are sport-tuned.

Home advantage

league-specific factor

Empirically estimated home-court / home-pitch lift per league. Folded into the rating diff before the logistic.

Player rosters + box scores

balldontlie · NBA only

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

Market odds

The Odds API · Pinnacle preferred

Best price per market across 8 books, vig stripped via de-vigging. The sharpest book's line is treated as the consensus market probability we beat or lose to.

News context

Gemini 2.5 Flash + Google Search

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
    Pull every book's posted price for the market.

    8 books, fetched from The Odds API. We track who's quoting and how stale.

  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

Honest limitations of the current build

  • Asian handicap ladder is mostly model-only.

    The Odds API gives us one handicap line per match in the free tier. The full ladder is generated by the model so you can read across, but only the line books actually post will show real prices + edge.

  • Corners + cards markets need an additional provider.

    The Odds API charges 10× per credit for these. We have the integration ready (API-Football's free 100/day tier covers them) but it requires CC validation; if you have a key, set FOOTBALL_API_KEY and they activate.

  • 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) on the landing page is a backtest figure.

    The pipeline that captures every pick's closing line and computes the realized CLV is wired but not flipped on yet. The number on the home page is honest about being from the 180-day backtest at 1u flat staking.

  • News context can lag during high cap days.

    The Gemini wrapper 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.