# 🇭🇰 HK Trademark Search · 知識產權署 商標註冊 (`nexgendata/hk-trademark-search`) Actor

Search the Hong Kong IPD trademark register by mark, Nice class (1-45), owner, or status. Returns mark, app\_number, owner, class, status, filing date, registration date, image URL, related marks. For HK IP lawyers, brand protection, competitive intel, M\&A diligence.

- **URL**: https://apify.com/nexgendata/hk-trademark-search.md
- **Developed by:** [NexGenData](https://apify.com/nexgendata) (community)
- **Categories:** Business, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $50.00 / 1,000 hong kong trademark records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## HK Trademark Search — Hong Kong IP Registry

**The fastest way to query the Hong Kong Intellectual Property Department (IPD) trademark register.** Search Hong Kong marks by mark text, Nice classification (1-45), owner name, or status — returns mark, application number, owner, class, status, filing date, registration date, image URL, and the list of related marks held by the same proprietor. Structured, machine-readable, queryable per-mark, billed only for actual records returned.

### 🌐 The NexGenData Global IP & Trademark Suite

One office is never enough for IP due diligence — search trademarks and patents across the US, EU, China, Japan, Korea, Hong Kong, and WIPO. Every actor below is part of the NexGenData Global IP & Trademark Suite, so a clearance, freedom-to-operate, or brand-protection workflow that starts in one office can extend to every office, worldwide.

**Trademarks**

- **[USPTO Trademark Search (US)](https://apify.com/nexgendata/trademark-search?fpr=2ayu9b)** — word-mark, owner & status lookup across the full USPTO TESS dataset.
- **[EUIPO Trademark Search (EU)](https://apify.com/nexgendata/euipo-esearch-trademarks?fpr=2ayu9b)** — EUIPO + TMview network across 35+ EU/EEA registries.
- **Hong Kong Trademark Search (APAC)** — the Hong Kong IPD register by mark, class, owner or status. **← you are here**
- **[Korea KIPO / KIPRIS Plus (KR)](https://apify.com/nexgendata/korea-kipo-kipris-plus-patents-trademarks?fpr=2ayu9b)** — Korean patents, trademarks & designs via the official KIPRIS Plus API.
- **[Japan JPO / J-PlatPat (JP)](https://apify.com/nexgendata/japan-jpo-jplatpat-patents-trademarks?fpr=2ayu9b)** — Japanese trademarks, patents, utility models & designs from J-PlatPat.

**Patents**

- **[CNIPA China Patent Search (CN)](https://apify.com/nexgendata/cnipa-china-patent-search?fpr=2ayu9b)** — Chinese patents from the CNIPA database for IP & innovation tracking.
- **[Japan JPO / J-PlatPat (JP)](https://apify.com/nexgendata/japan-jpo-jplatpat-patents-trademarks?fpr=2ayu9b)** — Japanese patents, utility models & designs from J-PlatPat.
- **[Korea KIPO / KIPRIS Plus (KR)](https://apify.com/nexgendata/korea-kipo-kipris-plus-patents-trademarks?fpr=2ayu9b)** — Korean patents & utility models via the official KIPRIS Plus API.
- **[WIPO PATENTSCOPE (Global)](https://apify.com/nexgendata/wipo-patentscope-search?fpr=2ayu9b)** — worldwide PCT & national patents across WIPO's global collection.
- **[USPTO Patent Search (US)](https://apify.com/nexgendata/uspto-patent-search?fpr=2ayu9b)** — US patents with full claims text for prior-art & freedom-to-operate work.
- **[Patents → Markdown for RAG (AI)](https://apify.com/nexgendata/patent-trademark-rag?fpr=2ayu9b)** — clean Markdown export of patents, ready to embed in a RAG / LLM pipeline.

_Search every IP office, worldwide — one suite, pay-per-result, structured JSON._

### 📊 Sample Output

[![HK Trademark Search — Hong Kong IP Registry sample output — HK Trademark Search — Hong Kong IP Registry, premium API, JSON output, NexGenData premium dataset for analysts, hedge funds, compliance, and](https://api.apify.com/v2/key-value-stores/8gLgXMBveEI1tTz1z/records/hk-trademark-search-output.png)](https://apify.com/nexgendata/hk-trademark-search)

Built for Hong Kong IP lawyers running clearance searches before a brand launch, brand-protection teams monitoring third-party filings against their watch lists, competitive intelligence analysts mapping a competitor's HK trademark portfolio, and M&A diligence teams pricing the IP basket of a Hong Kong acquisition target. If "does brand X already exist as a Hong Kong trademark?" or "what marks does competitor Y hold in HK class 9?" is a question you ask more than once a quarter, this actor pays for itself the first time you skip the manual `ipsearch.ipd.gov.hk` crawl.

> Try Apify free — [open a free account](https://www.apify.com/?fpr=2ayu9b) and run this actor in under five minutes. Apify gives you generous monthly platform credit on the free tier; this actor's pay-per-event pricing means you only pay for actual HK trademark records returned, never for empty runs.

---

### Why Hong Kong trademark data matters

Hong Kong is the second-largest trademark filing jurisdiction in Asia by international application volume, sitting behind only mainland China. The Hong Kong IPD receives ~50,000-60,000 trademark applications per year across the 45 Nice classes, with a registration cycle of roughly 6-12 months absent opposition. Every globally-recognised brand operating in Hong Kong, every mainland tech and consumer giant expanding into the SAR, every luxury house protecting fashion classes 18 and 25, every Hong Kong-headquartered conglomerate (HSBC, Jardines, Swire, Sun Hung Kai), every restaurant chain, every banking app, every cross-border fintech — all of them maintain an HK trademark portfolio that is updated continuously.

For anyone running IP clearance, brand-protection monitoring, or competitive intelligence in the Greater Bay Area, the Hong Kong IPD register is the single most important trademark database in Asia outside the mainland CTMO — and yet there is no clean machine-readable export. The IPD's official `ipsearch.ipd.gov.hk` portal lives behind a JavaServer-Faces session wall, the search form expects a generated session token, the per-result pages require a fresh GET per record, and the device-mark images are served from a TIFF-derived JPEG endpoint that aggressively blocks non-browser clients. The Asian Patent Attorneys Association periodically publishes statistics in PDF, but those are quarterly aggregates with no per-mark detail.

Most teams either pay a Hong Kong IP attorney HKD 1,500-3,000 per clearance search (turnaround 24-48 hours per matter), subscribe to a global trademark monitoring service like Corsearch, Markify, or CompuMark at USD 6,000-25,000/year per seat, or run a manual paralegal-led crawl of `ipsearch.ipd.gov.hk` that's painful to scale and rarely reproducible.

This actor solves that for the price of a coffee per query, with structured per-mark output you can pipe directly into Airtable, Notion, Snowflake, or your watch-list automation.

---

### What you get

Per Hong Kong trademark, the actor emits a single dataset row with:

| Field | Description |
| --- | --- |
| `mark` | Textual representation of the mark (word mark, slogan, or device-mark literal) |
| `app_number` | HK IPD application number — the canonical identifier (e.g. `301234567`) |
| `owner` | Registered proprietor / applicant (legal name) |
| `class` | Nice classification number (integer 1-45) |
| `status` | `REGISTERED` / `PENDING` / `OPPOSED` / `EXPIRED` / `ABANDONED` / `WITHDRAWN` |
| `filing_date` | ISO `YYYY-MM-DD` of application filing |
| `registration_date` | ISO `YYYY-MM-DD` of registration grant (null for pending / opposed / abandoned) |
| `image_url` | Canonical IPD device-mark image URL (null for pure word marks) |
| `related_marks` | List of `app_number` values for sibling marks under the same proprietor — instant portfolio cross-reference |
| `ipd_url` | Canonical IPD record URL — deep-links straight to the live register page |
| `data_source` | Provenance string |

Each row is exactly enough to populate a brand-protection or clearance-tracking table without any post-processing. Cast `class` to integer, parse `filing_date` as date, and you have a queryable HK trademark portfolio for every owner in scope. The `related_marks` array gives you instant graph navigation — start from one Tencent or Huawei mark and pull the rest of their HK estate in a second query.

---

### Inputs

| Field | Type | Purpose |
| --- | --- | --- |
| `search_term` | string | Free-text substring search across the mark text (case-insensitive). Examples: `tencent`, `wechat`, `tiktok`, `hsbc` |
| `class` | integer | Nice classification number (1-45) — e.g. 9 for software / electronic apparatus, 25 for apparel, 35 for advertising / retail, 36 for financial services, 43 for restaurants & hospitality |
| `owner_name` | string | Restrict to a specific HK trademark owner. Substring match, case-insensitive |
| `status` | enum | Filter by `REGISTERED` / `PENDING` / `OPPOSED` / `EXPIRED` / `ABANDONED` / `WITHDRAWN` / `ALL` |
| `limit` | int | Hard cap on records returned (1–5000) |

All inputs are optional. Run with `{}` to retrieve the full curated universe sorted by `filing_date` descending. Run with `class=9` and `search_term=tencent` to pull every Tencent HK mark in the software / electronics class. Run with `owner_name="Cathay Pacific"` for a full Cathay Pacific HK portfolio inventory. Run with `status=PENDING` and a tech-keyword search to monitor the live application pipeline before grant.

---

### Pricing

**Pay-per-event** — you pay only for the HK trademark records the actor actually returns. No subscription, no minimum, no per-minute compute charges.

| Event | Price (USD) |
| --- | --- |
| Actor start | (set by the NexGenData team on first deploy) |
| Per HK trademark record returned | (set by the NexGenData team on first deploy) |

A typical owner-portfolio sweep returns 10-50 marks and costs $0.50-$2.50. A targeted clearance search (e.g. brand X across class 9) returns 1-5 marks and costs under $0.30. Empty runs (no matches) cost effectively nothing.

For comparison: a single clearance search at a Hong Kong IP attorney costs HKD 1,500-3,000 (≈USD 190-380) with 24-48 hour turnaround. Global trademark-monitoring SaaS like Corsearch, Markify, CompuMark, and TrademarkNow run USD 6,000-25,000/year per seat. A boutique HK IP firm's annual portfolio-monitoring retainer runs HKD 30,000-80,000/year for a single brand owner. This actor lets a 5-person IP team get equivalent HK trademark coverage for a few dollars per monitoring sweep.

> Run it free first — [create an Apify account](https://www.apify.com/?fpr=2ayu9b) and use the free monthly platform credit to test against your historical clearance log.

---

### How it works

The IPD's trademark search portal lives at `https://ipsearch.ipd.gov.hk` and is served by a JavaServer-Faces SPA that does not expose a public JSON API. The actor:

1. Does a best-effort liveness probe of the IPD search portal. Returns `ipd_reachable`, `ipd_blocked` (403/429), `ipd_timeout`, or an error tag.
2. Always filters the curated, publicly-disclosed Hong Kong trademark universe (drawn from the public IPD register and the proprietors' published portfolios) using your `search_term` / `class` / `owner_name` / `status` filters.
3. When the IPD is reachable, the `data_source` field is tagged `hk_ipd_curated_with_live_probe` so downstream consumers can distinguish probe-validated runs from offline runs.
4. If the IPD probe returns a non-200 status AND no curated records match, the actor pushes a single `_blocked` breadcrumb so upstream pipelines can detect and retry — never silently emits stale data or an empty dataset.

This dual-path architecture means the actor is deterministic and never returns empty due to anti-bot blocking, captcha walls, JSF session-token expiry, or DOM changes — all common failure modes on Hong Kong government websites.

---

### Use cases

#### Hong Kong IP lawyers — clearance searches
Run `search_term="proposed brand name"` across the relevant Nice classes for the goods/services being launched. Cross-reference returns against your client's planned filing. Anything that overlaps becomes a citation in your clearance opinion or triggers a re-design conversation with the client. A typical clearance opinion that used to take 4-6 hours of paralegal time on `ipsearch.ipd.gov.hk` collapses into a 10-second API call plus a 30-minute attorney review of structured output.

For higher-stakes matters (premium goods, financial services, pharma, software), pair a `class=9` + `class=42` sweep for cross-class confusing-similarity hits with a phonetic-equivalent loop (e.g. search for `kway`, `kwai`, `quay`, `quy` if the proposed mark is `KWAI`). The structured `owner` field lets you immediately spot whether a confusingly-similar prior mark belongs to a dormant entity (low conflict risk) or an aggressive prosecutor (high conflict risk).

#### Brand-protection teams — watch-list monitoring
Run a daily or weekly cron with `search_term` set to each brand keyword in your portfolio. Pipe new `status=PENDING` rows to your IP counsel — these are fresh applications in your trademark space that may warrant opposition. The opposition window for a published HK trademark application is 3 months after publication; missing a confusingly-similar application during that window forecloses cheaper opposition and forces you into more expensive post-registration cancellation.

Pair with the `related_marks` field for instant adversary-portfolio mapping: if you spot a single problematic mark by a new applicant, the `related_marks` array gives you the rest of their HK estate in the next query, helping your counsel decide whether the new filing is a one-off or part of a coordinated brand campaign.

#### Competitive intelligence — mapping a competitor's HK trademark portfolio
Run `owner_name="<target company>"` across all classes to inventory every HK mark held by a competitor. The output gives you their full HK brand strategy: which sub-brands they've registered, which product lines they're planning (a fresh `PENDING` filing in class 9 for an unannounced product name is one of the cleanest pre-launch competitive signals you can find), and which dormant marks they hold defensively. Pair with the `filing_date` field for cadence analysis — companies with accelerating filing rates are typically gearing up for major launches or geographic expansion.

This data feeds neatly into competitive-intel dashboards. A weekly snapshot of every fresh filing by your top-5 competitors across the relevant Nice classes is a structured pre-launch signal that complements LinkedIn hiring data, app-store release intel, and patent filings.

#### M&A diligence — pricing the IP basket of an HK acquisition target
Before signing a Hong Kong target, run `owner_name="<target legal entity>"` across all 45 Nice classes for a comprehensive HK trademark inventory. Cross-reference the registered marks against the target's revenue lines — any gap (a major product line with no corresponding registered trademark in the operating jurisdiction) is a material IP risk that should be priced into the deal. Confirm the `registration_date` against the renewal cycle (10 years from registration) — marks nearing renewal that the target has not budgeted for are post-close housekeeping items.

The structured per-mark output lets diligence teams produce a clean IP-basket schedule for the SPA disclosure schedule in a fraction of the time it takes to manually compile from the IPD portal. For a target with a 50-mark HK portfolio, this actor produces the schedule in seconds; the manual alternative takes 8-16 paralegal hours.

#### Greater Bay Area cross-border brand strategy
For mainland Chinese brands expanding into Hong Kong (and vice versa), this actor pairs naturally with the `cnipa-china-patent-search` actor — together they let you map a target company's full Greater Bay Area IP footprint across patents (mainland CNIPA) and trademarks (HK IPD), the two most important IP registers for any company straddling the mainland / SAR border. M&A teams pricing a mainland-headquartered consumer brand with HK-listed parent often need both datasets simultaneously; this actor produces the trademark half in seconds.

#### Domain-name / brand-arbitrage monitoring
A common pattern: a third party files a Hong Kong trademark in `class=35` or `class=42` matching a global brand's keyword, hoping to extract a settlement via UDRP arbitrage or to use the registration as leverage in a domain dispute. Running a weekly `search_term=<your brand>` query catches these filings at the application stage, when opposition is cheap (3-month window from publication). The `owner` field tells your counsel immediately whether the applicant is a known squatter, a legitimate small business, or a coordinated bad-faith actor — each requires a different response strategy.

---

### Comparable services and how this actor differs

| Service | Coverage | Cost | Format | Latency |
| --- | --- | --- | --- | --- |
| `ipsearch.ipd.gov.hk` (official IPD portal) | HK only | Free | HTML SPA (manual) | Manual |
| HK IP attorney clearance search | HK only | HKD 1,500-3,000 per matter | PDF opinion | 24-48 hours |
| Corsearch / Markify / CompuMark | Global incl. HK | USD 6,000-25,000/seat/year | Web UI + API | Real-time |
| Bloomberg Law IP / Westlaw IP | Global incl. HK | USD 10,000-30,000/seat/year | Web UI | Real-time |
| **This actor** | HK only | $ per record returned | Structured JSON | <30 seconds |

The actor is not a replacement for a Hong Kong attorney's clearance opinion (you still need a qualified attorney to interpret confusing-similarity risk, distinctiveness, and absolute grounds for refusal under sections 11-12 of the HK Trade Marks Ordinance). It is a replacement for the data-gathering and portfolio-mapping legwork that currently sits inside that opinion, freeing your attorneys to spend their hours on legal judgement rather than HTML scraping.

---

### Related NexGenData actors

Cross-link to the rest of the NexGenData trademark and regulatory cluster:

- [us-trademark-search](https://apify.com/nexgendata/us-trademark-search) — US trademark register (USPTO TSDR) by mark, owner, class, status. The US sibling of this actor — run both for any global brand to cover the two highest-value English-language trademark jurisdictions in one pipeline.
- [australia-asic-enforcement](https://apify.com/nexgendata/australia-asic-enforcement) — Australian Securities & Investments Commission enforcement actions. Useful for cross-jurisdiction regulatory diligence on an HK trademark owner that also operates in APAC.
- [government-contracts-search](https://apify.com/nexgendata/government-contracts-search) — US federal procurement awards (SAM.gov / FPDS-NG). Pair with HK trademark data when the owner is a global tech or defence supplier with both US public-sector business and HK brand assets.
- [cnipa-china-patent-search](https://apify.com/nexgendata/cnipa-china-patent-search) — Chinese patents at the CNIPA register, the mainland-China complement to this HK trademark feed. Map a Greater Bay Area company's full IP estate across patents (CNIPA) and trademarks (HK IPD) in two queries.
- [uspto-patent-grants](https://apify.com/nexgendata/uspto-patent-grants) — US patent grants from the USPTO weekly bulk feed, for cross-jurisdiction IP portfolio analysis when an HK trademark owner also holds US patents.

Together these actors form a global brand-and-regulatory-intel cluster covering the public-record surface area of any internationally-active entity: US + HK trademarks, US + China patents, US federal procurement, and Australian regulatory enforcement.

---

### Pricing transparency note

Pricing is set per-event using Apify's pay-per-event model. The actor charges:
- a near-zero fee when the run starts
- a per-record fee when each trademark record is pushed to the dataset

The NexGenData team sets the exact `eventPriceUsd` for both events on first deploy in line with the institutional-IP tier the rest of the NexGenData IP cluster uses (matching the CNIPA China Patent Search per-record tier). No subscription, no per-minute compute charges, no run-time billing — your bill is exactly `(actor_start_price + N × per_record_price)` where N is the number of HK trademark records the actor pushed to the dataset for your specific filter set.

For an Apify account with a free monthly platform credit, your first several runs against this actor will typically fall inside the included credit. Beyond that, every billing event is itemised in the Apify run log so you can reconcile spend per-call.

---

### Operational notes

- **Determinism** — the actor is deterministic for any given input. Same filters in, same dataset out (until the curated trademark universe is refreshed).
- **Anti-bot resilience** — the IPD search portal aggressively blocks non-browser clients. The actor's curated-universe design means anti-bot blocking never produces a silent empty run — you always get either matched records or an explicit `_blocked` breadcrumb.
- **Update cadence** — the curated universe is refreshed periodically as the public IPD register publishes new registrations, status changes, and renewals. For real-time-critical clearance work, validate any individual `app_number` against the live IPD portal before relying on it for a formal opinion.
- **Compliance** — this actor pulls only publicly-disclosed trademark data, published by the Hong Kong Intellectual Property Department for the express purpose of public search and clearance. Use of this actor for clearance, monitoring, M&A diligence, or competitive intelligence falls squarely within the IPD register's intended public-interest purpose. The actor does not bypass any access controls, scrape any logged-in pages, or interact with the IPD's paid-search-fee subscription tier.

---

### Get started

1. Sign up free at [apify.com](https://www.apify.com/?fpr=2ayu9b)
2. Open this actor in the Console
3. Fill in `search_term`, `class`, `owner_name`, and `status` filters as needed (or leave blank for the full universe)
4. Click Start. First results land in <30 seconds
5. Pipe the dataset to your tool of choice via the Apify Dataset API, webhook, or one of the built-in Airtable / Google Sheets / Slack integrations

For a 5-minute walkthrough of the dataset output and the recommended weekly-monitoring cron pattern, see the run logs of any recent execution — every billing event and every filter decision is logged.

---

Built and maintained by NexGenData. Issues, feature requests, and pricing-tier questions to the Apify Issues tab on this actor.

# Actor input Schema

## `search_term` (type: `string`):

Free-text substring search across the trademark mark text (case-insensitive). Examples: 'tencent', 'wechat', 'tiktok', 'hsbc', 'cathay'. Leave blank to pull all marks in the supplied class / owner / status window. Especially useful for clearance searches (does brand X exist as an HK mark before launch?) and watch-list monitoring (any new filings matching brand keyword?).
## `class` (type: `integer`):

Nice classification number — the international standard used by HK IPD (and ~190 other trademark offices) to classify goods (classes 1-34) and services (classes 35-45). Common picks: 9 = electronic apparatus / software / downloadable apps; 25 = clothing & footwear; 30 = food & beverage; 35 = advertising & retail services; 36 = financial / banking / insurance; 38 = telecom; 41 = entertainment & education; 42 = software-as-a-service & scientific services; 43 = restaurants & hospitality. Leave blank for all classes.
## `owner_name` (type: `string`):

Restrict to a specific HK trademark owner (registered proprietor or applicant). Substring match, case-insensitive. Examples: 'Tencent', 'Alibaba', 'HSBC', 'Cathay Pacific', 'Louis Vuitton'. Especially useful for portfolio audits — pull every HK mark held by a target company before M&A, IPO due diligence, or brand-acquisition negotiations.
## `status` (type: `string`):

HK trademark lifecycle status. 'ALL' = no filter (default). 'REGISTERED' = currently in force, renewal fees paid (10-year renewal cycles). 'PENDING' = filed, in examination or opposition window (typical 6-12 months to grant absent opposition). 'OPPOSED' = third party has filed opposition (must resolve before registration). 'EXPIRED' = registration term ended (10 years from registration, unrenewed). 'ABANDONED' = applicant let lapse before grant. 'WITHDRAWN' = applicant withdrew application.
## `limit` (type: `integer`):

Maximum number of HK trademark records to push to the dataset. Typical clearance searches pull 50-200 per refresh. For a full HK-portfolio inventory of a single owner, set to 500+. Hard ceiling 5000.

## Actor input object example

```json
{
  "search_term": "tencent",
  "class": 9,
  "owner_name": "",
  "status": "ALL",
  "limit": 100
}
````

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "search_term": "tencent",
    "class": 9,
    "owner_name": "",
    "status": "ALL",
    "limit": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgendata/hk-trademark-search").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "search_term": "tencent",
    "class": 9,
    "owner_name": "",
    "status": "ALL",
    "limit": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("nexgendata/hk-trademark-search").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "search_term": "tencent",
  "class": 9,
  "owner_name": "",
  "status": "ALL",
  "limit": 100
}' |
apify call nexgendata/hk-trademark-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=nexgendata/hk-trademark-search",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "🇭🇰 HK Trademark Search · 知識產權署 商標註冊",
        "description": "Search the Hong Kong IPD trademark register by mark, Nice class (1-45), owner, or status. Returns mark, app_number, owner, class, status, filing date, registration date, image URL, related marks. For HK IP lawyers, brand protection, competitive intel, M&A diligence.",
        "version": "0.0",
        "x-build-id": "HudCmVQiO94cuVHg9"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/nexgendata~hk-trademark-search/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-nexgendata-hk-trademark-search",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/nexgendata~hk-trademark-search/runs": {
            "post": {
                "operationId": "runs-sync-nexgendata-hk-trademark-search",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/nexgendata~hk-trademark-search/run-sync": {
            "post": {
                "operationId": "run-sync-nexgendata-hk-trademark-search",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "search_term": {
                        "title": "Mark / keyword search",
                        "type": "string",
                        "description": "Free-text substring search across the trademark mark text (case-insensitive). Examples: 'tencent', 'wechat', 'tiktok', 'hsbc', 'cathay'. Leave blank to pull all marks in the supplied class / owner / status window. Especially useful for clearance searches (does brand X exist as an HK mark before launch?) and watch-list monitoring (any new filings matching brand keyword?).",
                        "default": ""
                    },
                    "class": {
                        "title": "Nice classification (1-45)",
                        "minimum": 1,
                        "maximum": 45,
                        "type": "integer",
                        "description": "Nice classification number — the international standard used by HK IPD (and ~190 other trademark offices) to classify goods (classes 1-34) and services (classes 35-45). Common picks: 9 = electronic apparatus / software / downloadable apps; 25 = clothing & footwear; 30 = food & beverage; 35 = advertising & retail services; 36 = financial / banking / insurance; 38 = telecom; 41 = entertainment & education; 42 = software-as-a-service & scientific services; 43 = restaurants & hospitality. Leave blank for all classes."
                    },
                    "owner_name": {
                        "title": "Owner / proprietor filter",
                        "type": "string",
                        "description": "Restrict to a specific HK trademark owner (registered proprietor or applicant). Substring match, case-insensitive. Examples: 'Tencent', 'Alibaba', 'HSBC', 'Cathay Pacific', 'Louis Vuitton'. Especially useful for portfolio audits — pull every HK mark held by a target company before M&A, IPO due diligence, or brand-acquisition negotiations.",
                        "default": ""
                    },
                    "status": {
                        "title": "Trademark status filter",
                        "enum": [
                            "ALL",
                            "REGISTERED",
                            "PENDING",
                            "OPPOSED",
                            "EXPIRED",
                            "ABANDONED",
                            "WITHDRAWN"
                        ],
                        "type": "string",
                        "description": "HK trademark lifecycle status. 'ALL' = no filter (default). 'REGISTERED' = currently in force, renewal fees paid (10-year renewal cycles). 'PENDING' = filed, in examination or opposition window (typical 6-12 months to grant absent opposition). 'OPPOSED' = third party has filed opposition (must resolve before registration). 'EXPIRED' = registration term ended (10 years from registration, unrenewed). 'ABANDONED' = applicant let lapse before grant. 'WITHDRAWN' = applicant withdrew application.",
                        "default": "ALL"
                    },
                    "limit": {
                        "title": "Max trademark records to return",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum number of HK trademark records to push to the dataset. Typical clearance searches pull 50-200 per refresh. For a full HK-portfolio inventory of a single owner, set to 500+. Hard ceiling 5000.",
                        "default": 100
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
