GallopPost The Virtual Racing Desk
Dusty desk beneath a venetian blind with a beige tower computer and a CRT monitor showing coloured scan lines

The circuit as files

Downloads

Every card, field, weighting, seed and result, in two files built from the same rows that render the pages. Use them, cite the paper.

  • 72CSV rows
  • 25Columns
  • 21Cards in the JSON
  • 25 Oct 2026As at

The circuit publishes itself. Both files below are written by tools/build-data.php from the same rows that render every card, profile and standings table on this site, which is why the row count in the header is a count and not a claim. Generated on the circuit clock of 25 October 2026, covering 19 Oct to 28 Oct 2026.

Circuit rows carry a day offset rather than a frozen date, so the published programme moves with the clock and a file built tomorrow carries tomorrow's dates. That is why the generation date is printed beside the links instead of inside the filename.

The two files

CSV and JSON · as at 25 Oct 2026

FileFormatWhat it holds Size
circuit-results.csv CSV, UTF-8 One row per runner per resulted race: 72 rows across 8 cards, 25 columns, header row first. 16 KB
circuit.json JSON, UTF-8 The whole published programme: 21 cards — 13 still to run and 8 resulted — with 10 venues and the season aggregates. 313 KB

Prices on this page are the draw weighting in another notation. They are reference figures published with the card, not odds available anywhere, and not a betting recommendation.

What is in the CSV

25 columns, in file order

#ColumnWhat it holds
1 draw_id Identifier of the draw that produced the race, as printed on the card — venue code, date and race number.
2 date Race date on the circuit clock, ISO 8601. Circuit rows carry a day offset, so this is resolved at build time, not stored.
3 time Scheduled start, 24-hour, Australia/Melbourne.
4 venue Venue name. The profile is at racecourses/<slug>.php.
5 code Thoroughbred, Harness, Greyhound or Jumps.
6 class Feature, Class A, Class B, Class C, Maiden or Trial. There are no Group grades on this circuit and the column never carries one.
7 distance Race distance in metres, as the card prints it.
8 race Race name.
9 race_slug Slug of the race. The card is at races/<race_slug>.php.
10 field_size Declared field. Fixed at publication, so it never disagrees with the runner count.
11 book The book: every runner's implied percentage summed. Over 100 by the engine's margin.
12 seed The seed the draw ran on. With the weighting column it reconstructs the race.
13 engine Engine build that produced the draw, currently GP-Draw 4.2.
14 no Saddlecloth number.
15 runner Runner name.
16 runner_slug Slug of the runner. The profile is at horses/<runner_slug>.php. Empty where a runner has no profile page.
17 rider Driver for harness, jockey for the gallops, empty for greyhounds.
18 trainer Trainer name.
19 weight Numbers held of the 1,000 in the draw. This is the runner's chance, and it is the only column the result depends on.
20 true_pct The weighting as a percentage of the 1,000, one decimal. Before the margin.
21 odds Reference price, decimal, two places. The weighting in another notation, shaded by the margin. Not odds available anywhere.
22 implied Percentage implied by the reference price — 100 divided by the price. This is the column that sums to the book.
23 finish Finishing position. Empty for a runner outside the published finish order.
24 margin Margin to the runner in front. The winner's cell carries an em dash.
25 winning_time The winner's time, or mile rate for a harness race. One figure per race, repeated on each of its rows.

Four columns are the ones nobody else prints: weight, true_pct, seed and book. Between them they are the whole mechanism. A runner holding 309 of the 1,000 numbers wins 30.9 per cent of the time, the seed says which draw ran, and the book says how far the published prices sit above the honest percentages. How a virtual race is decided works the arithmetic through on a real card.

What is in the JSON

8 top-level keys

KeyTypeWhat it holds
generated string ISO 8601 timestamp of the build.
engine string Engine build, currently GP-Draw 4.2.
today string The circuit date the day offsets were resolved against.
licence string The licence line, repeated in the file so a copy carries it.
note string What the prices are, repeated in the file for the same reason.
venues array 10 venues: shape, surface, circumference, straight, rail, cycle, cadence, field limits and distances.
races array 21 cards, each with its field, weighting table, seed, book, resolved date, status and — where it has run — its finish order, margins and dividends.
stats object Career and season aggregates for the people and runners on the circuit.

A card in races carries its runners as an array in saddlecloth order, each with the same weighting and price figures the CSV holds, plus the comment the form desk attached. A resulted card also carries result.finish, result.drawn_order and result.dividends. Nothing in either file is money: there is no prizemoney on this circuit and no dividend was ever paid, so no field carries an amount.

Licence

One line

Free to use with attribution to Gallop Post (galloppost.com). Use it, cite the paper. Reproduce it, chart it, feed it to a model, check our arithmetic against it, publish what you find — name Gallop Post and link the page you took it from, and that is the whole obligation.

Two things the licence cannot give you, because they are not ours to give: the files describe a simulation and nothing in them is a record of a real animal, a real meeting or a real market; and the prices in them are the draw weighting in another notation, not odds available anywhere. Anyone republishing them should carry that sentence with them.

Why this page is unusual

The one claim this paper makes

No commercial virtual racing product publishes its results in a machine-readable form. The supplier that owns the feed, 49s.co.uk, ships its results and racecards as a JavaScript application that renders nothing without a browser, and its data host answered an unauthenticated request for the latest results with a 403. The affiliate aggregators that exist because that data is hard to find publish no API, no CSV and no archive: betvirtual.co offers a results date picker that reaches 2025 and nothing earlier, and portmanparkresults.com promises finishing orders, winning margins and jockey statistics across three pages that carry no race data at all. The one site that said why kept no archive on purpose — "Results shown refer to today's races and are therefore cleared at midnight each day", from the archived results index at horseracingbuzz.net, which now answers with a 500 (desk survey of every virtual racing site then online, read 18 October 2026).

So there is no dataset of virtual racing results anywhere, which is an odd thing to be able to write about a product that has run every few minutes on shop screens for twenty years. This circuit is a simulation and makes no claim to stand in for theirs. What it can do is show what the published form of one looks like: the weighting beside the price, the seed beside the result, and the whole programme in two files that open in a spreadsheet.

If a figure on a page disagrees with the same figure in a file, that is a fault and the desk wants to hear about it — [email protected], or the contact form under "Data request" for a cut that is not in them. How corrections are handled is in the editorial policy.

The circuit wrap

Friday mornings: the week's results, the weightings that moved, and anything the industry did worth reading about.