
MatchSheet | Football win/draw/win + score grid
Information only, not betting advice. Unofficial tool: not affiliated with, endorsed by or connected to any league, club, governing body or data provider. Probabilities come from a statistical model of past results and can be wrong.
MatchSheet
A football match sheet built from public results. You send one line. You get a 2-page PDF, the two pages as images and CSV files, with every number computed by a goal model you can read about below.
What you send
- One match:
Arsenal vs Chelsea,Liverpool v Man City,Bayern vs Atletico Madrid - One match with a date or a competition:
Arsenal vs Chelsea on 2027-03-13,Barcelona vs Aston Villa in the Champions League - A slate:
Serie A this weekend,MLS fixtures on 2026-11-08
Short names work (Man Utd, Spurs, PSG, Barca, Inter, Atleti). The tool finds the next scheduled meeting and puts the real home side first. If no meeting is scheduled, the sheet says so and treats the first-named team as the home side. No password, no email, no login, no file.
What you get back
| File | What is in it |
|---|---|
matchsheet.pdf |
Page 1: win/draw/win bar, expected goals, exact score grid 0 to 5, likeliest scores, total goals, both teams score and clean sheets, short notes, head to head, team ratings. Page 2: last 6 results of each team, goals scored and conceded in the last 10, home and away record, notes, method |
matchsheet_p1.png, matchsheet_p2.png |
The two pages as images, ready for a post or a group chat |
probabilities.csv, score_grid.csv |
Every probability on the sheet; the full score grid 0 to 6 goals per side in % |
form.csv, head_to_head.csv |
Last 10 results per team; every meeting in the data |
team_ratings.csv |
Attack and defence index with ranks for every team in the competition |
slate.pdf, slate.png, slate.csv |
Slate mode: every fixture of one competition for a day or the next 7 days |
How the numbers are made
- Data: every finished match of the chosen competition in this calendar year and the two before it, from ESPN's public scoreboard JSON (no key).
- Model: each team gets an attack and a defence rating; expected home goals = base x home advantage x home attack / away defence, and the same for the away side without home advantage. Fitted by weighted maximum likelihood. A result 365 days old counts half as much as one played today. Every rating is pulled toward the competition average, so a team with few matches stays near it.
- Low scores: a Dixon-Coles factor adjusts 0-0, 1-0, 0-1 and 1-1, fitted on the same data.
- Probabilities: scores 0 to 10 per side form the grid; win/draw/win, total goals, both teams score and clean sheets are sums over it. "Expected goals" on the sheet are the model means for the fixture, not shot-based xG.
- Rules: penalty shoot-outs count as draws with the score before the shoot-out; extra-time matches are shown in form tables but left out of the model.
- Notes: the assistant writes a few short sentences from the numbers only. A built-in check flags numbers that are not in the data, betting words and stock phrases before the sheet is delivered.
How well it has done
We replayed the 2025-26 season: for every match, the model was fitted only on results before that week. Over 6,036 matches in the 18 competitions, the most probable of the three outcomes was right 50.1% of the time (42.7% to 60.4% by competition), and the Brier score was 0.604 against 0.648 for plain home/draw/away base rates. Every competition beat the base rates. Half of the most probable outcomes still did not happen: football is uncertain, and the sheet shows how uncertain.
Supported competitions
England (top two divisions), Spain, Italy, Germany, France, Netherlands, Portugal, Scotland, Belgium, Turkey, USA and Canada, Mexico, Brazil, Argentina and Japan (top divisions), and the two main European club cups. Each was checked against live data on 2026-11-02. Domestic cups, national teams and women's leagues are not included.
Time
Measured in a 2-CPU sandbox image on 2026-11-02: a first sheet reads 4 to 9 public data calls in 2 to 5 seconds, and the PDF, images and CSV files take about 1 second. Repeat requests within an hour come from a cache. The assistant then writes its short notes in the same reply.
Requests and limits
Every message you send uses 1 request from your plan. A sheet is one message; a follow-up such as "now the reverse fixture" is another.
| Plan | Price | Requests |
|---|---|---|
| Daily | $3.99 | 5 per day |
| Weekly | $7.99 | 15 per week |
| Monthly | $19.99 | 50 per month |
What it does not do
- No injuries, suspensions, line-ups, transfers, coach changes, weather, referees or shot data. The model sees final scores only.
- No odds, tips, picks or betting advice, and no promise about any result. A 50% outcome fails half the time.
- One competition at a time: a European cup sheet rates teams on European cup matches only, and a league sheet ignores cup games.
- Early in a season, or for promoted teams, ratings lean on older results and the competition average; the sheet prints a data note when that applies.
- The public feed can lag after full time; kick-off times are shown in UTC as listed.
- No logos, crests or player photos. Chart colours are plain team colours from the data.
FAQ
Do I need an account anywhere? No. The data is public and read inside the workspace.
Can I ask about a match that is not scheduled? Yes. The sheet is labelled hypothetical and uses the first-named team as the home side, or a neutral ground if you say so.
Why is the draw often around 25%? In most leagues about a quarter of matches end level, and the score grid reflects that. A close match pushes the draw share up.
What does defence 130 mean? That team concedes about 1/1.3 as many goals as an average side would against the same attack. 100 is the competition average.
Information only, not betting advice. Unofficial tool, not affiliated with any league, club, governing body or data provider.
واجهات API الخارجية
site.api.espn.com (ESPN public soccer scoreboard and team-list JSON) · pypi.org, files.pythonhosted.org (Python Package Index)


