# Sports What-If Simulator > Simulate a match or a small league with a Poisson goal model — and replay “what if”. 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. Part of usefulweb.site (https://usefulweb.site/). Results are deterministic calculations from the inputs and the listed assumptions; the API returns exactly what the web page shows. ## Use it - Human interface: https://sportswhatifsimulator.usefulweb.site/ (interactive tool at https://sportswhatifsimulator.usefulweb.site/tool) - JSON API: POST https://sportswhatifsimulator.usefulweb.site/api/v1/calculate with a JSON object of inputs (schema: https://sportswhatifsimulator.usefulweb.site/api/v1/tool) - OpenAPI: https://sportswhatifsimulator.usefulweb.site/openapi.json - MCP (Streamable HTTP): https://sportswhatifsimulator.usefulweb.site/mcp - tool `sports_what_if_simulator` ## Inputs - mode (select): Simulate - model (select): Team strength from - teams (table, required): Teams - homeTeam (text): Home team (one match) - Empty = first team in the list. - awayTeam (text): Away team (one match) - Empty = second team in the list. - neutral (boolean): Neutral venue (no home advantage) for the single match - homeAdvantage (number): Home advantage - avgGoals (number): Average goals per match (Elo model) - fixtures (table): League fixtures and results - Leave the goals empty for games not played yet. No fixtures = a double round robin with nothing played. - whatIf (table): What if… (changed results) - Override the result of a fixture (played or not) to compare the table and the odds. - simulations (integer): Simulations - seed (text): Seed (optional) - Same seed = same simulated numbers. Empty = derived from the inputs. ## Method - 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. ## Limits - For fun and for “what if” arguments, not for betting: the model ignores injuries, form, motivation and the correlation between the two teams’ goals.