Home/Blog/Building Your Own Betting Model
Sub Article · Exchange Tips Daily

Building Your Own Betfair Betting Model

A betting model is just a function that turns inputs into probabilities. You don't need a PhD or a Python stack to start — a clean Google Sheet with the right columns will beat 80% of the public tip ecosystem. This article walks through the realistic stages: spreadsheet Elo for tennis, xG regression for football, par-score for cricket, and when (and how) to graduate to the API.

Updated 17 May 202620 min readIntermediate

This article is a sub-article in the Betfair Daily Tips and Trading Ideas pillar. The pillar covers the broader workflow; this one is the deep dive on building a personal prediction model. If you're earlier in the journey, start with how to find your own Betfair tips or the value bets framework.

What a Model Actually Is

A betting model takes structured inputs (recent form, surface, xG, serve %) and returns a probability for each outcome. That's it. The market makers and pricing desks at bookmakers run the same kind of model — bigger, with more data, but conceptually identical.

Your edge comes from one of three things: better inputs (private or under-used data), better structure (a model that captures something the market misses), or better discipline (you act on your numbers, the market gets distracted by narrative).

The Three Levels of Personal Modelling

Level 1: Spreadsheet model

Excel or Google Sheets. Inputs typed in or imported via CSV. Outputs are fair prices for the markets you care about. Suits 1-2 sports, 20-40 events per week. Gets you 80% of the edge a serious retail trader can earn.

Level 2: Spreadsheet + automation in Bet Angel

Bet Angel's spreadsheet engine lets you feed your model's fair prices into automated entry triggers. You research in the sheet, the software executes. Time investment doubles, output triples.

Level 3: API + Python/R model

Pull live Exchange prices, run your model on a schedule, place positions automatically. Higher complexity, higher capacity, but also higher risk of bugs. Most retail traders shouldn't aim here until Level 1 has proven profitable over 12 months. Betfair API guide.

Sport-by-Sport Starter Models

Tennis — Spreadsheet Elo

Tennis Elo is the easiest first model. Two outcomes, no draws, clean data.

  1. Start every player at Elo 1500.
  2. After each match, update by formula: New = Old + K × (Result − Expected). Result is 1 for winner, 0 for loser; Expected is 1 / (1 + 10^((opponent_Elo − player_Elo) / 400)); K is the learning rate (start at 32).
  3. Split Elo by surface — separate Hard, Clay, Grass, Indoor ratings.
  4. Adjust Elo for tournament weight (Grand Slam matches count 2x).
  5. Fair price = 1 / Expected.

Backtest on Tennis Abstract's free historical data. Even a clean Elo beats public Match Odds by 2-4% on ATP 250 events.

Football — xG regression

Use FBref last-8 xG-for and xG-against per team per league.

  1. Calculate each team's per-match xG-for and xG-against, league-adjusted.
  2. Project the match's expected goals: Home_xG = (Home_xGFor + Away_xGAgainst) / 2; similar for Away_xG.
  3. Use the Poisson distribution to convert xG to win/draw/loss probabilities.
  4. Fair Match Odds prices = 1 / probability.
  5. Adjust for home advantage (~0.3 xG bump) and injuries.

Backtest against Football-Data.co.uk. Watch Premier League for one season as ground truth.

Cricket — par-score model

  1. Pull historical first-innings par scores per ground per format from Cricsheet.
  2. For each match, calculate current required rate vs ground par.
  3. Estimate win probability as a function of (runs ahead/behind par × overs remaining × wickets in hand).
  4. Fair price = 1 / probability.

Horse racing — Tissue model

Hardest of the four. Use Timeform ratings as inputs, adjust for going, distance, draw, weight, jockey/trainer factor. Backtest is laborious but reward exists in mid-tier handicaps where public is less attentive.

The Spreadsheet Setup

For each sport, your spreadsheet should have:

  • Sheet 1 — Input data per event (teams/players, date, surface/conditions, recent form numbers).
  • Sheet 2 — Probabilities: your model's calculated probabilities for each main market.
  • Sheet 3 — Fair prices: 1/probability rounded to tradeable tick, commission-adjusted.
  • Sheet 4 — Exchange prices imported manually or via API.
  • Sheet 5 — Edge: per market, edge after commission. Highlight rows ≥4%.
  • Sheet 6 — Bet log: stake, price taken, result, P&L, notes.

