I Love Horse Racing – So I Taught Claude to Build Better Tickets. Here’s What Actually Happened.
⚠️ Before anything else — a serious word. Horse race betting can be addictive and you can lose real money fast. What follows is a research and analysis tool, not a money machine, and no prediction system can guarantee a profit. Only stake what you can comfortably afford to lose, never chase losses, and treat any winnings as a bonus, not an income. If betting stops being fun, stop — and if it starts to feel out of control, reach out to a service such as GamCare or BeGambleAware. 18+ only. Bet responsibly.

Horse Racing Analysis Toolkit — $25, one-time purchase
Give your AI a consistent framework for reviewing racecards. See the complete example below before buying. Requires your own compatible AI tool and race information.
I like horse racing. The form, the going, the silks, the maths of a good each-way ticket — I enjoy all of it. A few months ago I had the thought a lot of us have had: could I use AI to build better tickets? Not to “beat the bookies” — I'm not naive — but to stop betting on gut feeling and start betting with a method.
My first attempts were mediocre. I'd paste a racecard into a chatbot, get back a confident paragraph, and realise it was just rephrasing the favourites. No structure, no record of what it had said last time, no sense of whether the price was worth taking. So I kept going, and slowly turned those experiments into a set of files the AI reads before it scores a single horse. That set of files became this toolkit. This article shows exactly what it is, one full race worked start to finish, what it can't do, and how to load it.
What's in the toolkit
- A scoring framework the AI follows every time. Ten named factors (form and recency, distance, going, class and weight, time/speed, jockey or driver, draw and race shape, experience, market confirmation, and landmark-race experience for the big chases), with weights that change by discipline. The point is consistency: the 18th race of the day gets the same checklist as the first.
- A calibrated probability model — new. A gradient-boosting model trained on 1,094 French Quinté races (16,667 runners) that gives every horse a probability of finishing in the first five, from its odds, intraday odds movement, recent form, disqualification history, field size and race type. One command pulls a race from the PMU API and scores it. The model's five is the base ticket; the written analysis decides the order and the cover horses.
- A backtest-validated ticket strategy — new. The old “keep two favourites, replace three with value outsiders” idea was tested against the same 1,094 races and turned out to be the single worst thing you can do (details below). The toolkit now enforces a one-swap limit, and says which bet classes the measured edge actually shows up in.
- A branded HTML report per race — new. Odds table, tier list, rank table, top-5 projection, ticket, risks, and the sources checked — one file you can read on a phone. After the race, the same file is rewritten with the result on top and the original prediction preserved underneath.
- A post-race learning routine. Every result is mapped back to the factor that was scored wrong. What survives is written into the knowledge files as a hypothesis, and only promoted to a rule once it holds up in the backtest. Several rules I'd confidently written from single races were demoted this way.
- Saved profiles for recurring horses, jockeys, drivers and trainers. French jumps and trotting reuse the same pool season after season; the profiles are plain-text notes the AI re-reads. More on what that does and doesn't mean below.
Coverage: French, UK and international racing — flat, hurdles and steeplechase, and harness/trotting.
A complete worked example: Enghien, Race II, 27 June 2026
Rather than describe features, here is one race exactly as it went through the toolkit — including the result, which is not flattering, and which is the honest point of showing it.
1. The race information supplied
The input was the printable racecard PDF from the Hungarian tote operator (Lovifogadas), which carries the French PMU programme, plus live odds from the PMU API. What the toolkit had to work with:
- Race: Prix de Neuilly-Levallois, Enghien, Saturday 27 June 2026, 19:15. Trotting (harness), 2,875 m, 16 runners, €59,000 purse, a Kincsem+ (Quinté-style) qualifier. French-bred trotters aged 8–11 that had not won €205,000.
- Per runner: number, name, age and sex, driver, trainer, career earnings, best kilometre time, a form string (placings most-recent-first, with “D” marking a disqualification for breaking gait), and the last five runs with date, track, distance, placing, time and driver.
- Editorial: a paragraph on every runner and a named top-5 (“Véleményünk”): 14 Idéal de Castelle – 12 Indic – 10 Faxima – 8 Ialko Jenilat – 9 Hollywood Bond.
- Press classification: aggregate points from seven French racing desks. Top of the list: 14 Idéal de Castelle 35, 9 Hollywood Bond 24, 10 Faxima 23, 8 Ialko Jenilat 22, 12 Indic 21, 5 Isolée du Bouillon 13.
- Morning-line odds: 14 at 2/1, 12 at 5/1, 10 at 11/1, 8 at 12/1, 5 at 15/1, 9 at 16/1, the rest 28/1 and longer.
- Live PMU odds on race day (pulled by the toolkit's bridge script): 14 at 2.9, 10 at 7.0, 9 at 8.6, 8 at 12.0, 12 at 14.0, 6 Isis de la Ferme at 17.0, 5 Isolée at 38.0.
2. The analysis produced
The model scored all 16 runners. The first eight, with the probability of a top-five finish it assigned (scored on the day's PMU odds):
| No. | Horse | P(top-5) | Live odds | Market rank | Odds move (morning → live) |
|---|---|---|---|---|---|
| 14 | Idéal de Castelle | 0.66 | 2.9 | 1 | −3% |
| 8 | Ialko Jenilat | 0.56 | 12.0 | 4 | −8% |
| 10 | Faxima | 0.52 | 7.0 | 2 | −42% |
| 9 | Hollywood Bond | 0.49 | 8.6 | 3 | −49% |
| 12 | Indic | 0.46 | 14.0 | 5 | +133% |
| 5 | Isolée du Bouillon | 0.40 | 38.0 | 11 | +138% |
| 6 | Isis de la Ferme | 0.36 | 17.0 | 6 | −53% |
| 13 | Geronimo Matica | 0.29 | 47.0 | 12 | +52% |
Base ticket (the model's five): 14 – 8 – 10 – 9 – 12. That is the market's own top five with the order changed — which is normal; the model rarely disagrees with the market about which horses, mostly about how much.
One-swap check: the toolkit only allows the written analysis to exchange one of the five, and only for a horse that has both drifted 10% or more in the odds and shown no top-five finish in its last three runs. No runner qualified, so no swap.
What the written analysis added:
- Order for the exact-order line: 14 – 10 – 9 – 8 – 12. Idéal de Castelle as the favourite on strong autumn Vincennes form with his regular driver back; Faxima and Hollywood Bond both heavily backed on the day; Ialko Jenilat kept high as the most consistent horse in the field (75% top-five career rate, no disqualifications, a recent second at Vincennes); Indic last because of a nine-month layoff and a big drift.
- Cover horse: 6 Isis de la Ferme — the most credible late money (17/1 from 35/1) with a recent win.
- Dropped: 5 Isolée du Bouillon, which the morning market had fifth but which drifted to 38.0 and which neither the editorial nor the press rated.
- Risks noted: Indic's layoff; the favourite's one poor run on his comeback; several chronic gait-breakers in the field.
3. What actually happened
Result: 15 – 13 – 9 – 14 – 5. Ixelle Bleue won at around 30/1; Geronimo Matica was second at 39/1; Hollywood Bond third; Idéal de Castelle fourth; Isolée du Bouillon fifth.
Two of the model's five finished in the first five. Two of the market's five did too. The winner was ranked 12th of 16 by the model and 9th by the market; the runner-up 9th and 12th. No selection method I have tested — the model, the market, the editorial, the press — would have had either of them. The horse I dropped (Isolée) came fifth, which cost nothing here but is a fair reminder that a drift is a probability, not a verdict.
That is a typical Quinté outcome, and it is exactly why the toolkit's advice is now to weight stakes toward the any-order and top-three bet classes rather than the exact-order jackpot.
4. Missing information and limitations
- Live odds were not available until race day. The pre-race draft was built on the morning line; the odds moved a lot during the day (Hollywood Bond halved, Isolée doubled). The toolkit has to be re-run close to the off to pick that up.
- No draw, pace or sectional data. The racecard has no running-style information. Several past misses were pace-shaped (a front-runner getting an uncontested lead). The toolkit cannot see that in advance.
- The model only sees numbers. Odds, odds movement, form string, disqualifications, field size, race type. It does not read the editorial, the press points, or the trainer quotes — those go into the written analysis, which is only allowed to reorder the five and pick cover.
- Trainer quotes are translated and promotional. They were wrong as often as right in my post-race reviews; the toolkit now treats them as colour, not evidence.
- Long shots are, by definition, not caught. The two horses that decided this race were 30/1 and 39/1. Nothing in the toolkit predicts those, and nothing in it claims to.
- You supply the racecard and odds. The toolkit does not come with data. It reads what you give it (a PDF, a pasted card, or a PMU race reference for the bridge script).
How the saved knowledge actually works
An earlier version of this article talked about “total recall” and a “genuine edge” from persistent profiles. That was overstated, and I want to be precise about it.
The AI does not remember anything between sessions. What persists is a folder of plain-text files. One of them holds notes on recurring horses, jockeys, drivers and trainers; others hold the scoring rules. Each time you start a race, the AI reads those files and applies them. A “profile” is only as good as the note someone wrote after a race — if nobody updated it, the AI knows nothing new. The post-race routine exists to make that writing happen, and it is a manual, deliberate step, not magic.
Two things follow from that. First, the notes are fallible: a rule written after one race is an anecdote. I learned this the hard way — five “lessons” I had confidently encoded over one summer turned out to be untestable or wrong when checked against a thousand races, and they are now marked as hypotheses. Second, the system does not get “measurably sharper” on its own. It gets sharper only when a change is checked against data, which is why the toolkit now ships with the backtest that does the checking.
What the backtest shows — and what it doesn't
I rebuilt a dataset of 1,094 French Quinté races (August 2023 to September 2026, every runner, 16,667 rows) from public pronostic and result pages and tested the strategies against it. The findings, plainly:
- The market is hard to beat. Simply taking the five shortest-priced horses lands 2.63 of the actual first five per race, on average, and gets four or more right about 17% of the time.
- “Value” swapping hurts. Keeping two favourites and replacing three with outsiders — the classic Quinté “value” construction — scores 2.27 and gets four-of-five only 8% of the time. Every favourite you swap for a longer-priced horse lowers the expected hits, because a 3rd favourite finishes in the first five about 51% of the time and a 10th favourite about 25%. Disagreeing with the market does not establish an advantage. The toolkit's Value Gap figure is now a diagnostic for ordering and cover, not a reason to remove a favourite.
- The model helps a little, consistently. On 329 held-out races it scored 2.71 against the market's 2.66, with better-calibrated probabilities. On the most recent six months it scored 2.73 against 2.67 and got four-of-five 22% of the time against 17%. That is a small edge in the any-order classes; it is not a large one, and the four-of-five figure rests on 178 races.
- Nothing moves the jackpot. Exact-order five-of-five sits at roughly 1–2% for every strategy tested, model included.
The backtest's findings and the resulting rule-status table are written into the toolkit's framework file. The dataset builder and backtest script themselves are separate research files, not part of the download.
Exactly how to load the files
Unzip the download. You get this folder:
horse-race-betting/
├── horse-race-betting-skill.md ← start here: tells the AI which files to read for which task
├── knowledge-base/
│ ├── prediction-framework.md ← the 10 factors, the strategy, the report contract
│ ├── galopp-knowledge-base.md ← flat and jumps rules
│ ├── ugeto-knowledge-base.md ← trotting rules
│ ├── horses-and-riders.md ← recurring horse / jockey / driver / trainer notes
│ └── how-to-analyse-horse-races.md ← the post-race learning routine
├── models/
│ ├── build_runners.py ← pulls a race from the PMU API and scores it
│ ├── top5_model.py ← the probability model
│ └── top5_model.joblib ← trained weights
└── templates/
└── analysis-template.html ← the report design
With Claude Code or the Claude desktop app (recommended):
- Open the unzipped folder as the working directory.
- Say: “Read horse-race-betting-skill.md, then predict this race: [paste the racecard, or give the PDF link].” The skill file tells the AI which knowledge files to load for a flat, jumps or trotting race, and the report comes out as
analysis.htmlin a dated race folder. - After the race, say: “Check the result and learn.” The report is rewritten with the result on top and the prediction preserved below, and the knowledge files are updated.
To use the probability model you need Python 3.10 or newer and four packages:
pip install scikit-learn pandas joblib requests
python models/build_runners.py 27062026 1 2 --morning "14:3.0,12:6.0,10:12.0" --scoreThe three arguments are the PMU date (DDMMYYYY), meeting number and race number; --morning takes the morning-line odds so that the odds movement matches what the model was trained on. It writes runners.json and prints every runner's probability, rank and any swap flag. Run it before the off — after the race the API returns closing odds.
With ChatGPT, Codex or another file-aware assistant: upload horse-race-betting-skill.md, prediction-framework.md, horses-and-riders.md, and the knowledge file for the race type, then paste the racecard. The scoring framework and the report work the same way. The Python model runs on your machine, not inside the chat, so use it separately and paste its output in.
What you must bring: a compatible AI tool, and the race information — a racecard with form, a current odds source, and ideally the editorial and press views if your card has them.
The honest bottom line
This toolkit will not make betting risk-free and it has not made me rich. In the one race shown above it matched the market and missed two long shots, as it usually will. What it changed is the process: the same checklist every race, a probability instead of a hunch, a written record I can check against results, and a hard rule that stops me from throwing out favourites to feel clever. If that is the kind of bettor you want to be, this is the analyst I built for it. If you are looking for a system that wins, please do not buy it.
🏇 Horse Racing Analysis Toolkit — $25, one-time purchase
And one last time: bet for entertainment, set a budget before you start, and walk away when it stops being fun. The real edge is discipline — on and off the track.

My profession is online marketing and software development (10+ years experience), a lot of AI related projects nowadays, check my latest works here. But my real passion is reading books both fiction and non-fiction. I have several favorite authors like James Redfield or Daniel Keyes. If I read a book I always want to find the best part of it, every book has its unique value.





