crhk_companies_core
Hong Kong Companies Registry company directory
Download a file
CSV. 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 setupThe core Hong Kong company directory (the Starter-floor twin of crhk_companies, without its resolved current-address columns). Directory 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 and has_address columns are a 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
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