The question
Pick the prettiest horse, or pick blind?
Most people at the races bet on something that has nothing to do with form: a grey coat, a funny name, silks in a favourite colour. The question was simple. Does choosing the pretty one beat choosing at random?
Answering it needed a record of every hunch, every bet and every result, plus a random pick in every race to compare against.
The build
An app that turns hunches into data
Step 1 of 4
Designed to be silly
The welcome screen sets the tone. This is a game for a day at the races, not a tipster service. If it stopped being fun, nobody would log a hunch.
Step 2 of 4
Pick the prettiest
Coat colour comes first because it is the purest hunch there is. Every horse's colour is read from its photo, so the app knows which ones are grey, black, chestnut or bay.
Step 3 of 4
Tap whatever catches the eye
Name, outfit, lucky number, jockey, trainer, owner. No reason needed. Every tap is stored with the race, so each kind of hunch can be scored later.
Step 4 of 4
Four picks, one decision
The app ranks the field on taps, sets that next to the odds and offers four bets: the top vibes pick, the favourite, a random pick and the horse both agree on. Whatever is backed is logged with the result.
Behind the app, small server functions fetch the day’s race cards, odds and official results, so nothing has to be typed in. Each finished race day is saved, then pulled into an analysis script that rebuilds a results dashboard.
- Race data
- Race cards, odds and results from deutscher-galopp.de
- Coat colour
- Horse photos classified by Claude
- App
- React, hosted on Vercel, with Python endpoints
- Storage
- Race-day snapshots in Upstash Redis
- Analysis
- Python backtests and a self-updating dashboard
The test
Two days at the track, 22 more as a game
- 19 June – 5 July Play Two race days in person. On the others, the same app and the same process, played as a game. 596 bets over the full run.
- 7 July First review After nine race days, every strategy was replayed against the real results to see which kinds of hunch carried any signal.
- July Play on Fifteen more race days, with the findings in mind.
- 6 August A rulebook and a dashboard The review became a set of fixed rules: skip small fields, then bet win or place depending on the odds. The dashboard compares those rules with what was actually bet.
- 8 August Last race day One day on the rulebook. By then the betting had become mechanical.
The results
Pretty beat random on paper. Then the outliers came out.
Same races, same stakes, three ways of betting. Switch views to remove the freak results.
Raw: vibes looks like the clear winner
Backing the top-vibes horse every race ends 1,022€ up, well ahead of the real record. Most of that came from a few long-priced wins early on.
League table
Return on stake, 177 races, stake matched per race.
| Strategy | Bet | Return | ROI |
|---|---|---|---|
| Top vibes pick | Win | +71.8% | |
| Top vibes pick | Place | +71.5% | |
| Real record | Mixed | +39.4% | |
| Random pick | Place | +20.9% | |
| Random pick≈ the track’s 15% cut | Win | −15.0% | |
| Favourite | Place | −20.4% | |
| Convergence | Place | −26.1% | |
| Convergence | Win | −27.8% | |
| Favourite | Win | −32.9% |
Did the review help? Not measurably. The first nine race days returned 50% on 733€. The fifteen after the first review returned 29% on 775€. The rulebook ran for a single race day, which happened to be the best of the series, but 13 bets prove nothing.
The real record still finished 594€ up on 1,508€. Only 27% of that came from the single best bet. For the single-horse strategies the share was 92 to 100%.
Why there is no edge
The odds already know
German racetrack odds come from the pool of bets. Every punter’s knowledge, every tip and every rumour is already in the price. The track then keeps about 15% of the pool. Picking at random should lose roughly that much, and it did.
The mystery
Four taps or more, and the horse starts winning
One pattern held up across the whole study, and there is no clear explanation for it.
How a tap happened
The personal rule behind each category. Half are close to random.
- Coat colourGrey, chestnut or black. Never bay.taste
- NameWhatever sounded good.random
- SilksWhatever looked good.random
- Lucky numberUsually odd, usually above 5.habit
- JockeyWomen only. No amateurs.rule
- TrainerOnly if fairly sure she is a woman.rule
- OwnerOnly if fairly sure she is a woman.rule
Win rate by number of taps
Every runner in every race, 1,441 in all. The black mark is the chance the odds gave it.
What the 108 four-tap horses had
From zero to three taps, horses won less often than their odds implied, which is what the track’s cut predicts. At four taps or more the line jumps: 108 horses, 20% winners against 14% expected, and 45% finished in the top three.
No single category explains it. Silks and names appear most often among the four-tap horses, and they were picked close to at random. Women jockeys and trainers showed no edge on their own; women-owned stables a small one.
It may still be luck: at this sample size, a gap this large turns up by chance roughly one time in thirteen. Or the taps are catching something the price misses. The next 100 races would tell.
What happened next
The better it worked, the less fun it was
Once the rulebook existed, a race day meant applying it. No hunches, no tapping, no game. At that point the betting could run without a person at all, and the obvious next step would have been to automate it.
That step was not taken, for reasons the bank account will appreciate. The finding stands without it: a strategy built to remove judgement also removes the reason a casual punter goes to the races.
The app is still live. Play a demo race, best on a phone. Part two of the story, what happened when ten first-timers tried it, is a different kind of finding.