hkjc_race_results
Hong Kong horse racing results and historical form guide
Download a file
CSV · Excel · Parquet · JSON. Filtered exports.
See pricingQuery with SQL
DBeaver, DuckDB, MotherDuck, or HTTPS. Sub-second latency.
Open connection detailsConnect to AI
MCP for Claude Desktop, Cursor, ChatGPT, Goose. 1-line install.
See setupComplete historical record of every Hong Kong horse race from the Jockey Club. Track individual horse performances across thousands of races with detailed finishing positions, winning margins, race times, and running styles. Perfect for form analysis, identifying patterns, and researching historical performance trends. Includes 60+ data points per race entry covering horse details, jockey and trainer information, race conditions, and performance metrics. Download ready-to-use Excel or CSV files for your own analysis.
Create a free account to subscribe and get full access — SQL queries, CSV/Excel downloads, and API.
Dataset Statistics
You're viewing a 20-row preview. Subscribe to unlock the full interactive data explorer, downloads, and SQL access.
| {'name': 'horse_id', 'type': 'String'} | {'name': 'race_date', 'type': 'DateTime'} | {'name': 'race_number', 'type': 'Int64'} | {'name': 'race_index', 'type': 'Nullable(String)'} | {'name': 'race_id', 'type': 'Nullable(String)'} | {'name': 'horse_name', 'type': 'Nullable(String)'} | {'name': 'horse_number', 'type': 'Nullable(Int64)'} | {'name': 'finishing_position', 'type': 'Int64'} | {'name': 'finishing_time_seconds', 'type': 'Nullable(Float64)'} | {'name': 'finishing_time', 'type': 'Nullable(String)'} | {'name': 'margin', 'type': 'Nullable(String)'} | {'name': 'margin_lengths', 'type': 'Nullable(Float64)'} | {'name': 'draw', 'type': 'Nullable(Int64)'} | {'name': 'odds', 'type': 'Nullable(Float64)'} | {'name': 'position_1', 'type': 'Nullable(String)'} | {'name': 'position_2', 'type': 'Nullable(String)'} | {'name': 'position_3', 'type': 'Nullable(String)'} | {'name': 'position_4', 'type': 'Nullable(String)'} | {'name': 'position_5', 'type': 'Nullable(String)'} | {'name': 'position_6', 'type': 'Nullable(String)'} | {'name': 'section_1_time', 'type': 'Nullable(String)'} | {'name': 'section_2_time', 'type': 'Nullable(String)'} | {'name': 'section_3_time', 'type': 'Nullable(String)'} | {'name': 'section_4_time', 'type': 'Nullable(String)'} | {'name': 'section_5_time', 'type': 'Nullable(String)'} | {'name': 'section_6_time', 'type': 'Nullable(String)'} | {'name': 'lbw_1', 'type': 'Nullable(String)'} | {'name': 'lbw_2', 'type': 'Nullable(String)'} | {'name': 'lbw_3', 'type': 'Nullable(String)'} | {'name': 'lbw_4', 'type': 'Nullable(String)'} | {'name': 'lbw_5', 'type': 'Nullable(String)'} | {'name': 'lbw_6', 'type': 'Nullable(String)'} | {'name': 'split_800m_600m_time', 'type': 'Nullable(Float64)'} | {'name': 'split_600m_400m_time', 'type': 'Nullable(Float64)'} | {'name': 'split_400m_200m_time', 'type': 'Nullable(Float64)'} | {'name': 'split_final_200m_time', 'type': 'Nullable(Float64)'} | {'name': 'section_1_vs_pace', 'type': 'Nullable(Float64)'} | {'name': 'section_2_vs_pace', 'type': 'Nullable(Float64)'} | {'name': 'section_3_vs_pace', 'type': 'Nullable(Float64)'} | {'name': 'section_4_vs_pace', 'type': 'Nullable(Float64)'} | {'name': 'section_5_vs_pace', 'type': 'Nullable(Float64)'} | {'name': 'section_6_vs_pace', 'type': 'Nullable(Float64)'} | {'name': 'venue_code', 'type': 'String'} | {'name': 'venue', 'type': 'Nullable(String)'} | {'name': 'surface_type', 'type': 'Nullable(String)'} | {'name': 'course_config', 'type': 'Nullable(String)'} | {'name': 'distance', 'type': 'Nullable(Int64)'} | {'name': 'distance_category', 'type': 'String'} | {'name': 'race_name', 'type': 'Nullable(String)'} | {'name': 'race_class', 'type': 'Nullable(String)'} | {'name': 'track_condition', 'type': 'Nullable(String)'} | {'name': 'field_size', 'type': 'Int64'} | {'name': 'jockey', 'type': 'Nullable(String)'} | {'name': 'jockey_allowance', 'type': 'Nullable(Int64)'} | {'name': 'trainer', 'type': 'Nullable(String)'} | {'name': 'owner', 'type': 'Nullable(String)'} | {'name': 'horse_colour', 'type': 'Nullable(String)'} | {'name': 'horse_sex', 'type': 'Nullable(String)'} | {'name': 'horse_age', 'type': 'Nullable(Int32)'} | {'name': 'horse_origin', 'type': 'Nullable(String)'} | {'name': 'import_type', 'type': 'Nullable(String)'} | {'name': 'import_date', 'type': 'Nullable(DateTime)'} | {'name': 'declared_horse_weight', 'type': 'Nullable(Int32)'} | {'name': 'sire', 'type': 'Nullable(String)'} | {'name': 'dam', 'type': 'Nullable(String)'} | {'name': 'dam_sire', 'type': 'Nullable(String)'} | {'name': 'is_winner', 'type': 'Nullable(UInt8)'} | {'name': 'is_top_three', 'type': 'Nullable(UInt8)'} | {'name': 'dead_heat', 'type': 'Nullable(Bool)'} | {'name': 'weight', 'type': 'Nullable(Int32)'} | {'name': 'gear', 'type': 'Nullable(String)'} | {'name': 'entry_rating', 'type': 'Nullable(Int64)'} | {'name': 'rating_type', 'type': 'String'} | {'name': 'total_stakes', 'type': 'Nullable(Float64)'} | {'name': 'season_stakes', 'type': 'Nullable(Float64)'} | {'name': 'no_of_starts', 'type': 'Nullable(String)'} | {'name': 'career_wins', 'type': 'Nullable(Int32)'} | {'name': 'career_seconds', 'type': 'Nullable(Int32)'} | {'name': 'career_thirds', 'type': 'Nullable(Int32)'} | {'name': 'career_total_starts', 'type': 'Nullable(Int32)'} | {'name': 'career_win_rate', 'type': 'Nullable(Float64)'} | {'name': 'race_url', 'type': 'Nullable(String)'} | {'name': 'video_replay_url', 'type': 'String'} | {'name': 'updated_at', 'type': 'Nullable(DateTime)'} |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Data Dictionary
Not ready to subscribe? 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 TeamThis is a premium dataset
Pick a plan above and pay directly — your account will be created automatically.