Worked Example — Tennis Elo Edge

ATP 500 Hard Court, Round of 16

Player A hard-court Elo: 1735.

Player B hard-court Elo: 1620.

Expected probability for A: 1 / (1 + 10^((1620 − 1735) / 400)) = 1 / (1 + 10^(−0.2875)) = 1 / (1 + 0.516) = 0.660 = 66.0%.

Fair price A: 1 / 0.660 = 1.515 → round to 1.51.

Exchange price A: 1.62.

Commission-adjusted edge: Effective price after 5%: (1.62 − 1) × 0.95 + 1 = 1.589. Edge: 0.66 × 1.589 − 1 = 4.87%. Trade fires.

Action: Back £100 of Player A at 1.62. Expected value: £4.87. Hold to match completion or use in-play green-up at 1.30 if A breaks first.

Backtesting Before You Bet

Before risking any money:

  1. Pull 300+ historical matches for your sport.
  2. Run your model on each (without using future information).
  3. Compare model fair prices to closing Exchange prices.
  4. Calculate hypothetical P&L if you'd backed every selection where model edge ≥ 4%.
  5. If hypothetical P&L is negative or breakeven over 200+ bets, your model is wrong somewhere.

This is non-negotiable. Models that haven't survived a backtest don't survive real money either.

Common Modelling Mistakes

  • Overfitting to recent results. A model tuned to last month's matches will overstate confidence on those patterns. Use rolling windows.
  • Using future information accidentally. If your data includes results announced after the bet would have been placed, your backtest lies.
  • Ignoring league-effect. Premier League xG isn't comparable to Championship xG without adjustment.
  • Treating commission as optional. Always commission-adjust before computing edge.
  • Adding features without testing. Each new variable should have a clear theoretical basis and a measurable lift.
  • Not logging real-money results. The model's track record in production is the only one that matters.

When to Move to Code

Stay in spreadsheet land until you hit one of these limits:

  • You're running models on 5+ events/day across multiple markets.
  • Manual price entry from Exchange is taking longer than research.
  • You want minute-level price tracking for closing-line analysis.
  • You want to automate placement based on model fair prices.

Then learn Python (or R) and the Betfair API. Start simple — script the price pull first, leave manual placement, layer automation later.

Recommended Reading and Tools

  • Statistical Sports Models in Excel by Andrew Mack — Excel-native, sport-by-sport.
  • The Logic of Sports Betting by Ed Miller / Matthew Davidow — concept-level.
  • Cricsheet, FBref, Tennis Abstract — free historical data.
  • Bet Angel — spreadsheet automation.
  • Our trading calculator — quick fair-price checks.
  • Betfair API — once you graduate to code.

The Poisson-Goals Football Model in Detail

The Poisson distribution is the workhorse of football modelling because goals approximate a Poisson process — discrete events with relatively low frequency.

Step-by-step:

  1. Estimate Home_xG and Away_xG for the fixture.
  2. Compute P(X goals) for each side using P(X=k) = (xG^k × e^(-xG)) / k! for k = 0, 1, 2, 3, 4, 5, 6.
  3. Build a score matrix by multiplying P(Home=k1) × P(Away=k2) for each k1, k2 combination.
  4. Sum cells to derive:
  • Home win = sum of cells where k1 > k2.
  • Draw = sum of diagonal (k1 = k2).
  • Away win = sum of cells where k1 < k2.
  • Over 2.5 = sum of cells where k1 + k2 ≥ 3.
  • BTTS Yes = sum of cells where k1 ≥ 1 AND k2 ≥ 1.

Implement this in Excel: ~20 cells. Refresh per fixture in 30 seconds once the template is built.

Refinements That Add Real Value

Dixon-Coles adjustment

Pure Poisson over-predicts certain low-scoring scenarios (0-0, 1-0, 0-1, 1-1). The Dixon-Coles paper introduces a correction factor that lifts these probabilities. Without it, your Draw and 0-0 prices systematically lag the market. Implement it.

Time-decayed form weighting

Don't equal-weight last 8 matches. Use exponential decay so this week's match counts more than 8 weeks ago. A typical decay factor: 0.93 per match. Easy to implement; meaningful accuracy lift.

League-strength normalisation

If you cover multiple leagues, normalise xG to league-mean. Premier League and Bundesliga 2 are not the same scale; raw xG comparisons mislead.

