hkjc_odds_final

PREMIUM 4,858,438 rows

Hong Kong horse racing closing odds and market data

Also on hkjc.guru →

Browse on hkjc.guru: 2026-10-19 ST

Closing odds for Hong Kong races (Sha Tin and Happy Valley): for every pool and combination, the last price HKJC published before the race's post time, taken from the same movement series as HKJC Odds Movements, so the two never disagree. Win and Place from 8 December 2021; the exotic pools (Quinella, Quinella Place, Forecast, Trio, First Four, Double, and the top-20 and banker lists) from 1 October 2024, with the same gaps as HKJC Odds Movements. Compare closing odds with results to backtest, value runners or study favourites. A race appears once it has started. A pool has closing odds only where its last quote before the off was published within 60 minutes of it: the Win pools of 32 races have none because we hold no quote from that last hour (Happy Valley races 6-7 on 4 January 2023; Sha Tin races 5-7 on 29 January 2023; Happy Valley races 1-4 on 13 September 2023; Sha Tin races 1-10 on 29 December 2024; Sha Tin races 1-7 on 28 June 2025; and Happy Valley races 1-6 on 28 January 2026), and every other pool that trades up to the off is held to the same rule; presales pools (*Pre) and the PWIN snapshots carry their last quote whatever its age. 18 Hong Kong meetings since 8 December 2021 have no closing odds at all: 10 September 2023; 3, 6, 10 and 13 March 2024; 8, 11, 15, 18, 22, 25 and 28 September 2024; 3, 6 and 9 November 2024; and 7, 11 and 14 January 2026. Post times before 2026 are mostly derived from pool closure rather than a published race card (see race_start_time).

Premium dataset

Evaluate it in full below: the evidence and a working sample are open to everyone. Buy or subscribe to unlock the complete dataset — your account is created automatically at checkout.

See access options

The evidence

Data coverage
Dec 2021 – present
Pass access: Most recent 24 months, rolling · Full Archive: Dec 2021 – present
Volume
4,858,438 rows
Last refreshed
19 October, 2026 (16 hours ago)
Data through
19 October, 2026 (1 day ago)
Schema & column quality (21 columns)

Scroll table sideways to see more columns →

