crhk_companies
Hong Kong Companies Registry company directory
Download a file
CSV and Parquet. 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 setupDirectory of every registered Hong Kong company from the Companies Registry: active and dissolved companies, dating back decades. Search by company name or business registration number; check incorporation and dissolution dates, active/dissolved status, company type, and winding-up mode. Includes enrichment from the modern ICRIS electronic filing system. The registered-office address is the most recent one we have observed, and its recency varies by company: address_as_of gives the date we observed it, and the full address history is in crhk_address_history.
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.
The evidence
Schema & column quality (66 columns)
Scroll table sideways to see more columns →
| Column | Type | Description | Populated | Distinct |
|---|---|---|---|---|
| business_registration_number | String | Business Registration Number (BRNO) — primary identifier for the company | — | — |
| cr_number | Nullable(String) | Company Registration Number (CRN) — empty when no CRN is on record for the company. See has_no_cr_number to distinguish a registry-confirmed absence from a value we simply don't have | — | — |
| has_no_cr_number | Bool | True when the registry confirms the company has NO Company Registration Number (post-2023 UBI companies), as opposed to a CRN we just don't have on record (in which case cr_number is empty and this is false) | — | — |
| english_name | Nullable(String) | Company name in English, as registered. Where the Companies Registry stored the name wrapped in enclosing parentheses — a marker it applies to the secondary-language name on records from roughly 1988-2005, not part of the registered name — those outer brackets are removed upstream; parentheses that belong to the name itself are kept | — | — |
| chinese_name | Nullable(String) | Company name in Chinese characters, as registered. Where the Companies Registry stored the name wrapped in enclosing parentheses — a marker it applies to the secondary-language name on records from roughly 1988-2005, not part of the registered name — those outer brackets are removed upstream; parentheses that belong to the name itself are kept | — | — |
| status | Nullable(String) | Reconciled legal lifecycle state, in the Companies Registry's own vocabulary (ICRIS ACTIVE_STATUS_*): Live, Dissolved, Ceased place of business, Ceased to exist as an entity after amalgamation, Ceased Registration; null if unknown. 'Ceased place of business' is a registered non-Hong Kong company (Cap. 622 Part 16) that filed Form NN13 — it is NOT dissolved and may still exist under its home jurisdiction. 'Struck off' is a MECHANISM of dissolution, not a status — a struck-off company reads status='Dissolved' with dissolution_mode='Struck Off'; compose the two for display (e.g. 'Dissolved — struck off'). A company that is still Live but has a strike-off or deregistration underway carries striking_off_in_progress / deregistration_in_progress. | — | — |
| is_active | Bool | True if the company has a Live (registered) status. Note a Live company may still be in distress — check striking_off_in_progress, winding_up_in_progress and has_receiver_appointed. | — | — |
| is_dissolved | Bool | True if status indicates dissolution/amalgamation/struck-off, or a dissolution date exists with a non-active status | — | — |
| is_dormant | Bool | True if the company currently has an OPEN dormancy interval (registry's own dates) | — | — |
| dormant_since | Nullable(String) | Date the company's current dormancy interval commenced (null if not currently dormant) | — | — |
| lifecycle_substatus | Nullable(String) | Detailed lifecycle sub-status (e.g. live-but-dormant, ceased place of business), best-effort label | — | — |
| money_lender_licence_status | Nullable(String) | Money Lenders Ordinance (Cap. 163) register status for this company — licensed, application_pending, licence_expired, application_dismissed or application_withdrawn; empty for the vast majority of companies (no register entry). Linked by deterministic company-name match; full register entries and match rules in the crhk_money_lenders dataset | — | — |
| company_type | Nullable(String) | Legal entity form — the classification that cleanly splits every organisation, each mapping to its governing HK ordinance: Local company (Companies Ordinance Cap. 622), Registered non-Hong Kong company (Cap. 622 Part 16), Limited partnership (Cap. 37), Limited partnership fund (Cap. 637), Open-ended fund company (Cap. 571), Registered trustees (Cap. 306), Statutory body corporate, Mutual fund, Unregistered company, Overseas corporation with registered charge. Ownership and liability (below) further describe local companies | — | — |
| ownership | Nullable(String) | Ownership class of a local Hong Kong company (Companies Ordinance Cap. 622): Private (restricted share transfer, ≤50 members, no invitation to the public — s.11) or Public (s.12). Null for companies limited by guarantee (no share-ownership axis) and for all non-Cap.622 forms (funds, partnerships, non-Hong-Kong companies) | — | — |
| liability | Nullable(String) | Members' liability form of a local Hong Kong company (Companies Ordinance Cap. 622): Limited by shares (s.8), Limited by guarantee (s.9 — no share capital), or Unlimited (s.10). Null for non-Cap.622 forms (funds, partnerships, non-Hong-Kong companies) | — | — |
| incorporation_date | Nullable(String) | Date the company was incorporated in Hong Kong (YYYY-MM-DD format) | — | — |
| incorporation_year | Nullable(Int32) | Year the company was incorporated | — | — |
| years_since_incorporation | Nullable(Int64) | Number of years since the company was incorporated (calculated from today) | — | — |
| dissolution_date | Nullable(String) | Date the company was dissolved (null if still active) | — | — |
| dissolution_mode | Nullable(String) | How the company dissolved, best-effort label paired with dissolution_date | — | — |
| redomicile_date | Nullable(String) | Date the company re-domiciled into/out of Hong Kong (null if not applicable) | — | — |
| amalgamation_date | Nullable(String) | Date the company was amalgamated (merged), null if not applicable | — | — |
| ceased_business_date | Nullable(String) | Date a foreign company ceased its Hong Kong place of business (foreign analogue of dissolution) | — | — |
| registered_office_address | Nullable(String) | The most recent registered-office address we have observed for the company (for a registered non-Hong Kong company, its principal place of business in Hong Kong). It comes from the Companies Registry's open-data portal where we have read the company there, and otherwise from the last address we observed before 2024-04-18, so recency varies by company: address_as_of gives the date we observed it, and crhk_address_history holds every address we have observed. Null when we have never observed an address for the company. | — | — |
| has_address | Bool | True if we have observed a registered-office address for the company. False means we have never observed one, not that the company has no registered office. | — | — |
| address_as_of | Nullable(Date) | Date we last observed the registered-office address on record (full history in crhk_address_history) | — | — |
| charges_register | Nullable(String) | Charges register indicator from legacy registry data (有 = charges exist) | — | — |
| has_charges | Bool | True if charges (mortgages, debentures or other security) are registered against the company (270,887 companies). Unified across both registry arms — the legacy charges register and the modern e-services indicator — so it stays correct even where one arm is silent. | — | — |
| winding_up_mode | Nullable(String) | Winding-up mode if the company is being wound up: Compulsory Winding Up, Members' Voluntary Winding Up, Creditors' Voluntary Winding Up, or Others (ICRIS canonical). Empty if not in winding up. | — | — |
| striking_off_in_progress | Bool | True if the Companies Registry has commenced striking-off action against the company but it is not yet dissolved. Read with `status`: a company that is still Live with this flag set is being struck off right now — the single strongest distress signal in this dataset, and one no other column carries. | — | — |
| deregistration_in_progress | Bool | True if a deregistration application is underway (Form NDR1, Cap. 622 s.751) but the company is not yet dissolved. Unlike striking-off, deregistration is voluntary — the members applied for it. | — | — |
| winding_up_in_progress | Bool | True if winding-up proceedings have commenced but the company is not yet dissolved. See winding_up_mode for the mechanism (compulsory / members' voluntary / creditors' voluntary) and winding_up_date for the commencement date. | — | — |
| has_name_dispensation_licence | Bool | True if the company holds a licence under s.103 of the Companies Ordinance to dispense with the word 'Limited' / '有限公司' in its name — granted to companies formed to promote commerce, art, science, religion, charity or any other useful object. Explains why a Hong Kong limited company may carry a name with no 'Limited' suffix. | — | — |
| is_listed_company_legacy_marker | Bool | True if the legacy registry profile marked this company as listed (上市公司). FROZEN: the modern e-services API publishes no listing marker, so this reflects the registry profile as of 2023-12-22 and will never gain new values. Treat it as a historical cross-check, not a current listing status — use the HKEX datasets for that. | — | — |
| is_one_member_company | Bool | True if registered as a one-member (sole-member) company | — | — |
| has_receiver_appointed | Bool | True if a receiver or manager has been appointed (insolvency-distress signal, rare — 407 companies). Unified across the modern rcvrApptInd indicator and the registry notice set: the indicator alone identifies 357, and the notice set contributes 50 more that it does not carry. | — | — |
| is_deregistered | Bool | True if the company is/was deregistered (voluntary deregistration; legacy ICRIS registry signal) | — | — |
| deregistration_date | Nullable(String) | Deregistration commencement date (ISO YYYY-MM-DD), when recorded | — | — |
| strike_off_date | Nullable(String) | Striking-off commencement date (ISO YYYY-MM-DD), when recorded | — | — |
| is_s291_striking_off | Bool | True if flagged for striking off under s.291 as a defunct company (legacy ICRIS registry signal) | — | — |
| is_winding_up | Bool | True if in winding-up (liquidation) proceedings, reconciled across the legacy and modern captures | — | — |
| winding_up_date | Nullable(String) | Winding-up commencement date (ISO YYYY-MM-DD), when recorded | — | — |
| restoration_date | Nullable(String) | Date the company was restored to the register after striking-off/deregistration (ISO YYYY-MM-DD) | — | — |
| accounting_reference_date | Nullable(String) | Registry accounting reference date (ISO YYYY-MM-DD), when recorded | — | — |
| last_agm_date | Nullable(String) | Date of the last annual general meeting on record (ISO YYYY-MM-DD) | — | — |
| one_member_status_date | Nullable(String) | Date the one-member (sole-member) status was last updated on the register (ISO YYYY-MM-DD) | — | — |
| registry_remark | Nullable(String) | Registry caution or notice about the company, verbatim and often BILINGUAL (English and Traditional Chinese in one value). One notice stream collapsed from its two historical sources (the e-services profile page and the legacy register remark; both frozen). Despite reading as free text it is largely TEMPLATED — see registry_notice_type for the classification; over a thousand are amalgamation notices naming the successor company and its CR number (extracted into amalgamated_into_crn). Kept verbatim on purpose: accuracy cautions are exactly the notices a diligence reader must see unabridged. | — | — |
| registry_notice_type | Nullable(String) | The registry notice classified into a fixed set of families — the commonest are 'Name changed by Registrar', 'Amalgamation', 'Secretary appointment disputed' and 'Accuracy caution'; 'Unclassified' marks the counted residual (the verbatim text in registry_remark is always the authority) | — | — |
| amalgamated_into_crn | Nullable(String) | For a company dissolved by amalgamation whose notice names the successor: the successor company's CR number (e.g. '1549159'), extracted from the notice text. Null for survivor-side notices (the company that REMAINS after the amalgamation has no successor by definition) and where the registry published no CR number | — | — |
| is_on_watch_list | Bool | True if the company appears on the registry watch list (legacy ICRIS registry signal) | — | — |
| has_prosecution | Bool | True if a prosecution has been recorded against the company (legacy ICRIS registry signal) | — | — |
| chapter_number | Nullable(String) | Hong Kong Ordinance chapter number for statutory bodies (modern API), where applicable | — | — |
| incorporation_country | Nullable(String) | Country of incorporation in English (foreign companies only), in the Companies Registry's own e-services display form: 'British Virgin Islands', 'Cayman Islands', 'the People's Republic of China', 'United States of America'. One label per country — derived from `incorporation_country_code` via a fixed 111-entry bijective map (normalised 2026-08-30; before that the column shipped TWO vocabularies — the Registry's published-register UPPERCASE short names on 90% of rows and this display form on the rest). For exact filtering prefer `incorporation_country_code` (ISO-3166 alpha-3, populated on 99.95% of rows carrying a country). The 18 rows without a code (NULL there) keep the Registry's published-register UPPERCASE form — the one declared remnant of the old vocabulary. Empty for local Hong Kong companies. | — | — |
| incorporation_country_code | Nullable(String) | Country of incorporation as the ISO-3166 alpha-3 code (foreign companies only, e.g., 'VGB', 'CYM', 'BMU') — the Registry's stable key, from which `incorporation_country` and `incorporation_country_chinese` are derived; prefer it for filtering. NULL on 18 legacy-only rows that carry a label but no code. Empty for local Hong Kong companies. | — | — |
| incorporation_country_chinese | Nullable(String) | Country of incorporation in Traditional Chinese (foreign companies only), in the Registry's e-services display form: '英屬維爾京群島', '開曼群島', '中華人民共和國'. Derived from `incorporation_country_code` via the same fixed 111-entry map as `incorporation_country` (normalised 2026-08-30). The 18 rows without a code keep the legacy published form. Empty for local Hong Kong companies. | — | — |
| address_building_id | Nullable(String) | The building the company's CURRENT registered office is in, under Renavon's own building id (HKB- and a hash, stable across rebuilds; links to hk_buildings). The current office is the newest address in crhk_address_history, not the last-known registered_office_address above. Null when the address matched no single building | — | — |
| address_canonical_en | Nullable(String) | The current registered office written out in English in the government address gazetteer's canonical form (flat, floor, building, street, district), as the address resolver matched it | — | — |
| address_canonical_zh | Nullable(String) | The current registered office written out in Chinese in the government address gazetteer's canonical form | — | — |
| address_floor | Nullable(String) | Floor of the current registered office as read from the address (e.g. '12', 'G', 'UG'); null when the address names none | — | — |
| address_unit | Nullable(String) | Flat, room or unit of the current registered office as read from the address (e.g. 'A', '1203'); null when the address names none | — | — |
| address_latitude | Nullable(Float64) | Latitude of the matched building, or of the street or area when the match is coarser (WGS84 degrees) | — | — |
| address_longitude | Nullable(Float64) | Longitude of the matched building, or of the street or area when the match is coarser (WGS84 degrees) | — | — |
| address_match_level | Nullable(String) | How precisely the current registered office was matched: 'unit', 'floor' or 'building' (a building id is set), or only to a 'phase', 'estate', 'street_number', 'street', 'village', 'district' or 'region'; 'none' when it matched nothing | — | — |
| address_match_confidence | Nullable(Float64) | The address resolver's probability that the match is right, from 0 to 1 | — | — |
| updated_at | DateTime64(3, 'UTC') | Timestamp when 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. | — | — |
500 companies stratified across active local / dissolved local / foreign / ceased-amalgamated-struck-off / funds & special forms. Regenerated quarterly.
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.
Pass subscription
HK Corporate Diligence — Compliance Pass
Updated, with API access.
View full package →- Access window
- Full history (no window)
- Updates
- Continuous, within hours of the source
- Delivery
- API, SQL and downloads
- Exports
- 1,000,000 rows/month included
Included Datasets
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