Tennis Elo Refinements

Beyond surface-specific Elo, three lifts beat the market further:

  • Recent-form adjustment. If a player's last 10 matches show a 200-point Elo deviation from their season average, weight that recent block higher.
  • Fatigue penalty. Subtract 20-40 Elo points for a player who played 3 sets within the prior 24 hours.
  • Head-to-head adjuster. If H2H is 4-0 over 5 years with consistent style match, add 25-50 points to the favoured player.

Cricket Model Refinements

  • Pitch-condition factor. Adjust par scores upward on flat decks, downward on bowler-friendly. Use Cricsheet historical to calibrate.
  • Dew adjustment for night matches. +5% chase probability post-cutoff time in subcontinent venues.
  • Wicket-fall probability curve. Build a per-over wicket probability table by venue and innings phase.

Building Your First Backtest

The backtest is what separates a model from a hunch. Required ingredients:

  1. Historical data: 2-3 seasons of fixture-level data (matches, results, basic statistics).
  2. Frozen model parameters: The model you'd have used at the time, not today's tuned version.
  3. Closing-line prices: Available from Football-Data.co.uk and similar for major sports.
  4. Output report: Per market, hypothetical P&L, average CLV, edge captured.

Run the backtest before placing a single live bet. If your model loses money in backtest, fix it. If it makes money, your live results should mirror the backtest — when they don't, audit immediately.

From Spreadsheet to Bet Angel Automation

Once your spreadsheet model proves profitable for 200+ live bets, you can wire it into Bet Angel's automation:

  • Set Bet Angel to pull live Exchange prices via spreadsheet link.
  • Add a fair-price column from your model.
  • Compute edge column in real time.
  • Use Bet Angel's automation rules to trigger a back/lay bet when edge crosses your threshold (typically 4-5%).
  • Add stop-loss and target rules as separate triggers.

This is the bridge between research and production. Start with paper-mode automation for the first 2 weeks to validate that triggers fire correctly before risking real money.

From Bet Angel to API

The Betfair API unlocks the next tier: pure code, no spreadsheet. Useful when:

  • You want to backtest models on minute-by-minute price history (impossible from a manual spreadsheet).
  • You want to place positions when you're away from the screen (the spreadsheet model can't run while your PC is off).
  • You want to run dozens of fixtures simultaneously.

Requires Python or R skills, a Betfair API key (free with a £10 deposit verification), and a reliable hosted runtime. See our Betfair API guide for the technical walkthrough.

Honest Expectations

What a calibrated, well-built personal model realistically delivers:

  • 2-5% ROI on turnover after commission, in a sport you've mastered.
  • 20-30 weeks per year of positive returns; 5-10 weeks of negative.
  • Periodic recalibration required — at least quarterly.
  • Time investment of 1-3 hours/day at the active level.

This is real business, not a get-rich-quick scheme. The traders who survive treat it like one.

Related Reading

Pick one sport. Build the simplest possible model (Elo, xG, par-score). Run it for 50 events. If your fair prices systematically beat the market on the closing line, you have a real model. If not, refine the inputs.

Read the Pillar Open Betfair Account →

Frequently Asked Questions

Do I need to be a coder to build a betting model?

No. A clean spreadsheet model in Excel or Google Sheets is enough to find real edge in your first 6 months. Python and the API matter once your spreadsheet workflow saturates.

How much data do I need to validate a model?

Aim for 300-500 historical events before trusting the model. Below 100, you're seeing variance, not signal.

What's the simplest sport to model?

Tennis — only two outcomes, no draws, clean public data, cleaner Elo updates. Football is more rewarding but more complex because of draws and goal totals.

How do I know my model has an edge?

Run the model on historical data, calculate model probabilities, compare to closing Exchange prices. If your model systematically prices certain outcomes higher than closing prices and those outcomes win at your projected rates, you have signal.

What if my model's edge disappears over time?

It will, eventually. Edges decay as more participants find them or as market structure changes. Plan for model maintenance — quarterly retests minimum.

Honest Risk Note

Most personal models lose money in production despite looking profitable in backtests. The most common reason: overfitting (your model is tuned to historical noise) or execution slippage (you can't get the prices the backtest assumed). Treat the first 200 live bets as continuation of testing. BeGambleAware.org if betting is causing distress.