crhk_companies
Hong Kong Companies Registry company directory
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 setupDirectory of every registered Hong Kong company from the Companies Registry: over 3.6 million companies, active and dissolved, 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 columns are a FROZEN historical snapshot: every source feeding them stopped on 2024-04-18, so companies incorporated since have no address at all and the addresses present are last-known rather than current (see the registered_office_address column).
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 (57 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) | Registered-office address as last observed. FROZEN: every source feeding this column stopped delivering on 2024-04-18, so no address here has been re-observed since, and companies incorporated after that date have NO address at all — 0.00% of the 461,030 of them, against 41.79% for companies incorporated before. Read it as a historical address, not a current one. (The previous wording attributed the gap to the registry withholding addresses for long-dead companies; that is not what the data shows — the gap is total for the NEWEST companies, which is the signature of a withdrawn feed, not of registry policy.) See address_as_of for the per-row observation date. | — | — |
| has_address | Bool | True if a registered-office address was on record for the company as at 2024-04-18. FROZEN alongside registered_office_address: companies incorporated after that date have none, so a false here means 'we never observed one', not '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. | — | — |
| 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.
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
- All current + dissolved companies, refreshed monthly, in full
- Updates
- None. Frozen at purchase
- Delivery
- Gzipped CSV, opens in Excel; link valid 7 days
- API access
- Not included
Pass subscription
HK Corporate Diligence — Compliance Pass
Continuously 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