Does form actually carry?
A team has won three in a row. Does that make it more likely to win the fourth, or is it just a team that has been lucky three times? This page counts what actually happened, across every competition and season held.
The number that makes the rest readable
A continuation rate on its own tells you nothing. Any rate has to be read against what would have happened anyway, and that comparison is the whole point of the page. Everything below is a rate for a team already on a run. Set it beside the rate for a team picked at random and the gap between them, if there is one, is what form is worth.
Read those pairs across, not down. A gap of a point or two is noise dressed as a pattern. A gap that holds as the runs get longer is worth something, and the tables below are where you check whether it does. Bear in mind that a team on a long winning run is usually a good team, so some of any gap is simply the good teams showing up again rather than the run itself doing any work.
How to read these tables
Each row is a run length already reached. Reached counts how many times a team stood at exactly that length; continued counts how many of those extended by one more match. The rate is the second divided by the first. It's a conditional rate, not the chance of a run starting.
Runs are counted per team, per competition, in kickoff order, from a minimum length of 3. A run is not reset by the end of a season: a team unbeaten in its last four matches of one campaign and its first three of the next has a run of seven. It is reset by a change of competition, and by an absence of a full season or more. A promoted team starts again, and a club that leaves and later returns doesn't have its old run resumed.
The two columns beside "All"
Because runs cross the summer, every continuation is also filed by whether it happened inside one campaign or across a close-season break. Within a season and Across a summer partition All exactly, so the two add up to it. We publish the split because a run continuing in April and a run continuing in August after three months of transfers aren't obviously the same thing, and this is the data that would settle it.
Winning run
Consecutive wins. A draw ends the run. A team picked at random wins a given match 37.4% of the time, so that is the number every rate in this table is competing with.
| Run reached | All | Within a season | Across a summer | |||
|---|---|---|---|---|---|---|
| Continued | Rate | Continued | Rate | Continued | Rate | |
| 3 | 380 / 823 | 46.2% | 369 / 801 | 46.1% | 11 / 22 | 50.0% |
| 4 | 205 / 380 | 53.9% | 200 / 374 | 53.5% | 5 / 6 | insufficient sample |
| 5 | 122 / 202 | 60.4% | 122 / 198 | 61.6% | 0 / 4 | insufficient sample |
| 6 | 67 / 121 | 55.4% | 65 / 118 | 55.1% | 2 / 3 | insufficient sample |
| 7 | 48 / 67 | 71.6% | 47 / 65 | 72.3% | 1 / 2 | insufficient sample |
| 8 | 29 / 48 | 60.4% | 29 / 48 | 60.4% | — | no observations |
| 9 | 22 / 29 | 75.9% | 20 / 27 | 74.1% | 2 / 2 | insufficient sample |
| 10 or more | 32 / 54 | 59.3% | 32 / 54 | 59.3% | — | no observations |
11 run(s) of this type were still alive at the end of the available data, and are left out of the rate at their final length. 11 were already running on the first day we hold data, so they are counted from shorter than they really were. Both are explained below.
Unbeaten run
Consecutive matches without defeat. Draws continue the run. A team picked at random avoids defeat in a given match 62.6% of the time, so that is the number every rate in this table is competing with.
| Run reached | All | Within a season | Across a summer | |||
|---|---|---|---|---|---|---|
| Continued | Rate | Continued | Rate | Continued | Rate | |
| 3 | 1222 / 1907 | 64.1% | 1195 / 1866 | 64.0% | 27 / 41 | 65.9% |
| 4 | 803 / 1211 | 66.3% | 781 / 1181 | 66.1% | 22 / 30 | 73.3% |
| 5 | 540 / 797 | 67.8% | 527 / 779 | 67.7% | 13 / 18 | insufficient sample |
| 6 | 372 / 537 | 69.3% | 364 / 526 | 69.2% | 8 / 11 | insufficient sample |
| 7 | 269 / 367 | 73.3% | 266 / 361 | 73.7% | 3 / 6 | insufficient sample |
| 8 | 201 / 268 | 75.0% | 198 / 264 | 75.0% | 3 / 4 | insufficient sample |
| 9 | 156 / 201 | 77.6% | 152 / 196 | 77.6% | 4 / 5 | insufficient sample |
| 10 or more | 792 / 938 | 84.4% | 776 / 921 | 84.3% | 16 / 17 | insufficient sample |
50 run(s) of this type were still alive at the end of the available data, and are left out of the rate at their final length. 47 were already running on the first day we hold data, so they are counted from shorter than they really were. Both are explained below.
Scoring run
Consecutive matches in which the team scored at least once.
| Run reached | All | Within a season | Across a summer | |||
|---|---|---|---|---|---|---|
| Continued | Rate | Continued | Rate | Continued | Rate | |
| 3 | 1640 / 2265 | 72.4% | 1596 / 2214 | 72.1% | 44 / 51 | 86.3% |
| 4 | 1190 / 1620 | 73.5% | 1164 / 1589 | 73.3% | 26 / 31 | 83.9% |
| 5 | 880 / 1180 | 74.6% | 860 / 1155 | 74.5% | 20 / 25 | 80.0% |
| 6 | 679 / 871 | 78.0% | 663 / 850 | 78.0% | 16 / 21 | 76.2% |
| 7 | 523 / 670 | 78.1% | 509 / 652 | 78.1% | 14 / 18 | insufficient sample |
| 8 | 407 / 517 | 78.7% | 395 / 503 | 78.5% | 12 / 14 | insufficient sample |
| 9 | 314 / 404 | 77.7% | 310 / 397 | 78.1% | 4 / 7 | insufficient sample |
| 10 or more | 1668 / 1964 | 84.9% | 1626 / 1920 | 84.7% | 42 / 44 | 95.5% |
98 run(s) of this type were still alive at the end of the available data, and are left out of the rate at their final length. 58 were already running on the first day we hold data, so they are counted from shorter than they really were. Both are explained below.
Where these rates are soft, and why
A run has two ends, and we can be sure about neither of them at the edge of the data. Both problems are small. Neither is hidden.
Runs that hadn't finished yet
Some runs were still going at a team's most recent match, or at its last match before leaving a competition. Those runs never got the chance to fail, so counting them as failures would push every rate on this page down. Instead they count towards the shorter lengths they did reach, and are left out of the rate at the length they stopped at. This was not decided in advance — it was resolved when the figures were first built and flagged here as unreviewed, then checked against the data and signed off on 15 August 2026. The rule in full:
a run still alive at the end of the available data for a team in a competition - its last recorded match, or its last before an absence - is censored: it counts as reached/continued for lengths below its terminal length, and is excluded from the denominator at its terminal length rather than counted as a failure to continue. Not specified by the brief; resolved at build time, reviewed against the held data and ratified 2026-08-15 on Claire's sign-off. The alternative - counting a censored run as a failure - records the edge of the data window as a real result, and would move every published rate down by up to 1.1 percentage points.
Runs that had already started
The opposite problem, and the one still open. We hold matches from 2022 onwards, and 158 of 240 team histories begin at that edge rather than at the team joining the competition. A team already on a run when our data starts is counted from one, not from wherever it really was. So a run that ended at twelve can be recorded as ending at four — and because longer runs continue more often than short ones, that drags the shortest rows on this page down a little. The fix would be to throw those runs away entirely, the same way the unfinished ones are set aside. It hasn't been done, because it would cost real matches to correct something worth under a point:
the counterpart at the other end of a run, disclosed rather than corrected. A run already in progress on the first day of the data window is restarted at 1, because no earlier match is held, so its true length is longer than the observed one and a failure is filed at a shorter length than it really occurred at. Because continuation rates rise with length, this biases the short-length rates downward - the opposite direction to the bias that censoring guards against. The affected runs are counted per streak type in streak_continuation.json as runs_left_truncated_by_window_start. Discarding those opening runs outright is the symmetric fix and remains open; it was not applied on 2026-08-15 because it costs real data for a sub-1-point correction.
If that changes, this page changes with it, and the change will be visible in the publication record.
How these numbers were produced
- Source
- Finished fixtures held in this project's own database, 11,764 matches across 8 competitions, seasons 2022–2026. No third-party statistics feed is involved in these figures.
- A match counts when
- ft_home_goals and ft_away_goals both non-null (settled)
- Half-time leader
- team ahead on ht_*_goals; fixtures level at half-time reported as their own category, not assigned to either side
- Second-half goals
- full-time minus half-time per team; fixture excluded if either ft_*_goals or ht_*_goals is null
- Suppression
- Any cell with a sample below 20 is shown as "insufficient sample" instead of a rate. 336 cells are suppressed in this build.
- Known exclusions
- 3 fixture(s) are excluded from the half-time figures because half-time goals are missing for them. They are listed in the manifest.
- When these figures were counted
- 2026-08-15 08:51:34 UTC. They are recounted from scratch each time, so a
result that lands today moves them tomorrow rather than at the end of the
season. The version of the code that counted them is
f62dd09610.
The full manifest (every parameter, a per-column census of missing data, and the complete list of suppressed cells) is published as manifest.json. Nothing on these pages is derived from data not linked here.