Gredictor — Global Football Predictor

Dixon-Coles goal model · leagues · clubs · six confederations

Quick match

Type two names. Nicknames and typos are fine — "kogalo", "man citi", "moroco". Everything derivable fills itself; anything that isn't, the app tells you.

Any league, any language. Records fill automatically for teams found in it.
Works on your own server. Never inside a Claude artifact — the CSP blocks it.

Common ids: 39 Premier League · 140 LaLiga · 135 Serie A · 78 Bundesliga · 61 Ligue 1 · 94 Primeira Liga · 203 Super Lig · 207 Swiss Super League · 119 Superliga · 113 Allsvenskan · 71 Brasileirao · 128 Argentina · 253 MLS · 233 Egypt · 200 Botola · 288 South Africa. Free tier is 100 requests a day, so fetch the leagues you need and let them cache in the browser.

National-team ratings come from FIFA/Coca-Cola World Ranking points, not club form. The 20 July 2026 top-20 figures are verified; the rest are approximations consistent with recent positions.

Form is entered rather than pre-loaded. Supplying verified current form for 1,176 clubs is not something I can do honestly, and inventing it is exactly the failure mode this build exists to avoid.

Home
Draw
Away

Expected goals

Scoreline distribution

Rows = home goals, columns = away. The modal score typically carries 9–16%.

Goals markets

More reliably predictable than 1X2, and usually less efficiently priced.

Market comparison

Form entered

Model ratings

Parameters

League parameters

Goals per match and home advantage differ materially by confederation. CAF and CONMEBOL home advantage is genuinely larger than UEFA's — travel, altitude, pitch and crowd. ✓ marks a figure computed from a verified season source; the rest are documented approximations, tunable above.

Calibration log

Stored in this browser only. Enter results to measure whether the stated probabilities hold. Nothing else here tells you whether the model works.

Method

Ratings come from entered form, exponentially decayed, normalised for venue and opposition, then shrunk toward the league mean. League position enters as a slow-moving prior. λ and μ feed a Dixon-Coles bivariate Poisson (ρ = −0.13), from which 1X2, scorelines, BTTS and over/under all derive. Market odds are capped at 10% of the blend.

Guards

  • Draw guard — if the leading outcome and the draw are within 6 points, a double chance is recommended. Converting "hard to beat at home" into "wins at home" is the most common failure this prevents.
  • Entropy flag — above 1.55 of a possible 1.585 bits, the fixture is called as having no edge.
  • No confidence tiers — probabilities only. Whether they mean anything is a question for the log.

Research languages

League parameters and rosters were checked against sources in: . Local-language sources materially outperform English ones for CAF, CONMEBOL and AFC competitions.

Corrections this produced

  • Brazil Série A runs at 2.66 goals/match, not the 2.45 estimated (CBF, 704 goals in 265 matches).
  • Argentina Liga Profesional runs at 2.11, not 2.25 — among the lowest-scoring major leagues anywhere (811 in 385). Primera Nacional is 1.93.
  • Argentina now fields 30 clubs in an Apertura/Clausura split, not a single 24-club table.
  • Kenyan Premier League roster corrected against the live table: Nairobi United, Mara Sugar and APS Bomet added.
  • Japan's J1 moved to an autumn-spring calendar — the 2026/27 season was only seven rounds deep in September.
  • Morocco: MAS Fez champions, OC Safi relegated, roster updated.
  • FIFA rankings as of 20 July 2026: Spain 1st on 1995.98 after winning the World Cup, Argentina 2nd, Morocco 6th — the highest-ranked African nation ever at that point.

Where the auto-fill data comes from

A published artifact runs under a content-security policy that blocks every external network request. A fetch to api-sports.io, gnews.io or any other feed does not error visibly — it fails silently, and the page looks like it is working while showing nothing. Embedding an API-key field would therefore be worse than useless: it would imply live data that can never arrive. API-Football's free tier is also 100 requests a day, which does not cover 1,177 clubs.

So auto-fill works three ways instead, all free:

  • Live snapshot. Standings for the Premier League, LaLiga, Serie A, Bundesliga, Ligue 1 and MLS — 126 clubs — pulled on . Position, played, W/D/L and points are real figures.
  • Paste a league table. For any of the other 91 leagues, paste the standings from anywhere — a site, a newspaper, a WhatsApp message, in any language. The parser handles most column orders, tab or space separated, with or without a position column, and matches club names to the roster fuzzily. Imports are stored in your browser and reused.
  • Type recent results. Always overrides both, because actual scorelines carry goal information that a W/D/L record does not.

One honest limit on the snapshot: the results feed returns played/W/D/L/points but not goals for and against. Rather than invent scorelines to fit a record, ratings in that mode derive from points-per-game and table position, which are real. That is weaker than true goal data, and the app says which mode each side is using every time it predicts.

This self-hosted build adds a fourth source: a live API-Football fetch, under “Live data” in the paste panel. It is the one thing that cannot work inside a published artifact — the CSP blocks the request — but on your own server it does. Enter a key and a league id and standings import straight into the model. The key is stored only in your own browser and is never sent anywhere except api-sports.io.

Quick match

Typing two names resolves them against all 1,176 clubs and 112 nations using aliases, prefix matching and token-level edit distance, then infers the competition: same league is domestic, different leagues in one confederation gives that confederation's premier club competition, different confederations gives the Club World Cup on neutral ground, and two nations give their continental tournament. League size, goal baseline, venue and strength coefficients follow automatically. A club entered against a national team is rejected rather than silently modelled.

What it cannot fill is recent form and league position, because no verified live feed for 1,176 clubs exists here. The app says so explicitly rather than predicting on blank defaults and letting the output look more grounded than it is.

Cross-border competitions

A 1.20 attack rating in Bolivia's league is not a 1.20 in Argentina — each rating is calibrated to its own league's mean. Continental ties therefore rebase both sides using league strength coefficients, applied once and split via a square root. Applying the ratio to attack and defence separately squares the effect; during the build that bug gave Manchester City 4.28 expected goals against Gor Mahia, which the corrected formula puts at 2.57.

Competition goal baselines differ sharply and are set per tournament: the Champions League runs near 2.95 a game, the Copa Libertadores near 2.30, the CAF Champions League near 2.10. Using a domestic baseline for a continental tie is a systematic error. Neutral-venue finals drop home advantage to 1.00, and two-legged ties are resolved by summing both legs' score matrices — with level aggregates split 50/50, because shootouts are close to a coin flip and no model predicts them.

National teams

International mode uses FIFA/Coca-Cola World Ranking points rather than club form. The point gap converts to goal supremacy on a log scale, tanh-compressed so a very large mismatch saturates instead of driving the weaker side's expectation to zero. The first version had Kenya at 0.25 expected goals against Morocco, which is not a football outcome; compression puts it at 0.46.

Top-20 point totals are verified from the 20 July 2026 release, taken after Spain beat Argentina in the World Cup final. The rest are approximations. International predictions deserve wider error bars than club ones: teams play a handful of matches a year, squad availability swings results, and the ranking updates only four times annually.

Limits

Realistic ceiling for 1X2 is roughly 45–55%, and near chance on evenly-priced fixtures. Across a 17-leg accumulator even 50% per leg is about 1 in 131,000. Nothing in this tool changes that arithmetic.

© 2026 Gredictor Predictive AI · A Globesolute Company · Prediction of human behaviour can be wrong. Exercise caution.