Column Type Description Populated Distinct
odds_final_key String Unique identifier for this final odds record. — —
race_date DateTime Date of the race meeting (YYYY-MM-DD). — —
venue_code String Venue code: 'ST' (Sha Tin) or 'HV' (Happy Valley) for Hong Kong races, or S1-S5 for an overseas race simulcast in Hong Kong. Empty only where a row's venue could not be established, and then race_id is empty too. — —
race_number Int32 Race number within the meeting: 1-11 at Hong Kong meetings, 1-10 on simulcast cards. — —
race_id Nullable(String) Unique race identifier for joining with hkjc_races (format: ST_20250928_R01) — —
racename Nullable(String) Official race name. — —
venue Nullable(String) Full venue name (Sha Tin / Happy Valley). — —
distance_category String Distance grouping: Sprint, Mile, Middle, Long. — —
track_condition_category Nullable(String) Simplified track condition grouping. — —
field_size Int64 Number of horses in the race. — —
odds_type String HKJC pool code. The base pools: WIN, PLA (Place), QIN (Quinella), QPL (Quinella Place), FCT (Forecast), TRI (Trio), FF (First Four), DBL (Double), each a complete matrix of every combination. Suffixed variants are separate lists HKJC publishes alongside them: *Top = the 20 lowest-priced combinations (TCETop, TRITop, FFTop, QTTTop; QINTop/QPLTop on simulcast races); *Banker = for each runner taken as banker, the 10 lowest-priced combinations containing it (for TCE and QTT, with that runner first); *Pre = the pool's odds during HKJC's presales (advance-selling) period; PWIN0/PWIN1 = two Win-odds snapshot series HKJC publishes for its PWIN page, which its own site code names '1stBoost' and 'slide2m' (carried as published; HKJC does not document them further). There is no complete Tierce (TCE) or Quartet (QTT) matrix: HKJC does not publish one, so their Top and Banker lists are all the ordered Tierce and Quartet odds that exist. — —
odds_category String The bet the pool belongs to, grouping odds_type and its variants: Win/Place, Quinella (QIN, QPL), Forecast, Tierce, Trio, First Four, Quartet, Double. — —
combination String The bet, as HKJC writes it: a runner number for WIN/PLA, two digits ('01') from 29 September 2024 and unpadded ('1') up to 14 July 2024, so compare it as a number; two-digit runner numbers joined by commas for single-race pools ('01,02' Quinella/Forecast, '01,02,03' Trio/Tierce, '01,02,03,04' First Four/Quartet); one runner per race joined by '/' for Double ('01/03'). Unordered pools (Quinella, Trio, First Four) list runners in ascending order; ordered pools (Forecast, Tierce, Quartet) in finishing order. — —
odds_value Nullable(Float64) Decimal odds as HKJC quotes them: the return per $1 staked, stake included (5.5 = $5.50 back for $1). HKJC displays every pool except Quartet capped at 999, so 999 means '999 or more' (a quarter of Trio rows and over half of First Four rows sit at the cap); Quartet runs to 99999. NULL where HKJC shows no price: a combination including a scratched runner (HKJC prints SCR) or a pool not yet priced. — —
is_hot_favourite Nullable(Bool) HKJC's hot-favourite flag on this runner or combination. NULL where HKJC publishes no flag (Banker-list rows). — —
final_odds_timestamp DateTime64(3) HKJC's published time (UTC) of the last odds movement before race_start_time: the moment this closing price was set. — —
race_start_time Nullable(DateTime) The race's post time (UTC). Where we hold the published race-card time it is that; for most races from December 2021 to December 2025 no race-card time was captured, and it is derived instead as the time of the race's last Win-odds movement (pools close at the off), which runs about 1.5-7 minutes after the actual start. — —
minutes_before_start Nullable(Int64) Minutes between final_odds_timestamp and race_start_time. A pool that trades up to the off has closing odds only if this is 60 or less: where our capture stopped earlier than that before a race, the pool is left out rather than given a stale price. Presales pools (*Pre) and the PWIN snapshots are exempt: their last quote is early by design. — —
odds_format String Which collection arm the row came from: legacy_semicolon (Dec 2021 - Jan 2026), modern_json (Sep 2025 - Jan 2026) or graphql_v2 (from Jan 2026). — —
updated_at DateTime64(3) Timestamp when the record was last updated. — —
id String Stable unique identifier for this row — the last column of every export. Use it to deduplicate, to key an incremental load, or to reference one specific row. It is additive: the entity and join keys you already use (race_id, horse_id, and the like) are unchanged. — —

Sample data

Closing odds for every pool of the latest completed meeting, from race 1 onward. The file stops at 10,000 rows, which is about the first seven races of a meeting.

SELECT * FROM renavon_exports.hkjc_odds_final LIMIT 50 0.02s
Loading data… | Click a header to sort; drag headers to reorder.

Choose your access

A Pass gives you freshness within a rolling window. The Full Archive gives you the full history we hold for the dataset, frozen at purchase. They solve different problems, and they work together.

Full refund within 14 days on subscriptions. One-time archives: full refund until you download; once downloaded, the sale is final. Details →

One-off purchase

Full Archive

The full history we hold, frozen at purchase. Yours to keep.

Full details →
What you get
The full history we hold, to your purchase date
History depth
Dec 2021 – present, in full
Updates
None. Frozen at purchase
Delivery
Gzipped CSV, opens in Excel; link valid 7 days
API access
Not included
US$299
one-time purchase

Get notified when this dataset is updated.

Questions about this data?

Our data experts are ready to help clarify any aspects of this dataset.

Contact Our Team