hkjc_odds_combinations

PREMIUM 1,121,901,006 rows

Hong Kong horse racing odds history and market movements

Also on hkjc.guru →

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

The Hong Kong Jockey Club's betting odds as they moved before each race: Win and Place for every runner, and the exotic pools (Quinella, Quinella Place, Forecast, Trio, First Four, Double, and HKJC's top-20 and banker lists for Tierce, Trio, First Four and Quartet). Track how prices changed from the first quote we captured to the close, see which runners attracted late money, and study market efficiency. One row per odds MOVEMENT per combination: each pool update HKJC publishes is stored as the full set of that pool's prices, timestamped with HKJC's own update time (snapshot_timestamp, UTC); repeated unchanged states are not stored, so hold a price flat until the next row. Our collector polls, so if HKJC moves a pool more than once between two polls only the later state is recorded. In the 30 minutes before each race it polled about every minute from 8 December 2021 to 27 September 2023, about every 5 minutes from 1 October 2023 to 28 January 2024, about every minute from 31 January 2024 to 14 July 2024, about every 5 minutes from 1 October 2024 to 27 May 2026 and about every minute since 28 May 2026; earlier in the day, about every 5 minutes until 27 May 2026 and about every minute since 28 May 2026. Post time here is the race card's where we hold it, and otherwise the last five-minute mark at least 30 seconds before betting closed. At 5 minutes before post time the median age of the latest Win price we hold is under a minute in every period; at 1 minute before post time it is under 1, 5, 1, 5 and 1 minutes in those five periods: from 1 October 2023 to 28 January 2024 and from 1 October 2024 to 27 May 2026 polls fell on the five-minute marks post times fall on, so the price 1 minute before post time is usually the one from 5 minutes before. Hong Kong meetings (Sha Tin and Happy Valley): Win and Place odds from 8 December 2021; Quinella, Quinella Place, Forecast, Trio, First Four and Double from 1 October 2024. 18 Hong Kong meetings in that span have no 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. 2 more Hong Kong meetings were captured too thinly to time anything before the off, with fewer than 10 Win states in at least half their races: 13 September 2023 and 29 December 2024. Collection stopped while betting was still open at Happy Valley races 3-10 on 26 December 2024 and Sha Tin races 2-10 on 8 June 2025, so those races hold no odds from the last minutes of betting. The final Win odds of every finisher at these 20 meetings and in these 17 races are in our race results dataset (column odds). Elsewhere, missed polls leave 102 other races whose latest Win price at 5 minutes before post time is more than 10 minutes old, 18 of them more than an hour old; the meetings with five or more such races are Happy Valley races 1, 2 and 4-8 on 4 January 2023; Sha Tin races 4-8 on 29 January 2023; Sha Tin races 2 and 7-10 on 19 February 2023; Sha Tin races 1-7 on 28 June 2025; Happy Valley races 1-6 and 8 on 28 January 2026; Happy Valley races 2-4, 6 and 7 on 18 March 2026; and Sha Tin races 2-7 on 29 March 2026. Tierce and Quartet: the Hong Kong Jockey Club publishes no complete odds matrix for either pool, only the 20 lowest-priced combinations (TCETop, QTTTop) and, for each runner taken as banker, the 10 lowest-priced combinations with that runner first (TCEBanker, QTTBanker); Trio and First Four carry the same two lists (TRITop, FFTop, TRIBanker, FFBanker) beside their complete matrices. The top-20 lists run from 1 October 2024 but were not collected for meetings from 1 January 2026 to 24 May 2026; the banker lists exist for 8 meetings between 28 September 2025 and 27 December 2025 and for every meeting from 27 May 2026. Overseas races simulcast in Hong Kong (venues S1-S5) are included from 29 September 2024. Delivered hourly with the rest of the pipeline, not streamed.

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
1,121,901,006 rows
Last refreshed
21 October, 2026 (2 hours ago)
Data through
21 October, 2026 (3 hours ago)
Schema & column quality (15 columns)

Scroll table sideways to see more columns →

Column Type Description Populated Distinct
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) — —
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). — —
snapshot_timestamp DateTime64(3) When this odds state was published by HKJC (UTC): the Jockey Club's own update time, not our collection clock (timestamp_source = 'hkjc_published'; the small residue where HKJC publishes no update time carries the collection clock instead, marked 'scrape_clock'). One row per movement: repeated unchanged states are not stored, so consecutive rows for a pool are genuine odds changes. Our collector polls rather than streams, so if HKJC moves a pool more than once between two polls only the later state is recorded. The polling interval in each period, and the age of the latest Win price before post time, are stated in the dataset description, which is rendered from the measured claims. — —
timestamp_source Nullable(String) Where snapshot_timestamp comes from: 'hkjc_published' = HKJC's own published update time (the norm); 'scrape_clock' = our collection clock, used only where HKJC publishes no update time (certain exotic combination matrices, and a small residue of early-era rows whose embedded time could not be decoded). — —
observed_at Nullable(DateTime64(3)) When our collector first observed this odds state (UTC). The gap between observed_at and snapshot_timestamp bounds the detection latency; the spacing of observed_at values reflects the collection era's polling interval. — —
sell_status Nullable(String) Pool sale state at first observation, as published by HKJC: START_SELL (open for betting) or STOP_SELL (closed). NULL on the older collection eras that did not carry it. Use it to cut a race's series at market close cleanly. — —
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

Race 1 of the latest completed race date, Win and Place pools first (pool codes in reverse order: WINPre, WIN, PWIN1, PWIN0, PLAPre, PLA), each newest update first, then the race's other pools, until the file's 10,000-row limit. For a Hong Kong meeting that is essentially every runner's Win price at each HKJC update running back from the off; where more than one venue ran a race 1 that day, their rows follow one another within each pool (venue codes in reverse order). The full product carries every race and pool in the same columns.

SELECT * FROM renavon_exports.hkjc_odds_combinations 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$499
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