# Taiwan Trademarks in English: New TIPO Registrations (`giggling_persimmon/taiwan-trademarks-english`) Actor

New Taiwan trademark registrations from the official TIPO gazette, in English: Nice classes, owner country and type, and UBN plus official English name for Taiwanese companies. Privacy-safe: individual owners are never named. Unofficial.

- **URL**: https://apify.com/giggling_persimmon/taiwan-trademarks-english.md
- **Developed by:** [Stanley Chiang](https://apify.com/giggling_persimmon) (community)
- **Categories:** Business, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 trademark registrations

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Taiwan Trademarks in English: New TIPO Registrations by Class and Country

**Every new Taiwan trademark registration from the official TIPO gazette, in English and as JSON/CSV.** Filter by Nice class and owner country. For Taiwanese companies you also get the 統一編號 (UBN) and official English name from the government business and trade registers.

- **Brand-protection and IP-watch teams:** see which marks were registered in Taiwan this fortnight in your classes, e.g. all new class 9 and 42 marks, or every mark owned by a Chinese or US company.
- **Sourcing and market-entry analysts:** spot which Taiwanese manufacturers are launching brands, with UBN, English name and export qualification ready to join to your supplier data.
- **Data teams:** one clean row per registration with ISO dates, ISO country codes and per-row licence attribution. There is no scraping and no login.

> **Unofficial.** Not affiliated with or endorsed by the Taiwan Intellectual Property Office (TIPO, 經濟部智慧財產局). This is data *about* trademarks; it grants no rights in any mark. A gazette entry is not legal advice on availability or infringement.

### What you get

One dataset item per registered mark from a gazette issue. One issue holds about 2,500–3,500 registrations; TIPO publishes about twice a month.

| Field | Example | Notes |
|---|---|---|
| `registrationNo`, `applicationNo` | `02563100`, `114091624` | |
| `markName`, `markText`, `includesDevice` | `百特兔PATTO RABBIT及圖`, `百特兔PATTO RABBIT`, `true` | 及圖 ("and device") is split off into `includesDevice` |
| `markDesign` / `markDesignZh` | `colour, 2D` / `(彩色)(平面)` | English is our unofficial rendering |
| `niceClasses`, `classes[]` | `[1]`; `{class, classTitle, goodsServicesZh}` | Class titles are short unofficial English labels; goods text is the Chinese original |
| `filingDate`, `priorityDate`, `priorityCountryCode` | `2025-12-11`, `2025-08-08`, `US` | ROC dates converted to ISO |
| `rightsStartDate`, `rightsEndDate` | `2026-10-16`, `2036-10-15` | Term of protection |
| `gazetteIssue`, `gazetteVolume`, `gazetteNumber` | `053020`, `53`, `20` | |
| `owners[]` | see below | |
| `primaryOwnerNameEn`, `primaryOwnerNameZh`, `primaryOwnerUbn` | | First named owner, for flat CSV export |
| `source`, `sourceUrl`, `licence` | TIPO gazette, data.gov.tw 15975, OGDL v1.0 | On every row, as the licence requires |

**Owners.** Companies and organisations: `nameZh`, `nameEn` (from the gazette, or from the BOFT importer/exporter register when the gazette has none, see `nameEnSource`), `countryCode`, `country`, `region` (Taiwan city or county), and `directory` (below).

**Individuals and sole proprietorships:** only `{"ownerType": "individual" | "soleProprietorship", "countryCode", "country", "nameWithheld": true}`. No name, no hash, no region. See *Privacy*.

**Directory join** (`joinDirectory`, on by default). For company and organisation owners, the exact Chinese name is looked up in the Ministry of Finance business register. A unique match gives `directory.ubn`, and the importer/exporter register adds `registeredTrader`, `importQualified`, `exportQualified` and `nameEnOfficial`. Names shared by more than one business are reported as `match: "ambiguous"` without a UBN. In the 2026-10-16 issue, 1,108 of 1,130 Taiwanese company/organisation owners (98%) matched to a UBN, and 609 gained an official English name that the gazette lacked.

Real output: [`samples/latest-issue-053020-sample.json`](samples/latest-issue-053020-sample.json).

### Input

| Field | Default | Meaning |
|---|---|---|
| `gazetteIssues` | `[]` = latest issue | Up to 6 issues as `<volume><number>`, e.g. `053020` (volume 53 = 2026). Back issues come from TIPO's FTPS server (see *Back issues*) |
| `niceClasses` | all | e.g. `["9", "42"]` |
| `ownerCountries` | all | ISO codes, e.g. `["TW"]`, `["CN", "HK"]` |
| `ownerTypes` | all | `company`, `organisation`, `soleProprietorship`, `individual` |
| `markKeyword` | none | Text in the mark name, Latin or Chinese |
| `joinDirectory` | `true` | Adds about 30–60 s per run |
| `maxResults` | 5000 | |

Example: new software and IT-service marks owned by Taiwanese companies.

```json
{ "niceClasses": ["9", "42"], "ownerCountries": ["TW"], "ownerTypes": ["company"] }
```

### Back issues

TIPO serves only the latest issue over HTTPS. Older issues from 045001 (January 2018) onward are on `ftps://ftp.tipo.gov.tw/TrademarkRegXMLB/<ROC year>/TrademarkRegXMLB_<volume><number>/`, with anonymous access and implicit TLS, per TIPO's FTP manual v3.1; tested on Apify with issues 045001, 050010 and 053019. Only the XML file is downloaded; images and sound files are never fetched. If FTPS is unreachable, the run reports the failed issue in `OUTPUT` and still returns any other issues. If nothing could be read, the run fails with the reason.

### Privacy

- **Individual owners: no name and no hash.** About a third of owners in a typical issue are natural persons. Their names appear in a statutory gazette, but TIPO's open-data declaration (§II.2) leaves Personal Data Protection Act compliance to re-users. This Actor outputs only `ownerType` and country for them.
- **Sole proprietorships** are written in the gazette as "trade name + owner's personal name". They are withheld the same way.
- Anything that cannot be confidently classified as a company or organisation is treated as an individual. The classifier is a keyword heuristic, so a few companies may be withheld; no individual should be named.
- **Never output:** examiner names (`Censor`), trademark agent names, free-text descriptions, mark images and sound files.
- The directory join reads only company/organisation names. It never looks up withheld owners, and never outputs representatives, addresses or phone numbers.

### Attribution and licence

- Trademark data: 經濟部智慧財產局 (Taiwan Intellectual Property Office), 商標註冊案公報 (Trademark registration gazette), [data.gov.tw dataset 15975](https://data.gov.tw/dataset/15975), [Open Government Data License v1.0](https://data.gov.tw/license). TIPO's [website open-data declaration](https://www.tipo.gov.tw/en/tipo2/417-23890.html) uses the same licence.
- Directory join: Ministry of Finance, Fiscal Information Agency business register ([data.gov.tw 9400](https://data.gov.tw/dataset/9400)), and the International Trade Administration, MOEA importer/exporter register ([data.gov.tw 79641](https://data.gov.tw/dataset/79641)), both OGDL v1.0.
- The licence covers the data only. Under OGDL §2(4) and TIPO's declaration §II.1 it **does not cover trademark rights**, logos or images, which is why images are not redistributed.
- English labels (country, region, design, class titles) are unofficial translations. The Chinese original is always kept next to them, and no source content is altered.

### Related: Taiwan Company Registry & KYB Lookup

Pass the `primaryOwnerUbn` values to [Taiwan Company Registry & KYB Lookup](https://apify.com/giggling_persimmon/taiwan-company-exporter-directory) to get full company records: tax-registration status, capital, founding date, industry, and English address for importers/exporters. You can also add optional TFDA/NCC licence counts and sanctions screening flags.

### Pricing (pay per event)

| Event | Price | When |
|---|---|---|
| `apify-actor-start` | $0.005 | once per run (charged automatically by Apify) |
| `result` | $0.004 | one registered trademark delivered to the dataset |

Only marks that match your filters and are delivered are charged. The run stops cleanly when your **maximum charge per run** is reached. Examples from the 2026-10-16 issue (053020): classes 9 and 42, Taiwanese company owners (156 marks) cost about $0.63; the full issue (2,808 marks) costs about $11.24.

### Limitations

- Coverage is new **registrations** only (not applications, oppositions, renewals or assignments).
- The directory join is exact-name only, so foreign owners rarely match: their Taiwan branches are registered under different names.
- `markTypeCode` is passed through as the raw TIPO code (`0` for nearly all marks). Its official meaning is not documented in the open-data file.

# Actor input Schema

## `gazetteIssues` (type: `array`):

Leave empty for the latest trademark registration gazette (published about twice a month). Or list up to 6 issues as 6-digit <volume><number>, e.g. "053020" (volume 53 = ROC year 115 = 2026, number 20). Back issues are fetched from TIPO's FTPS server; if that fails, the run reports the failed issue in OUTPUT and still returns the others. Back issues are available from 045001 (January 2018) onward.

## `niceClasses` (type: `array`):

Only marks registered in at least one of these Nice classes (1-45), e.g. 9 = electronics/software, 25 = clothing, 35 = retail/advertising. Empty = all classes.

## `ownerCountries` (type: `array`):

Only marks with at least one owner from these countries, as 2-letter ISO codes, e.g. TW, US, JP, CN, KR. Empty = all countries.

## `ownerTypes` (type: `array`):

Only marks with at least one owner of these types. Names of individuals and sole proprietorships are never output. Empty = all.

## `markKeyword` (type: `string`):

Case-insensitive text that must appear in the mark name (Latin or Chinese), e.g. "AI" or "茶".

## `joinDirectory` (type: `boolean`):

For company and organisation owners, look up the exact Chinese name in the Ministry of Finance business register (UBN / 統一編號) and the International Trade Administration importer/exporter register (official English name, import/export qualification). Adds about 30-60 s per run. Individuals are never looked up.

## `maxResults` (type: `integer`):

Stop after this many marks. One gazette issue has about 2,500-3,500 registrations.

## Actor input object example

```json
{
  "gazetteIssues": [],
  "niceClasses": [
    "9",
    "42"
  ],
  "ownerCountries": [],
  "ownerTypes": [],
  "joinDirectory": true,
  "maxResults": 50
}
```

# Actor output Schema

## `results` (type: `string`):

One item per trademark registration in the selected gazette issue(s).

## `summary` (type: `string`):

Issues read (HTTPS or FTPS), record counts, owner types, directory-join statistics, licence and attribution.

# 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 = {
    "gazetteIssues": [],
    "niceClasses": [
        "9",
        "42"
    ],
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("giggling_persimmon/taiwan-trademarks-english").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 = {
    "gazetteIssues": [],
    "niceClasses": [
        "9",
        "42",
    ],
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("giggling_persimmon/taiwan-trademarks-english").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "gazetteIssues": [],
  "niceClasses": [
    "9",
    "42"
  ],
  "maxResults": 50
}' |
apify call giggling_persimmon/taiwan-trademarks-english --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,giggling_persimmon/taiwan-trademarks-english"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/JzxQHDdSXvfUR8sme/builds/RXmK4dpE3UwUcdCHe/openapi.json
