| now | 1 | X | 2 | |
|---|---|---|---|---|
| Estoril Praia · Relegation | 50% | 41% | 53% | 60% |
| Marítimo · Relegation | 14% | 19% | 14% | 8% |
How it works
What we do, what the numbers mean and how good they really are. The short version comes first; the full detail is further down for anyone who wants it.
The idea in one minute
We forecast every match
A statistical model estimates the chance of each result, of more than 2.5 goals and of both teams scoring, using only what was known 24 h before kick-off.
We lock it before the match
Each forecast goes into a record that can only grow: it is never edited, and a correction is a new line. We publish a fingerprint of each line, so nobody can rewrite the past, including us.
We play out the season
The matches left are simulated thousands of times. That gives each club its chance of the title, Europe or relegation, and it is what the simulator uses when you pick results.
We check ourselves against the market
The closing odds of the bookmakers are the hardest yardstick there is, so that is what we measure against, and we show the result whatever it says. This is a personal project, and nothing here is betting advice.
What the numbers mean
- 41 in 100
- If this match could be played 100 times, that is how many times it would end this way. It is a chance, not a promise.
- Favourite
- The result we think most likely, even at 40 in 100. Being the favourite does not mean being more likely than not.
- Right and Wrong
- Whether our favourite result happened. It is a simple reading: a favourite at 40 in 100 that loses is not necessarily a bad forecast.
- Test forecast
- Made after the match was played, to test the model. It proves nothing and does not count towards our record.
- Simulated seasons
- The rest of the season played out by computer, result by result. The simulator keeps only the simulations with the results you pick, so with many picks few are left and the numbers get rough; it tells you when that happens.
- Closing odds
- The last prices of the bookmakers before kick-off, with their margin removed. We use them to measure ourselves, not as a tip.
- RPS
- A score for a home, draw or away forecast: the closer to what happened, the lower. A small difference in RPS can be a big difference in quality.
- Calibration
- Whether the numbers mean what they say: of all the times we say 70 in 100, about 7 in 10 should happen.
- Holdout
- Seasons kept aside and tested only once, at the end, with the model already fixed, so the test cannot be tuned to look good.
- Ledger
- The record of forecasts. Lines are only ever added, and only those written before their match count.
So how good is it?
The test that counts: two whole seasons kept aside and opened only once, with the model already fixed. Beating the closing odds is very hard, and a model built on public data is not expected to. Here is what came out.
Calibrated probabilities for every match (1X2, over/under 2.5 goals and both teams to score), frozen 24 h before kick-off in an append-only ledger and scored against the no-vig closing market.
Both teams to score is shown for completeness: it has not beaten the base rates, neither in development nor on the holdout.
The model is not distinguishable from the closing market.
Over 612 matches of 2024/25 and 2025/26, opened once with the model fixed in a commit, the RPS of phase4-v1 minus the market's is +0.0041 [-0.0002; +0.0089] (95% interval). Below zero would mean beating the market.
f8648fb1X2 · RPS difference to the no-vig closing market
The full detail
For anyone who wants to check our work: every table and chart behind the site.
What we said and what happened
What we said and what happened
If the probabilities on this page are right, adding them up says how often each thing should happen, and chance alone still moves the real count around that number. The shaded band is where the count lands 9 times out of 10 when the probabilities are right: a result outside it is a warning sign, one inside it is not proof. These are the phase4-v2 forecasts shown above, one per match; the comparison with every model and the baselines is in the live record.
Prospective · 19 played match(es)
Prospective: frozen before kick-off, with data up to 24 h before it.
Counts against their 90% band
| Event | Matches | We said | 90% band | Happened | Market said |
|---|---|---|---|---|---|
| Home wins | 19 | 8.3 | 5 to 11 | 9 | 8.2 |
| Draws | 19 | 4.1 | 1 to 7 | 2 | 4.0 |
| Away wins | 19 | 6.6 | 4 to 10 | 8 | 6.8 |
| Over 2.5 goals | 19 | 10.0 | 7 to 13 | 9 | 10.4 |
| Both teams scored | 19 | 9.3 | 6 to 13 | 8 | — |
| Favourite won | 19 | 11.6 | 8 to 15 | 13 | 11.5 |
| Favourite below 50% | 5 | 2.0 | 0 to 4 | 1 | 2.0 |
| Favourite at 50% to 65% | 7 | 3.9 | 2 to 6 | 6 | 3.9 |
| Favourite at 65% or more | 7 | 5.7 | 4 to 7 | 6 | 5.7 |
Reliability diagrams
Forecasts grouped in five bins of 20 points. A point on the dashed diagonal means things with that probability happened exactly that often; the shaded bar is the 90% band chance allows in that bin, so a point outside its bar is the warning sign. The three 1X2 outcomes of a match are pooled, which makes the band a little too narrow.
1X2, every outcome
Over 2.5 goals
Both teams score
Model against the market, round by round (1X2)
Mean RPS of phase4-v2 minus that of the no-vig closing market in each round (a Tuesday-to-Monday week). Below zero the model was closer to what happened. The model was better in 0 of 3 rounds; one round is a handful of matches, so the overall verdict is the live record's, not this count.
Rounds as a table
| Week of | Matches | Model RPS | Market RPS | Δ |
|---|---|---|---|---|
| 2026-11-03 | 8 | 0.1507 | 0.1497 | +0.0010 |
| 2026-10-27 | 9 | 0.1220 | 0.1167 | +0.0052 |
| 2026-10-20 | 2 | 0.4564 | 0.3846 | +0.0718 |
Retrospective sample (88 matches): pipeline check, not evidence
Retrospective · 88 played match(es)
Retrospective: frozen after the match with the same 24 h cut-off. Useful to check the pipeline, never evidence.
Counts against their 90% band
| Event | Matches | We said | 90% band | Happened | Market said |
|---|---|---|---|---|---|
| Home wins | 88 | 37.7 | 31 to 45 | 35 | 38.2 |
| Draws | 88 | 20.6 | 14 to 27 | 18 | 20.3 |
| Away wins | 88 | 29.7 | 23 to 36 | 35 | 29.5 |
| Over 2.5 goals | 88 | 44.6 | 37 to 52 | 49 | 44.5 |
| Both teams scored | 88 | 43.4 | 36 to 51 | 42 | — |
| Favourite won | 88 | 49.9 | 43 to 57 | 49 | 50.5 |
| Favourite below 50% | 37 | 15.5 | 11 to 20 | 17 | 15.8 |
| Favourite at 50% to 65% | 25 | 13.9 | 10 to 18 | 10 | 13.9 |
| Favourite at 65% or more | 26 | 20.5 | 17 to 24 | 22 | 20.8 |
Reliability diagrams
Forecasts grouped in five bins of 20 points. A point on the dashed diagonal means things with that probability happened exactly that often; the shaded bar is the 90% band chance allows in that bin, so a point outside its bar is the warning sign. The three 1X2 outcomes of a match are pooled, which makes the band a little too narrow.
1X2, every outcome
Over 2.5 goals
Both teams score
Model against the market, round by round (1X2)
Mean RPS of phase4-v2 minus that of the no-vig closing market in each round (a Tuesday-to-Monday week). Below zero the model was closer to what happened. The model was better in 6 of 11 rounds; one round is a handful of matches, so the overall verdict is the live record's, not this count.
Rounds as a table
| Week of | Matches | Model RPS | Market RPS | Δ |
|---|---|---|---|---|
| 2026-10-27 | 7 | 0.1333 | 0.1309 | +0.0025 |
| 2026-10-20 | 9 | 0.3212 | 0.3223 | -0.0011 |
| 2026-10-13 | 1 | 0.5455 | 0.4782 | +0.0674 |
| 2026-10-06 | 9 | 0.1839 | 0.1867 | -0.0028 |
| 2026-09-15 | 9 | 0.2506 | 0.2519 | -0.0012 |
| 2026-09-08 | 11 | 0.1912 | 0.1993 | -0.0082 |
| 2026-09-01 | 9 | 0.1355 | 0.1241 | +0.0114 |
| 2026-08-25 | 9 | 0.1467 | 0.1423 | +0.0044 |
| 2026-08-18 | 7 | 0.1537 | 0.1554 | -0.0018 |
| 2026-08-11 | 8 | 0.1769 | 0.1805 | -0.0037 |
| 2026-08-04 | 9 | 0.2323 | 0.2150 | +0.0172 |
Ledger against the closing market
Ledger against the closing market
The lists above show one model per match; here every model in the ledger stands next to the baselines (base rates and the no-vig closing market), scored once the matches are played. Differences are paired on the matches both have; lower is better; filled dots mark intervals that exclude zero.
Prospective · 82 scored forecast(s), 2026-10-25 to 2026-11-08
Prospective: frozen before kick-off, with data up to 24 h before it.
1X2 · RPS
| Forecaster | Matches | RPS | Δ | log loss | Brier |
|---|---|---|---|---|---|
| Closing market, no-vig | 19 | 0.1588[0.1167; 0.3846] | — | 0.7465 | 0.4157 |
| e10-dynamic · e10_dynamic | 10 | 0.1317[0.0697; 0.1472] | -0.0016[-0.0025; +0.0024] | 0.7213 | 0.4081 |
| e7-xg · e7_xg | 17 | 0.1355[0.1220; 0.1507] | +0.0032[+0.0010; +0.0052] | 0.6852 | 0.3799 |
| phase2-v1 · base rates | 19 | 0.2532[0.2309; 0.3247] | +0.0944[-0.0599; +0.1142] | 1.0320 | 0.6240 |
| phase2-v1 · Dixon-Coles | 19 | 0.1588[0.1045; 0.3853] | -0.0000[-0.0122; +0.0135] | 0.7471 | 0.4142 |
| phase2-v1 · Elo | 19 | 0.1530[0.1123; 0.4479] | -0.0059[-0.0247; +0.0633] | 0.7586 | 0.4026 |
| phase4-v1 · model | 18 | 0.1133[0.0291; 0.1250] | -0.0142[-0.0247; -0.0045] | 0.6085 | 0.3284 |
| phase4-v2 · model | 18 | 0.1305[0.0461; 0.1507] | +0.0031[+0.0004; +0.0052] | 0.6660 | 0.3659 |
Over/under 2.5 · log loss
| Forecaster | Matches | log loss | Δ | Brier |
|---|---|---|---|---|
| Closing market, no-vig | 19 | 0.7090[0.4653; 0.7621] | — | 0.2561 |
| e10-dynamic · e10_dynamic | 10 | 0.7486[0.7176; 0.8724] | -0.0255[-0.1567; +0.0073] | 0.2750 |
| e7-xg · e7_xg | 17 | 0.7612[0.7418; 0.7785] | +0.0235[+0.0164; +0.0314] | 0.2805 |
| phase2-v1 · base rates | 19 | 0.6975[0.6401; 0.7083] | -0.0115[-0.0614; +0.1748] | 0.2522 |
| phase2-v1 · Dixon-Coles | 19 | 0.7490[0.6285; 0.7986] | +0.0399[-0.0304; +0.1632] | 0.2754 |
| phase4-v1 · model | 18 | 0.7342[0.6438; 0.7590] | +0.0078[-0.0031; +0.1093] | 0.2687 |
| phase4-v2 · model | 18 | 0.7342[0.6438; 0.7590] | +0.0078[-0.0031; +0.1093] | 0.2687 |
Both teams score · log loss
| Forecaster | Matches | log loss | Δ | Brier |
|---|---|---|---|---|
| e10-dynamic · e10_dynamic | 10 | 0.7181[0.6333; 0.7393] | +0.0245[-0.0621; +0.0461] | 0.2623 |
| e7-xg · e7_xg | 17 | 0.7000[0.6651; 0.7393] | +0.0062[-0.0293; +0.0461] | 0.2533 |
| phase2-v1 · base rates | 19 | 0.6935[0.6910; 0.6944] | — | 0.2502 |
| phase2-v1 · Dixon-Coles | 19 | 0.7095[0.6355; 0.7856] | +0.0160[-0.0589; +0.0925] | 0.2576 |
| phase4-v1 · model | 18 | 0.7010[0.6651; 0.7393] | +0.0074[-0.0293; +0.0461] | 0.2538 |
| phase4-v2 · model | 18 | 0.7010[0.6651; 0.7393] | +0.0074[-0.0293; +0.0461] | 0.2538 |
Running gap to the market (1X2)
Mean of RPS minus closing RPS over the matches scored so far. Below zero is better than the market.
Calibration by model version (1X2, every outcome)
Five bins; few matches per bin, so read the shape, not the points.
Retrospective sample (408 scored): pipeline check, not evidence
Retrospective · 408 scored forecast(s), 2026-08-07 to 2026-11-01
Retrospective: frozen after the match with the same 24 h cut-off. Useful to check the pipeline, never evidence.
1X2 · RPS
| Forecaster | Matches | RPS | Δ | log loss | Brier |
|---|---|---|---|---|---|
| Closing market, no-vig | 88 | 0.1966[0.1636; 0.2359] | — | 0.9378 | 0.5565 |
| e10-dynamic · e10_dynamic | 88 | 0.2008[0.1674; 0.2407] | +0.0042[-0.0002; +0.0093] | 0.9534 | 0.5649 |
| e7-xg · e7_xg | 81 | 0.2046[0.1715; 0.2457] | +0.0023[-0.0024; +0.0080] | 0.9764 | 0.5814 |
| phase2-v1 · base rates | 79 | 0.2410[0.2218; 0.2604] | +0.0433[+0.0090; +0.0757] | 1.0848 | 0.6588 |
| phase2-v1 · Dixon-Coles | 79 | 0.2005[0.1764; 0.2279] | +0.0029[-0.0059; +0.0114] | 0.9677 | 0.5762 |
| phase2-v1 · Elo | 79 | 0.2031[0.1707; 0.2376] | +0.0054[-0.0051; +0.0161] | 0.9772 | 0.5830 |
| phase4-v1 · model | 80 | 0.2113[0.1731; 0.2575] | +0.0071[-0.0008; +0.0166] | 1.0082 | 0.5975 |
| phase4-v2 · model | 80 | 0.2066[0.1715; 0.2521] | +0.0023[-0.0025; +0.0081] | 0.9844 | 0.5871 |
Over/under 2.5 · log loss
| Forecaster | Matches | log loss | Δ | Brier |
|---|---|---|---|---|
| Closing market, no-vig | 88 | 0.6671[0.6378; 0.6937] | — | 0.2375 |
| e10-dynamic · e10_dynamic | 88 | 0.6867[0.6506; 0.7169] | +0.0195[-0.0006; +0.0365] | 0.2469 |
| e7-xg · e7_xg | 81 | 0.6794[0.6451; 0.7105] | +0.0139[-0.0089; +0.0344] | 0.2435 |
| phase2-v1 · base rates | 79 | 0.6898[0.6789; 0.7001] | +0.0192[-0.0166; +0.0540] | 0.2483 |
| phase2-v1 · Dixon-Coles | 79 | 0.6985[0.6553; 0.7423] | +0.0279[+0.0010; +0.0537] | 0.2526 |
| phase4-v1 · model | 80 | 0.6835[0.6466; 0.7168] | +0.0164[-0.0052; +0.0357] | 0.2455 |
| phase4-v2 · model | 80 | 0.6835[0.6466; 0.7168] | +0.0164[-0.0052; +0.0357] | 0.2455 |
Both teams score · log loss
| Forecaster | Matches | log loss | Δ | Brier |
|---|---|---|---|---|
| e10-dynamic · e10_dynamic | 88 | 0.6929[0.6815; 0.7050] | +0.0019[-0.0113; +0.0152] | 0.2499 |
| e7-xg · e7_xg | 81 | 0.6945[0.6817; 0.7079] | +0.0019[-0.0113; +0.0152] | 0.2507 |
| phase2-v1 · base rates | 79 | 0.6932[0.6927; 0.6938] | — | 0.2500 |
| phase2-v1 · Dixon-Coles | 79 | 0.7144[0.6902; 0.7387] | +0.0212[-0.0034; +0.0458] | 0.2602 |
| phase4-v1 · model | 80 | 0.6942[0.6809; 0.7078] | +0.0019[-0.0113; +0.0152] | 0.2505 |
| phase4-v2 · model | 80 | 0.6942[0.6809; 0.7078] | +0.0019[-0.0113; +0.0152] | 0.2505 |
Running gap to the market (1X2)
Mean of RPS minus closing RPS over the matches scored so far. Below zero is better than the market.
Calibration by model version (1X2, every outcome)
Five bins; few matches per bin, so read the shape, not the points.
Holdout · 2024/25 and 2025/26
Holdout · 2024/25 and 2025/26
The two most recent seasons were kept closed while every model choice was made, then opened once with the model fixed in a commit. Walk-forward: each forecast uses only data available 24 h before kick-off. 95% intervals from a weekly block bootstrap. Differences are model minus the closing market; negative is better.
The claim, by season (1X2 Δ RPS)
1X2 · all models against the closing market
| Model | RPS | Δ RPS | Log loss | Δ log loss | Brier | Δ Brier |
|---|---|---|---|---|---|---|
| Base rates | 0.2300[0.2241; 0.2358] | +0.0542[+0.0420; +0.0659] | 1.0830[1.0633; 1.1042] | +0.1706[+0.1349; +0.2057] | 0.6558[0.6430; 0.6697] | +0.1156[+0.0906; +0.1402] |
| Elo (phase2-v1 = phase4-v1) | 0.1800[0.1689; 0.1906] | +0.0041[-0.0002; +0.0088] | 0.9256[0.8806; 0.9721] | +0.0132[-0.0018; +0.0296] | 0.5477[0.5158; 0.5792] | +0.0076[-0.0024; +0.0182] |
| Dixon-Coles | 0.1819[0.1711; 0.1923] | +0.0061[+0.0023; +0.0098] | 0.9379[0.8926; 0.9833] | +0.0255[+0.0132; +0.0376] | 0.5546[0.5230; 0.5860] | +0.0144[+0.0061; +0.0225] |
| Pre-closing odds, no-vig (Elo where late) | 0.1794[0.1687; 0.1900] | +0.0036[+0.0003; +0.0065] | 0.9227[0.8790; 0.9665] | +0.0103[-0.0010; +0.0206] | 0.5474[0.5169; 0.5776] | +0.0072[-0.0003; +0.0143] |
| Closing market, no-vig (AvgC) | 0.1758[0.1655; 0.1864] | — | 0.9124[0.8675; 0.9573] | — | 0.5401[0.5087; 0.5717] | — |
Over/under 2.5 · secondary
| Model | Log loss | Δ | ECE |
|---|---|---|---|
| Base rates | 0.6928[0.6919; 0.6938] | +0.0289[+0.0128; +0.0434] | 0.0082 |
| Dixon-Coles (phase2-v1) | 0.6772[0.6561; 0.7006] | +0.0133[+0.0013; +0.0266] | 0.0406 |
| Market as prior (phase4-v1) | 0.6719[0.6554; 0.6912] | +0.0079[-0.0010; +0.0172] | 0.0361 |
| Pre-closing odds, no-vig (Dixon-Coles where late) | 0.6721[0.6559; 0.6913] | +0.0081[-0.0008; +0.0175] | 0.0352 |
| Closing market, no-vig (AvgC) | 0.6640[0.6493; 0.6800] | — | 0.0439 |
Both teams score · secondary
| Model | Log loss | Δ | ECE |
|---|---|---|---|
| Base rates | 0.6928[0.6913; 0.6943] | — | 0.0082 |
| Dixon-Coles (phase2-v1) | 0.6965[0.6838; 0.7100] | +0.0037[-0.0086; +0.0170] | 0.0534 |
| Partial pooling (phase4-v1) | 0.6933[0.6848; 0.7018] | +0.0005[-0.0080; +0.0089] | 0.0235 |
Calibration of phase4-v1
Mean forecast against observed frequency in 10-point bins; the dashed diagonal is perfect calibration. Hover a point for its numbers.
Home win
Draw
Away win
Over 2.5
Both teams score
| Forecaster | Home win | Draw | Away win |
|---|---|---|---|
| phase4-v1 | 0.0340 | 0.0258 | 0.0371 |
| Closing market, no-vig (AvgC) | 0.0458 | 0.0351 | 0.0498 |
Favourites
| Market band | Matches | Market | Elo | Dixon-Coles | Won |
|---|---|---|---|---|---|
| 0% to 40% | 111 | 37% | 36% | 38% | 37% |
| 40% to 50% | 172 | 45% | 41% | 44% | 50% |
| 50% to 60% | 108 | 55% | 50% | 53% | 44% |
| 60% to 70% | 73 | 65% | 67% | 62% | 73% |
| 70% to 80% | 67 | 75% | 78% | 72% | 72% |
| 80% to 100% | 81 | 85% | 85% | 82% | 90% |
Closing-line value proxy · secondary
Where the model gave an outcome more probability than the pre-closing odds: how far the market moved towards it by kick-off (positive is towards the model).
| Market | Matches | Outcomes | Mean move |
|---|---|---|---|
| 1X2 | 369 | 569 | -0.0011[-0.0034; +0.0013] |
| Over/under 2.5 | 369 | 369 | +0.0039[+0.0014; +0.0066] |
Method
Method
Every external datum carries the moment it became available, and a forecast only uses what existed 24 h before kick-off; an automated test fails if a feature breaks this. Models are trained walk-forward on earlier matches only. The ledger is append-only JSONL in git: a correction is a new line, never an edit. The scores above are derived from the ledger, the results and the closing odds; nothing is written back.
RPS (ranked probability score) is the primary 1X2 metric because it respects the order home, draw, away; log loss and Brier are secondary. The closing market has its margin removed with the power method for 1X2 and proportionally for over/under.
Open data
The numbers on this page are also published as JSON, free to reuse under CC BY 4.0 with a credit to this site: one forecast per match, with results once played, and the season table with every final position and the head to head. index.json describes the files. Bookmaker odds are not included: their sources do not allow redistribution.
Every ledger line also has its SHA-256 in ledger-hashes.json. The ledger stays private because it holds odds, but this site's public git history dates each hash: anyone later shown a line can hash it and check that it was published, unchanged, before the match.
Every match, in detail
Open forecasts
Frozen before kick-off and not played yet, soonest first. Fair odds are 1/p, with no bookmaker margin. Exact scores come from the Dixon-Coles score grid, adjusted so its 1X2, over 2.5 and both-score totals equal the numbers on the card. Kick-off in Lisbon time. One forecast per match, from phase4-v2, the current model; the other versions in the ledger are compared in the live record.
No frozen forecast is waiting for kick-off. The scheduled job freezes each match 20 to 24 h before it starts.
Waiting for the result
These matches have started or finished, but their result is not in the data yet: results come from football-data.co.uk, which updates its file a few times a week. They are scored as soon as it arrives.
| Kick-off | Match | 1 | X | 2 | Most likely score |
|---|---|---|---|---|---|
| Sun 2026-11-08 15:30 | Estoril Praia – Marítimo | 46% | 27% | 27% | 1–1 (14%) |
Played matches
The phase4-v2 1X2 forecast next to the no-vig closing market; the actual outcome is highlighted. RPS per match: lower is better. Status: valid if frozen in time before kick-off, retrospective if frozen after the match (a pipeline check); any other status flags a timing problem.
| Kick-off | Match | Score | Status | Model | Closing market | RPS | |||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | X | 2 | 1 | X | 2 | model | market | ||||
| Sun 2026-11-08 20:30 | Rio Ave – Sporting de Braga | 0–1 | valid | 15% | 21% | 63% | 14% | 21% | 65% | 0.079 | 0.072 |
| Sun 2026-11-08 20:30 | Estrela da Amadora – Benfica | 2–3 | valid | 8% | 14% | 79% | 6% | 11% | 83% | 0.026 | 0.016 |
| Sun 2026-11-08 18:00 | Vitória SC – Porto | 1–2 | valid | 18% | 23% | 59% | 14% | 21% | 65% | 0.101 | 0.073 |
| Sun 2026-11-08 15:30 | Santa Clara – Gil Vicente | 1–2 | valid | 43% | 30% | 27% | 39% | 31% | 30% | 0.357 | 0.322 |
| Sat 2026-11-07 15:30 | Nacional – Académico de Viseu | 1–0 | valid | 32% | 29% | 39% | 32% | 30% | 38% | 0.312 | 0.303 |
| Sat 2026-11-07 20:30 | Sporting – Moreirense | 1–0 | valid | 85% | 10% | 5% | 87% | 9% | 4% | 0.013 | 0.009 |
| Sat 2026-11-07 18:00 | Alverca – Casa Pia | 1–1 | valid | 55% | 25% | 19% | 53% | 26% | 21% | 0.172 | 0.163 |
| Fri 2026-11-06 20:45 | Famalicão – Arouca | 1–0 | valid | 51% | 27% | 22% | 38% | 30% | 31% | 0.146 | 0.239 |
| Mon 2026-11-02 20:15 | Gil Vicente – Vitória SC | 0–0 | valid | 33% | 29% | 38% | 32% | 29% | 39% | 0.126 | 0.126 |
| Mon 2026-11-02 20:15 | Benfica – Alverca | 1–0 | valid | 84% | 10% | 5% | 88% | 8% | 4% | 0.014 | 0.008 |
| Sun 2026-11-01 20:30 | Sporting de Braga – Famalicão | 3–0 | valid | 54% | 27% | 19% | 56% | 25% | 19% | 0.125 | 0.117 |
| Sun 2026-11-01 18:00 | Marítimo – Santa Clara | 0–2 | valid | 28% | 30% | 42% | 30% | 30% | 40% | 0.208 | 0.222 |
| Sun 2026-11-01 18:00 | Académico de Viseu – Rio Ave | 2–1 | valid | 50% | 26% | 24% | 52% | 26% | 23% | 0.153 | 0.143 |
| Sun 2026-11-01 15:30 | Arouca – Nacional | 1–0 | valid | 53% | 25% | 22% | 60% | 23% | 17% | 0.133 | 0.095 |
| Sat 2026-10-31 20:30 | Porto – Estoril Praia | 4–0 | valid | 82% | 13% | 5% | 87% | 9% | 4% | 0.017 | 0.009 |
| Sat 2026-10-31 15:30 | Moreirense – Estrela da Amadora | 2–1 | valid | 34% | 28% | 39% | 34% | 28% | 38% | 0.295 | 0.293 |
| Fri 2026-10-30 20:15 | Casa Pia – Sporting | 0–2 | valid | 8% | 14% | 78% | 9% | 16% | 75% | 0.027 | 0.036 |
| Mon 2026-10-26 18:45 | Santa Clara – Benfica | 1–2 | valid | 10% | 19% | 71% | 11% | 18% | 72% | 0.046 | 0.046 |
| Sun 2026-10-25 20:30 | Sporting – Académico de Viseu | 1–2 | retrospective | 79% | 14% | 7% | 78% | 14% | 8% | 0.744 | 0.724 |
| Sun 2026-10-25 18:00 | Rio Ave – Famalicão | 0–4 | retrospective | 25% | 28% | 47% | 26% | 27% | 46% | 0.173 | 0.178 |
78 older row(s)
| Kick-off | Match | Score | Status | Model | Closing market | RPS | |||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | X | 2 | 1 | X | 2 | model | market | ||||
| Sun 2026-10-25 18:00 | Nacional – Sporting de Braga | 1–0 | retrospective | 16% | 23% | 62% | 14% | 21% | 64% | 0.546 | 0.574 |
| Sun 2026-10-25 15:30 | Estoril Praia – Moreirense | 1–3 | retrospective | 49% | 26% | 24% | 51% | 26% | 22% | 0.407 | 0.433 |
| Sat 2026-10-24 20:30 | Gil Vicente – Porto | 0–1 | retrospective | 12% | 20% | 68% | 12% | 21% | 67% | 0.060 | 0.061 |
| Sat 2026-10-24 18:00 | Alverca – Arouca | 0–1 | retrospective | 43% | 29% | 28% | 43% | 28% | 29% | 0.354 | 0.345 |
| Sat 2026-10-24 15:30 | Estrela da Amadora – Casa Pia | 0–2 | retrospective | 53% | 26% | 21% | 53% | 25% | 21% | 0.454 | 0.454 |
| Fri 2026-10-23 20:45 | Vitória SC – Marítimo | 5–0 | retrospective | 57% | 25% | 18% | 61% | 23% | 16% | 0.107 | 0.088 |
| Mon 2026-10-19 20:15 | Sporting de Braga – Gil Vicente | 1–2 | retrospective | 61% | 23% | 15% | 55% | 26% | 19% | 0.546 | 0.478 |
| Mon 2026-10-12 20:15 | Famalicão – Alverca | 1–4 | retrospective | 52% | 27% | 21% | 50% | 28% | 22% | 0.450 | 0.431 |
| Sun 2026-10-11 20:30 | Arouca – Estrela da Amadora | 1–0 | retrospective | 45% | 27% | 28% | 45% | 27% | 28% | 0.189 | 0.191 |
| Sun 2026-10-11 18:00 | Benfica – Vitória SC | 2–0 | retrospective | 81% | 13% | 6% | 81% | 12% | 7% | 0.021 | 0.021 |
| Sun 2026-10-11 15:30 | Rio Ave – Nacional | 3–2 | retrospective | 42% | 28% | 30% | 45% | 28% | 27% | 0.213 | 0.185 |
| Sat 2026-10-10 20:30 | Casa Pia – Santa Clara | 0–1 | retrospective | 21% | 28% | 52% | 25% | 29% | 46% | 0.139 | 0.179 |
| Sat 2026-10-10 20:30 | Académico de Viseu – Estoril Praia | 2–1 | retrospective | 42% | 27% | 31% | 44% | 27% | 28% | 0.215 | 0.195 |
| Sat 2026-10-10 18:00 | Marítimo – Porto | 1–2 | retrospective | 9% | 16% | 76% | 8% | 17% | 75% | 0.034 | 0.035 |
| Fri 2026-10-09 20:15 | Sporting de Braga – Sporting | 1–3 | retrospective | 24% | 28% | 49% | 32% | 30% | 39% | 0.160 | 0.238 |
| Fri 2026-10-09 18:45 | Moreirense – Gil Vicente | 0–1 | retrospective | 31% | 30% | 39% | 28% | 30% | 42% | 0.235 | 0.204 |
| Sun 2026-09-20 20:30 | Porto – Benfica | 3–1 | retrospective | 36% | 27% | 37% | 34% | 28% | 38% | 0.276 | 0.289 |
| Sun 2026-09-20 18:00 | Santa Clara – Sporting de Braga | 0–0 | retrospective | 25% | 29% | 46% | 27% | 29% | 44% | 0.136 | 0.132 |
| Sun 2026-09-20 18:00 | Estoril Praia – Casa Pia | 1–2 | retrospective | 55% | 25% | 20% | 57% | 24% | 19% | 0.466 | 0.486 |
| Sun 2026-09-20 15:30 | Vitória SC – Moreirense | 1–1 | retrospective | 64% | 22% | 14% | 65% | 21% | 13% | 0.214 | 0.222 |
| Sun 2026-09-20 15:30 | Estrela da Amadora – Académico de Viseu | 0–2 | retrospective | 45% | 28% | 27% | 44% | 28% | 28% | 0.364 | 0.355 |
| Sat 2026-09-19 20:30 | Sporting – Arouca | 2–2 | retrospective | 81% | 12% | 6% | 85% | 10% | 5% | 0.334 | 0.364 |
| Sat 2026-09-19 18:00 | Alverca – Rio Ave | 1–0 | retrospective | 49% | 28% | 23% | 54% | 25% | 20% | 0.154 | 0.125 |
| Sat 2026-09-19 15:30 | Nacional – Famalicão | 0–4 | retrospective | 26% | 29% | 45% | 23% | 28% | 50% | 0.182 | 0.151 |
| Sat 2026-09-19 15:30 | Gil Vicente – Marítimo | 1–1 | retrospective | 42% | 29% | 29% | 48% | 28% | 23% | 0.129 | 0.144 |
| Mon 2026-09-14 20:45 | Sporting de Braga – Estoril Praia | 1–0 | retrospective | 67% | 20% | 13% | 70% | 19% | 11% | 0.063 | 0.050 |
| Mon 2026-09-14 20:15 | Moreirense – Marítimo | 3–1 | retrospective | 39% | 29% | 32% | 34% | 30% | 36% | 0.238 | 0.281 |
| Mon 2026-09-14 18:45 | Rio Ave – Estrela da Amadora | 3–3 | retrospective | 34% | 28% | 37% | 33% | 29% | 38% | 0.128 | 0.128 |
| Sun 2026-09-13 20:30 | Famalicão – Sporting | 1–1 | retrospective | 16% | 21% | 63% | 15% | 22% | 63% | 0.212 | 0.212 |
| Sun 2026-09-13 18:00 | Benfica – Gil Vicente | 3–1 | retrospective | 87% | 10% | 4% | 88% | 9% | 4% | 0.009 | 0.008 |
| Sun 2026-09-13 18:00 | Arouca – Santa Clara | 1–2 | retrospective | 36% | 30% | 34% | 37% | 30% | 33% | 0.284 | 0.296 |
| Sat 2026-09-12 20:30 | Académico de Viseu – Vitória SC | 2–1 | retrospective | 25% | 27% | 47% | 25% | 28% | 46% | 0.389 | 0.387 |
| Sat 2026-09-12 18:00 | Casa Pia – Porto | 1–4 | retrospective | 7% | 13% | 80% | 5% | 12% | 84% | 0.022 | 0.015 |
| Sat 2026-09-12 15:30 | Nacional – Alverca | 1–3 | retrospective | 34% | 30% | 36% | 34% | 28% | 38% | 0.264 | 0.248 |
| Thu 2026-09-10 20:15 | Estrela da Amadora – Sporting de Braga | 2–1 | retrospective | 19% | 25% | 56% | 15% | 23% | 62% | 0.480 | 0.559 |
| Wed 2026-09-09 20:45 | Moreirense – Benfica | 0–4 | retrospective | 5% | 11% | 84% | 4% | 9% | 88% | 0.013 | 0.008 |
| Mon 2026-09-07 20:15 | Estoril Praia – Arouca | 0–0 | retrospective | 42% | 27% | 31% | 39% | 27% | 34% | 0.136 | 0.134 |
| Sun 2026-09-06 20:30 | Gil Vicente – Académico de Viseu | 0–1 | retrospective | 51% | 27% | 23% | 39% | 31% | 29% | 0.426 | 0.328 |
| Sun 2026-09-06 18:00 | Vitória SC – Casa Pia | 0–0 | retrospective | 64% | 22% | 13% | 67% | 21% | 12% | 0.215 | 0.229 |
| Sun 2026-09-06 15:30 | Santa Clara – Rio Ave | 4–0 | retrospective | 55% | 26% | 19% | 49% | 29% | 22% | 0.122 | 0.154 |
| Sat 2026-09-05 20:30 | Sporting – Nacional | 2–0 | retrospective | 81% | 12% | 6% | 89% | 8% | 3% | 0.019 | 0.007 |
| Sat 2026-09-05 18:00 | Marítimo – Benfica | 0–3 | retrospective | 6% | 13% | 81% | 5% | 11% | 84% | 0.020 | 0.015 |
| Sat 2026-09-05 18:00 | Alverca – Sporting de Braga | 1–2 | retrospective | 21% | 27% | 53% | 19% | 26% | 55% | 0.134 | 0.117 |
| Sat 2026-09-05 15:30 | Estrela da Amadora – Famalicão | 2–2 | retrospective | 27% | 29% | 44% | 32% | 29% | 39% | 0.134 | 0.126 |
| Fri 2026-09-04 20:15 | Porto – Moreirense | 2–1 | retrospective | 84% | 11% | 5% | 88% | 9% | 3% | 0.014 | 0.007 |
| Mon 2026-08-31 20:15 | Sporting de Braga – Vitória SC | 1–0 | retrospective | 56% | 25% | 19% | 53% | 27% | 20% | 0.117 | 0.130 |
| Mon 2026-08-31 20:15 | Benfica – Estoril Praia | 2–1 | retrospective | 84% | 11% | 5% | 90% | 7% | 3% | 0.014 | 0.005 |
| Sun 2026-08-30 20:30 | Famalicão – Gil Vicente | 0–0 | retrospective | 44% | 29% | 27% | 52% | 28% | 20% | 0.134 | 0.155 |
| Sun 2026-08-30 18:00 | Casa Pia – Moreirense | 0–1 | retrospective | 40% | 30% | 30% | 36% | 30% | 33% | 0.324 | 0.289 |
| Sun 2026-08-30 15:30 | Nacional – Estrela da Amadora | 2–3 | retrospective | 41% | 28% | 31% | 40% | 29% | 31% | 0.324 | 0.320 |
| Sat 2026-08-29 18:00 | Académico de Viseu – Porto | 0–3 | retrospective | 10% | 17% | 73% | 8% | 17% | 74% | 0.041 | 0.037 |
| Sat 2026-08-29 15:30 | Arouca – Marítimo | 2–1 | retrospective | 44% | 29% | 27% | 46% | 28% | 26% | 0.196 | 0.179 |
| Sat 2026-08-29 15:30 | Alverca – Santa Clara | 1–1 | retrospective | 35% | 30% | 35% | 40% | 30% | 30% | 0.123 | 0.126 |
| Fri 2026-08-28 20:15 | Rio Ave – Sporting | 0–4 | retrospective | 11% | 18% | 71% | 10% | 16% | 74% | 0.047 | 0.039 |
| Mon 2026-08-24 20:15 | Gil Vicente – Casa Pia | 2–0 | retrospective | 57% | 26% | 17% | 55% | 27% | 18% | 0.108 | 0.119 |
| Sun 2026-08-23 20:30 | Porto – Arouca | 2–0 | retrospective | 81% | 14% | 6% | 77% | 16% | 8% | 0.021 | 0.031 |
| Sun 2026-08-23 18:00 | Santa Clara – Famalicão | 1–0 | retrospective | 36% | 31% | 33% | 33% | 31% | 35% | 0.263 | 0.285 |
| Sun 2026-08-23 15:30 | Vitória SC – Nacional | 1–0 | retrospective | 57% | 24% | 19% | 61% | 23% | 16% | 0.110 | 0.091 |
| Sat 2026-08-22 20:30 | Sporting – Alverca | 3–1 | retrospective | 81% | 12% | 6% | 80% | 13% | 7% | 0.020 | 0.022 |
| Sat 2026-08-22 18:00 | Estoril Praia – Rio Ave | 0–2 | retrospective | 51% | 27% | 22% | 49% | 26% | 25% | 0.430 | 0.400 |
| Sat 2026-08-22 15:30 | Marítimo – Académico de Viseu | 2–2 | retrospective | 42% | 31% | 27% | 47% | 29% | 24% | 0.125 | 0.141 |
| Mon 2026-08-17 20:15 | Casa Pia – Benfica | 0–7 | retrospective | 6% | 13% | 81% | 5% | 11% | 84% | 0.021 | 0.015 |
| Sun 2026-08-16 20:30 | Famalicão – Marítimo | 1–2 | retrospective | 54% | 26% | 20% | 56% | 26% | 18% | 0.460 | 0.490 |
| Sun 2026-08-16 18:00 | Arouca – Moreirense | 4–0 | retrospective | 46% | 28% | 26% | 54% | 26% | 20% | 0.182 | 0.128 |
| Sun 2026-08-16 15:30 | Nacional – Estoril Praia | 2–0 | retrospective | 36% | 28% | 37% | 32% | 28% | 40% | 0.274 | 0.307 |
| Sat 2026-08-15 20:30 | Rio Ave – Porto | 0–2 | retrospective | 11% | 19% | 69% | 10% | 18% | 72% | 0.054 | 0.043 |
| Sat 2026-08-15 18:00 | Académico de Viseu – Santa Clara | 0–1 | retrospective | 34% | 32% | 34% | 35% | 31% | 35% | 0.277 | 0.273 |
| Sat 2026-08-15 15:30 | Alverca – Estrela da Amadora | 2–2 | retrospective | 39% | 30% | 31% | 45% | 28% | 26% | 0.125 | 0.137 |
| Fri 2026-08-14 20:15 | Sporting – Vitória SC | 3–2 | retrospective | 80% | 13% | 7% | 70% | 18% | 12% | 0.022 | 0.051 |
| Mon 2026-08-10 20:15 | Santa Clara – Nacional | 2–2 | retrospective | 51% | 27% | 21% | 51% | 29% | 20% | 0.155 | 0.149 |
| Sun 2026-08-09 20:30 | Moreirense – Sporting de Braga | 2–2 | retrospective | 19% | 25% | 56% | 14% | 23% | 63% | 0.177 | 0.208 |
| Sun 2026-08-09 20:30 | Gil Vicente – Rio Ave | 1–0 | retrospective | 49% | 27% | 24% | 45% | 28% | 26% | 0.158 | 0.184 |
| Sun 2026-08-09 20:30 | Benfica – Académico de Viseu | 2–2 | retrospective | 89% | 8% | 3% | 89% | 8% | 3% | 0.399 | 0.400 |
| Sun 2026-08-09 18:00 | Porto – Alverca | 2–0 | retrospective | 83% | 12% | 5% | 82% | 13% | 5% | 0.015 | 0.018 |
| Sat 2026-08-08 20:30 | Estrela da Amadora – Sporting | 2–2 | retrospective | 7% | 13% | 80% | 9% | 17% | 74% | 0.322 | 0.276 |
| Sat 2026-08-08 18:00 | Vitória SC – Arouca | 0–1 | retrospective | 55% | 25% | 20% | 50% | 26% | 24% | 0.466 | 0.415 |
| Sat 2026-08-08 15:30 | Marítimo – Casa Pia | 1–0 | retrospective | 36% | 32% | 32% | 49% | 29% | 23% | 0.259 | 0.157 |
| Fri 2026-08-07 20:15 | Estoril Praia – Famalicão | 1–1 | retrospective | 27% | 28% | 46% | 32% | 29% | 39% | 0.140 | 0.129 |
The season, in detail
Season 2026/27: how the table may finish
The table after 98 results, with the 208 matches left simulated 50,000 times (data to 2026-11-09, UTC). Each club's strength comes from the market's odds on its recent matches and may drift until May; scores follow the Dixon-Coles grid, and ties the league's rules. Frozen in the season ledger as season-s2-v1 after every new result.
| # | Club | Points nowPts | ChampionTitle | Runner-up 2nd | Champions qualifying 3rd | Europa 4th | Conference 5th | Mid-table 6th–15th | Relegation play-off16th | RelegationDown | Final points (80%) |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Porto | 33 | 59% | 38% | 4% | 86.3 (80–93) |
|||||
| 2 | Benfica | 28 | 40% | 55% | 5% | 84.9 (79–91) |
|||||
| 3 | Sporting | 24 | 1% | 7% | 87% | 4% | 72.3 (65–79) |
||||
| 4 | Sporting de Braga | 17 | 3% | 55% | 21% | 21% | 57.5 (50–65) |
||||
| 5 | Santa Clara | 21 | 13% | 22% | 64% | 51.0 (43–59) |
|||||
| 6 | Arouca | 20 | 9% | 16% | 74% | 49.5 (42–57) |
|||||
| 7 | Gil Vicente | 18 | 8% | 15% | 77% | 48.7 (41–57) |
|||||
| 8 | Académico de Viseu | 20 | 5% | 11% | 84% | 47.3 (40–55) |
|||||
| 9 | Vitória SC | 9 | 3% | 7% | 88% | 1% | 45.4 (37–53) |
||||
| 10 | Famalicão | 13 | 2% | 5% | 92% | 1% | 1% | 43.7 (36–51) |
|||
| 11 | Alverca | 12 | 1% | 2% | 93% | 3% | 2% | 40.3 (33–48) |
|||
| 12 | Moreirense | 14 | 84% | 8% | 8% | 35.9 (29–43) |
|||||
| 13 | Estrela da Amadora | 10 | 81% | 9% | 10% | 35.5 (28–43) |
|||||
| 14 | Marítimo | 8 | 74% | 11% | 14% | 34.4 (27–42) |
|||||
| 15 | Nacional | 10 | 48% | 17% | 35% | 30.1 (23–37) |
|||||
| 16 | Casa Pia | 8 | 46% | 17% | 37% | 29.8 (23–37) |
|||||
| 17 | Rio Ave | 7 | 39% | 17% | 43% | 28.8 (22–36) |
|||||
| 18 | Estoril Praia | 2 | 34% | 15% | 50% | 28.1 (20–36) |
What the next matches put at stake
For each match of the next week, the season chances that move most with its result. They are counted again in the simulations that drew each result, so several matches stay consistent with each other; the percentages under the teams are how often the simulations drew each result.
| now | 1 | X | 2 | |
|---|---|---|---|---|
| Nacional · Relegation | 35% | 41% | 34% | 23% |
| Marítimo · Relegation | 14% | 10% | 17% | 22% |
| now | 1 | X | 2 | |
|---|---|---|---|---|
| Académico de Viseu · Europe (1st–5th) | 16% | 22% | 14% | 11% |
| now | 1 | X | 2 | |
|---|---|---|---|---|
| Rio Ave · Relegation | 43% | 48% | 42% | 31% |
| Arouca · Europe (1st–5th) | 26% | 31% | 22% | 18% |
| Estoril Praia · Relegation | 50% | 49% | 50% | 54% |
| now | 1 | X | 2 | |
|---|---|---|---|---|
| Vitória SC · Europe (1st–5th) | 11% | 13% | 8% | 6% |
| Estrela da Amadora · Relegation | 10% | 12% | 9% | 5% |
| now | 1 | X | 2 | |
|---|---|---|---|---|
| Santa Clara · Europe (1st–5th) | 36% | 27% | 32% | 43% |
| Moreirense · Relegation | 8% | 4% | 7% | 10% |
| Arouca · Europe (1st–5th) | 26% | 28% | 27% | 24% |
| now | 1 | X | 2 | |
|---|---|---|---|---|
| Estoril Praia · Relegation | 50% | 56% | 50% | 38% |
| Gil Vicente · Europe (1st–5th) | 23% | 29% | 19% | 16% |
| Rio Ave · Relegation | 43% | 42% | 44% | 46% |
| now | 1 | X | 2 | |
|---|---|---|---|---|
| Porto · Title | 59% | 66% | 54% | 49% |
| Benfica · Title | 40% | 34% | 45% | 48% |
| Sporting · Champions (1st–2nd) | 9% | 5% | 9% | 15% |
| now | 1 | X | 2 | |
|---|---|---|---|---|
| Benfica · Title | 40% | 42% | 30% | 27% |
| Porto · Title | 59% | 57% | 68% | 72% |
| Famalicão · Europe (1st–5th) | 6% | 6% | 8% | 13% |
| now | 1 | X | 2 | |
|---|---|---|---|---|
| Casa Pia · Relegation | 37% | 23% | 35% | 40% |
| Sporting de Braga · Europe (1st–5th) | 79% | 69% | 74% | 83% |
| Rio Ave · Relegation | 43% | 47% | 44% | 42% |
Title chances, result by result
Relegation chances, result by result
Can these numbers be trusted?
Before anything was published, the same simulator was tested on 2017/18 to 2023/24 at six moments of each season, with the holdout untouched. The final points fell inside the 80% interval 84% of the time and inside the 90% one 91%.
Clubs leading by 3 points or more were given 85% on average to win the league; 88% of them did (16 cases).
Final-position RPS 0.0712, against 0.0736 for the same simulation driven by Elo (lower is better; the difference is within the noise of seven seasons). A chance is not a promise: a club at 50% misses half the time.
Test forecasts (80)
Made after these matches were played, to test the model before the real record began. They prove nothing and do not count towards our record.
- 1–2Sporting – Académico de Viseuwe gave Sporting 79%Wrong
- 0–4Rio Ave – Famalicãowe gave Famalicão 47%Right
- 1–0Nacional – Sporting de Bragawe gave Sporting de Braga 62%Wrong
- 1–3Estoril Praia – Moreirensewe gave Estoril Praia 49%Wrong
- 0–1Gil Vicente – Portowe gave Porto 68%Right
- 0–1Alverca – Aroucawe gave Alverca 43%Wrong
- 0–2Estrela da Amadora – Casa Piawe gave Estrela da Amadora 53%Wrong
- 5–0Vitória SC – Marítimowe gave Vitória SC 57%Right
- 1–2Sporting de Braga – Gil Vicentewe gave Sporting de Braga 61%Wrong
- 1–4Famalicão – Alvercawe gave Famalicão 52%Wrong
- 1–0Arouca – Estrela da Amadorawe gave Arouca 45%Right
- 2–0Benfica – Vitória SCwe gave Benfica 81%Right
- 3–2Rio Ave – Nacionalwe gave Rio Ave 42%Right
- 0–1Casa Pia – Santa Clarawe gave Santa Clara 52%Right
- 2–1Académico de Viseu – Estoril Praiawe gave Académico de Viseu 42%Right
- 1–2Marítimo – Portowe gave Porto 76%Right
- 1–3Sporting de Braga – Sportingwe gave Sporting 49%Right
- 0–1Moreirense – Gil Vicentewe gave Gil Vicente 39%Right
- 3–1Porto – Benficawe gave Benfica 37%Wrong
- 0–0Santa Clara – Sporting de Bragawe gave Sporting de Braga 46%Wrong
- 1–2Estoril Praia – Casa Piawe gave Estoril Praia 55%Wrong
- 1–1Vitória SC – Moreirensewe gave Vitória SC 64%Wrong
- 0–2Estrela da Amadora – Académico de Viseuwe gave Estrela da Amadora 45%Wrong
- 2–2Sporting – Aroucawe gave Sporting 81%Wrong
- 1–0Alverca – Rio Avewe gave Alverca 49%Right
- 0–4Nacional – Famalicãowe gave Famalicão 45%Right
- 1–1Gil Vicente – Marítimowe gave Gil Vicente 42%Wrong
- 1–0Sporting de Braga – Estoril Praiawe gave Sporting de Braga 67%Right
- 3–1Moreirense – Marítimowe gave Moreirense 39%Right
- 3–3Rio Ave – Estrela da Amadorawe gave Estrela da Amadora 37%Wrong
- 1–1Famalicão – Sportingwe gave Sporting 63%Wrong
- 3–1Benfica – Gil Vicentewe gave Benfica 87%Right
- 1–2Arouca – Santa Clarawe gave Arouca 36%Wrong
- 2–1Académico de Viseu – Vitória SCwe gave Vitória SC 47%Wrong
- 1–4Casa Pia – Portowe gave Porto 80%Right
- 1–3Nacional – Alvercawe gave Alverca 36%Right
- 2–1Estrela da Amadora – Sporting de Bragawe gave Sporting de Braga 56%Wrong
- 0–4Moreirense – Benficawe gave Benfica 84%Right
- 0–0Estoril Praia – Aroucawe gave Estoril Praia 42%Wrong
- 0–1Gil Vicente – Académico de Viseuwe gave Gil Vicente 51%Wrong
- 0–0Vitória SC – Casa Piawe gave Vitória SC 64%Wrong
- 4–0Santa Clara – Rio Avewe gave Santa Clara 55%Right
- 2–0Sporting – Nacionalwe gave Sporting 81%Right
- 0–3Marítimo – Benficawe gave Benfica 81%Right
- 1–2Alverca – Sporting de Bragawe gave Sporting de Braga 53%Right
- 2–2Estrela da Amadora – Famalicãowe gave Famalicão 44%Wrong
- 2–1Porto – Moreirensewe gave Porto 84%Right
- 1–0Sporting de Braga – Vitória SCwe gave Sporting de Braga 56%Right
- 2–1Benfica – Estoril Praiawe gave Benfica 84%Right
- 0–0Famalicão – Gil Vicentewe gave Famalicão 44%Wrong
- 0–1Casa Pia – Moreirensewe gave Casa Pia 40%Wrong
- 2–3Nacional – Estrela da Amadorawe gave Nacional 41%Wrong
- 0–3Académico de Viseu – Portowe gave Porto 73%Right
- 2–1Arouca – Marítimowe gave Arouca 44%Right
- 1–1Alverca – Santa Clarawe gave Alverca 35%Wrong
- 0–4Rio Ave – Sportingwe gave Sporting 71%Right
- 2–0Gil Vicente – Casa Piawe gave Gil Vicente 57%Right
- 2–0Porto – Aroucawe gave Porto 81%Right
- 1–0Santa Clara – Famalicãowe gave Santa Clara 36%Right
- 1–0Vitória SC – Nacionalwe gave Vitória SC 57%Right
- 3–1Sporting – Alvercawe gave Sporting 81%Right
- 0–2Estoril Praia – Rio Avewe gave Estoril Praia 51%Wrong
- 2–2Marítimo – Académico de Viseuwe gave Marítimo 42%Wrong
- 0–7Casa Pia – Benficawe gave Benfica 81%Right
- 1–2Famalicão – Marítimowe gave Famalicão 54%Wrong
- 4–0Arouca – Moreirensewe gave Arouca 46%Right
- 2–0Nacional – Estoril Praiawe gave Estoril Praia 37%Wrong
- 0–2Rio Ave – Portowe gave Porto 69%Right
- 0–1Académico de Viseu – Santa Clarawe gave Académico de Viseu 34%Wrong
- 2–2Alverca – Estrela da Amadorawe gave Alverca 39%Wrong
- 3–2Sporting – Vitória SCwe gave Sporting 80%Right
- 2–2Santa Clara – Nacionalwe gave Santa Clara 51%Wrong
- 2–2Moreirense – Sporting de Bragawe gave Sporting de Braga 56%Wrong
- 1–0Gil Vicente – Rio Avewe gave Gil Vicente 49%Right
- 2–2Benfica – Académico de Viseuwe gave Benfica 89%Wrong
- 2–0Porto – Alvercawe gave Porto 83%Right
- 2–2Estrela da Amadora – Sportingwe gave Sporting 80%Wrong
- 0–1Vitória SC – Aroucawe gave Vitória SC 55%Wrong
- 1–0Marítimo – Casa Piawe gave Marítimo 36%Right
- 1–1Estoril Praia – Famalicãowe gave Famalicão 46%Wrong