Fun & games

Sports What-If Simulator

Simulate a match or a small league with a Poisson goal model — and replay “what if”.

Teams (required)
Teams
#TeamGoals scored per gameGoals conceded per gameElo rating
1
2
3
4

Empty = first team in the list.

Empty = second team in the list.

% more expected goals
League fixtures and results

Leave the goals empty for games not played yet. No fixtures = a double round robin with nothing played.

League fixtures and results
#HomeAwayHome goalsAway goals
1
2
3
4
5
6
What if… (changed results)

Override the result of a fixture (played or not) to compare the table and the odds.

What if… (changed results)
#HomeAwayHome goalsAway goals
1
2

Same seed = same simulated numbers. Empty = derived from the inputs.

Try an example: One match from goal averages · Four-team league run-in with a what-if

How it works

Give team strengths as goals scored/conceded per game or as Elo ratings. Get exact win/draw/loss odds and a scoreline heatmap for one match, or simulate the rest of a small league thousands of times (seeded, reproducible) for title and position odds — then change any result to see how the table and the odds would have looked.

  • Goals are modelled as independent Poisson variables. Goals model (Maher): with μ = the average goals scored per team per game, home expected goals = μ × (home scoring ÷ μ) × (away conceding ÷ μ), and the same for the away side.
  • Elo model: with d = Elo difference, home expected goals = G/2 × 10^(d/1000) and away = G/2 × 10^(−d/1000), where G is the average goals per match. With G = 2.6 this reproduces the Elo expected score (win + ½ draw) within about 2 percentage points for differences up to 400 (200 points: 76% expected score = 66% wins + 20% draws); it is a calibration, not a model fitted to real results.
  • Home advantage multiplies the home side’s expected goals (default +10%); expected goals are clamped to 0.05–8.
  • Single match: win/draw/loss and scoreline probabilities are exact sums over the Poisson grid (0–15 goals each). A seeded simulation of the same match is shown next to them as a check.
  • League: every unplayed fixture is simulated N times with a seeded sfc32 generator; the table uses 3 points per win, 1 per draw, then goal difference, goals scored and a random draw. The what-if scenario re-runs with the same random numbers (common random numbers), so differences come from the changed results, not from noise.

For fun and for “what if” arguments, not for betting: the model ignores injuries, form, motivation and the correlation between the two teams’ goals.

Sources

For scripts and AI agents

  • JSON API: POST https://sportswhatifsimulator.usefulweb.site/api/v1/calculate (same calculation as this page)
  • Interface description: OpenAPI 3.1 · AI guide: llms.txt
  • MCP server (Streamable HTTP): https://sportswhatifsimulator.usefulweb.site/mcp · tool name sports_what_if_simulator
Example request
curl -s -X POST https://sportswhatifsimulator.usefulweb.site/api/v1/calculate \
  -H 'content-type: application/json' \
  -d '{"mode":"match","model":"goals","teams":[{"name":"Rovers","goalsFor":1.9,"goalsAgainst":0.9},{"name":"United","goalsFor":1.3,"goalsAgainst":1.2},{"name":"City","goalsFor":1.1,"goalsAgainst":1.4},{"name":"Athletic","goalsFor":0.9,"goalsAgainst":1.7}],"homeTeam":"United","awayTeam":"Rovers","homeAdvantage":10,"simulations":2000}'

Related tools

Feedback