Before anyone had placed a single bet, we wrote down what we were trying to prove and how we would know if we were wrong. This page is that document, and the proof it has not been edited since.
Whoever runs a prediction market holds every lever that moves its headline number. We choose which questions get listed, which get cancelled, when they close, and which results get shown. Decide any of that after seeing the answers and the result is worthless, because picking honestly and picking the flattering one look identical from outside.
So the plan was written first and locked. Everything below was fixed before a single one of these questions had an answer.
On South African contingencies that no licensed operator currently offers, closing prices produced by a small peer-to-peer market are better calibrated than the hand-set opening priors those markets began at.
We are wrong if: The Brier Skill Score of closing prices against opening priors is zero or negative at the primary trading threshold. That would mean trading moved prices away from the truth, or not at all.
Every market opens on odds set by hand, and closes on whatever price the trading arrived at. Once the answer is known, both can be scored against it. If trading is doing anything useful, the closing price should be the closer of the two.
That comparison is a single number:
BSS = 1 - BS(close) / BS(prior)
Above 0, trading moved the odds toward the truth. 0, it made no difference. Below 0, trading made the odds worse and the claim fails.
It is measured on markets with at least 5 player trades. That floor is not there to flatter the number. Player-initiated trades only. The house market maker quotes around the prior, so an untraded market's closing price is the prior and the comparison is empty by construction.
No result yet
None of the 53 markets in the sample have resolved. The table below fills in on its own as they settle, and nobody has to trust that it was filled in honestly, because the code that computes it is the same code that runs the leaderboard.
Three thresholds, all three declared in advance so that none can be picked afterwards to suit the answer. The main test is marked; the other two are shown whether they help or not.
| Markets counted | How many | Closing price | Opening odds | Skill |
|---|---|---|---|---|
| 1 trade or more | 0 | - | - | - |
| 5 trades or more main test | 0 | - | - | - |
| 20 trades or more | 0 | - | - | - |
The two score columns are Brier scores, where lower is better. Skill is the gap between them as a percentage.
The plan above, together with all 53 markets and the exact opening odds each one started at, was run through SHA-256. Change any character of it and this fingerprint changes.
Intact, matches the frozen plan
e7b38f8c4b36b6a49b6e35dd4834bff6b9c79141d2c5bfe55e4f059bc3c37818
Frozen 2026-08-06 11:42 SAST. Check it yourself with python -m app.prereg, which recomputes the fingerprint from the plan rather than trusting the one printed here.
Deciding what to exclude after seeing the results is the easiest way to manufacture a good number, so the exclusions were fixed with everything else.
Pre-registration removes one specific freedom: choosing the analysis after seeing the data. It does not make the study good, and pretending otherwise would be the same failure wearing a different hat.
Everything a reader might want to check, kept out of the way of everyone else.
Published alongside the main test whatever it says, because a result is only one of these.
Every market in scope with the opening odds being tested. These are recorded here rather than read from the live database later, because a baseline you can still edit is not a baseline.
| Ticker | Category | Opens at | Closes |
|---|---|---|---|
| G-ANC-26NOV07 | the vote | 62c | 2026-11-04 |
| G-BOKSERIES-26SEP12 | sport | 30c | 2026-09-12 |
| G-BOKTEST-26AUG22 | sport | 52c | 2026-08-22 |
| G-BOKTEST-26AUG29 | sport | 52c | 2026-08-29 |
| G-BOKTEST-26SEP05 | sport | 52c | 2026-09-05 |
| G-BOKTEST-26SEP12 | sport | 52c | 2026-09-12 |
| G-CPI-26AUG | money | 68c | 2026-09-23 |
| G-CPI-26SEP | money | 68c | 2026-10-23 |
| G-DERBY-26OCT31 | sport | 44c | 2026-10-31 |
| G-FUEL-26OCT | money | 42c | 2026-11-03 |
| G-FUEL-26SEP | money | 42c | 2026-10-03 |
| G-HEAT-26OCT | utilities | 30c | 2026-11-06 |
| G-HEAT-26SEP | utilities | 30c | 2026-10-06 |
| G-HOUSE-26AUG | money | 62c | 2026-11-15 |
| G-HUNG-26NOV09 | the vote | 65c | 2026-11-06 |
| G-LOADSHED-26AUG | utilities | 12c | 2026-09-02 |
| G-LOADSHED-26OCT | utilities | 12c | 2026-11-02 |
| G-LOADSHED-26SEP | utilities | 12c | 2026-10-02 |
| G-NETFLIX-26AUG11 | screens | 38c | 2026-08-11 |
| G-NETFLIX-26AUG18 | screens | 38c | 2026-08-18 |
| G-NETFLIX-26AUG25 | screens | 38c | 2026-08-25 |
| G-NETFLIX-26NOV03 | screens | 38c | 2026-11-03 |
| G-NETFLIX-26NOV10 | screens | 38c | 2026-11-10 |
| G-NETFLIX-26OCT06 | screens | 38c | 2026-10-06 |
| G-NETFLIX-26OCT13 | screens | 38c | 2026-10-13 |
| G-NETFLIX-26OCT20 | screens | 38c | 2026-10-20 |
| G-NETFLIX-26OCT27 | screens | 38c | 2026-10-27 |
| G-NETFLIX-26SEP01 | screens | 38c | 2026-09-01 |
| G-NETFLIX-26SEP08 | screens | 38c | 2026-09-08 |
| G-NETFLIX-26SEP15 | screens | 38c | 2026-09-15 |
| G-NETFLIX-26SEP22 | screens | 38c | 2026-09-22 |
| G-NETFLIX-26SEP29 | screens | 38c | 2026-09-29 |
| G-POWERBALL-26AUG07 | the draw | 22c | 2026-08-07 |
| G-POWERBALL-26AUG11 | the draw | 22c | 2026-08-11 |
| G-POWERBALL-26AUG14 | the draw | 22c | 2026-08-14 |
| G-POWERBALL-26AUG18 | the draw | 22c | 2026-08-18 |
| G-POWERBALL-26AUG21 | the draw | 22c | 2026-08-21 |
| G-REPO-26SEP17 | money | 35c | 2026-09-17 |
| G-TURNOUT-26NOV07 | the vote | 45c | 2026-11-04 |
| G-VAAL-26AUG11 | utilities | 72c | 2026-08-11 |
| G-VAAL-26AUG18 | utilities | 72c | 2026-08-18 |
| G-VAAL-26AUG25 | utilities | 72c | 2026-08-25 |
| G-VAAL-26NOV03 | utilities | 72c | 2026-11-03 |
| G-VAAL-26NOV10 | utilities | 72c | 2026-11-10 |
| G-VAAL-26OCT06 | utilities | 72c | 2026-10-06 |
| G-VAAL-26OCT13 | utilities | 72c | 2026-10-13 |
| G-VAAL-26OCT20 | utilities | 72c | 2026-10-20 |
| G-VAAL-26OCT27 | utilities | 72c | 2026-10-27 |
| G-VAAL-26SEP01 | utilities | 72c | 2026-09-01 |
| G-VAAL-26SEP08 | utilities | 72c | 2026-09-08 |
| G-VAAL-26SEP15 | utilities | 72c | 2026-09-15 |
| G-VAAL-26SEP22 | utilities | 72c | 2026-09-22 |
| G-VAAL-26SEP29 | utilities | 72c | 2026-09-29 |
Every formula on this page, with the trade-offs behind each one, is set out on the methodology page.
A person reads every one of these. Tell us what happened and we will come back to you.