hkjc_odds_combinations

PREMIUM 937,702,357 rows

Hong Kong horse racing live odds history and market movements

Complete time-series of all Hong Kong horse racing odds, including: per-horse Win odds with movement history, per-horse Place odds with movement history, and exotic bet odds (Quinella, Forecast, Tierce, Quartet, First Four, Double). Track how odds changed in the lead-up to each race - from opening prices to final closing odds. Identify which horses attracted late money, spot market confidence shifts, and analyze betting patterns. One row per odds MOVEMENT: each row is a change in a pool's odds, timestamped with HKJC's own published update time (snapshot_timestamp, UTC); repeated unchanged states are not stored — interpolate flat between rows. observed_at records when our collector first saw the state; timestamp_source marks the residue (certain exotic matrices) where HKJC publishes no update time. Resolution follows the collection era: polling ran ~5 minutes for most of Dec 2021 – mid-2023 and late 2024 – 2025, ~1 minute mid-2023 – Q3 2024 and since May 2026, so moves inside one polling interval collapse into the latest one and sub-minute resolution exists from June 2026 onward.

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
937,702,357 rows
Last updated
5 September, 2026 (17 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 a simulcast venue code (S1-S5). May be empty on some legacy rows where the source did not carry a venue.
race_number Int64 Race number within the meeting (1-11).
race_id Nullable(String) Unique race identifier for joining with hkjc_races (format: ST_20250928_R01)
odds_type String Bet/pool type code (e.g. WIN, PLA, QIN, QPL, FCT, TRI, TCE, FF, QTT, DBL).
odds_category String Bet category grouping the odds_type: Win/Place, Quinella, Forecast, Tierce, Trio, First Four, Quartet, Double, Treble, Double Trio, Triple Trio, Six Up, Composite Win, Index Win, Other.
combination String Horse number (WIN/PLA) or combination string (e.g. '1-2' for Quinella, '1-2-3' for Tierce).
odds_value Nullable(Float64) Decimal odds value (e.g. 5.5 means a $5.50 return per $1 staked).
is_hot_favourite Nullable(Bool) True if this horse/combination was marked as the hot favourite.
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. Resolution follows the collection era — polling every ~5 minutes for most of Dec 2021 to mid-2023 and late 2024 through 2025, every ~1 minute mid-2023 to Q3 2024 and since May 2026 — so moves inside one polling interval collapse into the latest one.
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

One full race meeting day of odds combinations (Quinella, QPL, Trio, Tierce, Trifecta, First-4), full granularity. Live odds in the subscription stream this same shape continuously.

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.

Satisfaction guarantee: 14-day money-back. 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