# Taiwan Factory Finder (工廠登記) — Official MOEA Data (`waisuan/taiwan-factory-finder`) Actor

Search Taiwan's ~100,000 registered factories in production from the official MOEA open data: registration no., name, business ID, county, district, address, industries, product categories, approval dates. Filter by industry, county, product keyword.

- **URL**: https://apify.com/waisuan/taiwan-factory-finder.md
- **Developed by:** [Waisuan](https://apify.com/waisuan) (community)
- **Stats:** 2 total users, 1 monthly users, 90.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

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 Factory Finder (工廠登記) — Official MOEA Data

Search **Taiwan's ~100,000 registered factories that are currently in production**, straight from the official Ministry of Economic Affairs factory register open data, as clean English-keyed JSON, CSV or Excel. Filter by industry, county/city, district, product category keyword and registration date, and get each factory's registration number, name, 8-digit business ID (統一編號), address, industries, main product categories and approval dates.

### Who is it for

- **Sourcing and procurement teams** looking for Taiwanese manufacturers of a given product group (semiconductors, plastic products, medical devices, machinery, food processing…) in a given region.
- **B2B sales and lead generation**: industrial suppliers, logistics, automation, energy, ESG and insurance vendors who sell to factories. Sort by newest registrations to find factories that just started production.
- **Market, supply-chain and investment research**: count factories by industry and county, map industrial clusters, enrich company lists with factory locations via the business ID.
- **Data pipelines and AI agents** that need a structured, official list of Taiwanese production sites.

### Why use it

- **Official source**, not a scraped directory: the Registered Factory Directory (登記工廠名錄) published by the MOEA Industrial Development Administration on data.gov.tw (dataset 6569). The Actor always resolves the current download link from the data.gov.tw listing, so it follows monthly updates automatically.
- **English field names and ISO dates** (the source uses ROC dates such as 0790517 → 1990-05-17), industries and product categories split into `{code, name, nameEn}` objects, county / district / village split out.
- **Fast and light**: one small index file plus one ~6 MB ZIP per run; the default run finishes in about 6 seconds.
- **Privacy by default**: the factory owner's personal name (工廠負責人) is **not** output unless you turn on `includeOwner`.
- **Polite to the government servers**: only two requests per run, a delay before each, 3 retries with backoff and clear error messages.

### Input example

```json
{
  "industries": ["26"],
  "counties": ["新竹市", "新竹縣"],
  "productKeyword": "半導體",
  "maxItems": 100
}
```

| Field | Meaning |
|---|---|
| `industries` | 2-digit manufacturing division codes, e.g. `08` food, `22` plastic products, `25` fabricated metal, `26` electronic components, `29` machinery, `33` other (incl. medical devices). Empty = all. |
| `counties` | County/city (Chinese names, e.g. 臺中市, 桃園市). Empty = all of Taiwan. |
| `districts` | Exact district/township names, e.g. 岡山區. |
| `productKeyword` | Matches the official product categories (e.g. 半導體, 塑膠製品, 醫療器材), a category code prefix (e.g. `261`), English category/industry names (e.g. `semiconductor`) and the factory name. |
| `nameKeyword` | Factory name contains. |
| `registeredFrom`, `registeredTo` | Factory registration approval date range (`YYYY-MM-DD`). |
| `includeOwner` | Output the owner's name (off by default; see FAQ). |
| `sortBy` | `registrationDateDesc` (default), `registrationDateAsc` or `source`. |
| `maxItems` | Maximum rows (default 20). |

With an empty input `{}` the Actor returns the 20 most recently registered factories in Taiwan.

### Output example

Real output from the input above (snapshot `11508.csv`, updated 2026-09-18):

```json
{
  "factoryRegistrationNo": "04001346",
  "factoryName": "穎崴科技股份有限公司新竹二廠",
  "businessId": "13145774",
  "organizationType": "股份有限公司",
  "organizationTypeEn": "company limited by shares",
  "status": "生產中",
  "statusEn": "in production",
  "county": "新竹縣",
  "district": "竹北市",
  "village": "東平里",
  "address": "新竹縣竹北市東平里台元二街12號1樓(及8樓之1、8樓之2、8樓之3)",
  "industryCodes": ["26"],
  "industries": [{ "code": "26", "name": "電子零組件製造業", "nameEn": "Electronic parts and components" }],
  "productCategories": [{ "code": "261", "name": "半導體", "nameEn": "Semiconductors" }],
  "establishmentPermitNo": null,
  "establishmentApprovedDate": null,
  "registrationApprovedDate": "2026-05-28",
  "snapshotFile": "11508.csv",
  "snapshotUpdated": "2026-09-18",
  "source": "Ministry of Economic Affairs, Industrial Development Administration — Registered Factory Directory (登記工廠名錄), data.gov.tw dataset 6569",
  "sourceUrl": "https://serv.gcis.nat.gov.tw/RDownLoad/Data/statistical/%E7%94%9F%E7%94%A2%E4%B8%AD%E5%B7%A5%E5%BB%A0%E6%B8%85%E5%86%8A.zip",
  "license": "Open Government Data License, version 1.0 (Taiwan)"
}
```

A `RUN_SUMMARY` record in the key-value store reports the snapshot file, total factories, matches and rows pushed.

### Pricing

Suggested pay-per-event price: **US$0.003 per result (US$3 per 1,000 factories)**, charged through the default dataset-item event, plus the standard Actor start event.

| Use case | Results | Cost |
|---|---|---|
| Default run (20 newest factories) | 20 | US$0.06 |
| Semiconductor factories in Hsinchu City + County | 232 | ~US$0.70 |
| All semiconductor factories in Taiwan (`productKeyword: "semiconductor"`) | 557 | ~US$1.67 |
| Every factory in production in Taiwan | ~101,000 | ~US$303 |

Runs that match nothing push no rows and are not charged per result.

### FAQ

**How fresh is the data?** The register is republished roughly monthly (the snapshot file name, e.g. `11508.csv`, and `snapshotUpdated` tell you which version you got). It contains factories whose status is "in production" (生產中) only.

**Does it list individual products?** No. The official register lists product *categories* (主要產品, 3-digit Taiwan SIC groups such as 261 半導體 or 332 醫療器材及用品), not free-text product lists or brands.

**Can I get the owner's name?** Only with `includeOwner: true`. The factory owner is a natural person; their name is personal data under Taiwan's Personal Data Protection Act and you are responsible for having a lawful purpose.

**Phone numbers or emails?** Not included; the official data does not contain them. Join on `businessId` with company registry data if you need more company details.

**Why is `establishmentApprovedDate` often null?** Many smaller factories register directly without a separate establishment permit; the source leaves the field empty.

### Data source and license (資料來源與授權)

- Registered Factory Directory 登記工廠名錄, data.gov.tw dataset 6569: https://data.gov.tw/dataset/6569 (published by the MOEA Industrial Development Administration 經濟部產業發展署).

Released under the **Open Government Data License, version 1.0 (政府資料開放授權條款－第1版)**, which permits commercial use with attribution. Attribution:

> 經濟部產業發展署 2026 登記工廠名錄。此開放資料依政府資料開放授權條款 (Open Government Data License) 進行公眾釋出，使用者於遵守本條款各項規定之前提下，得利用之。政府資料開放授權條款：https://data.gov.tw/license

This Actor is an independent tool by Waisuan and is not affiliated with or endorsed by the Ministry of Economic Affairs.

### 繁體中文簡介

本 Actor 讀取經濟部產業發展署「登記工廠名錄」開放資料（data.gov.tw 資料集 6569，約 10 萬家生產中工廠），輸出工廠登記編號、工廠名稱、統一編號、縣市、行政區、村里、地址、產業類別、主要產品類別（附英文名稱）與核准日期（西元 ISO 格式）。可依產業類別、縣市、行政區、產品關鍵字（中英文皆可）、工廠名稱與登記日期篩選，預設依最新登記排序。工廠負責人姓名屬個人資料，預設不輸出。建議價格：每千筆 US$3。資料採政府資料開放授權條款第 1 版，可商用，需標示出處。

# Actor input Schema

## `industries` (type: `array`):

Manufacturing industry divisions (Taiwan Standard Industrial Classification) registered for the factory. A factory may have several. Empty = all industries.

## `counties` (type: `array`):

County/city where the factory is located. Empty = all of Taiwan.

## `districts` (type: `array`):

e.g. 岡山區, 觀音區, 彰化市. Empty = all.

## `productKeyword` (type: `string`):

Matches the official main-product categories (主要產品, e.g. 半導體, 塑膠製品, 醫療器材, 金屬加工處理), a product category code prefix (e.g. 261), the industry name (Chinese or English) and the factory name. The register uses product categories, not free-text product lists.

## `nameKeyword` (type: `string`):

e.g. 精密, 食品, 科技. Empty = any.

## `registeredFrom` (type: `string`):

Only factories whose factory registration (工廠登記核准日期) was approved on or after this date.

## `registeredTo` (type: `string`):

Only factories whose factory registration was approved on or before this date.

## `includeOwner` (type: `boolean`):

The factory owner (工廠負責人) is a natural person. Off by default; if you enable it you are responsible for complying with Taiwan's Personal Data Protection Act.

## `sortBy` (type: `string`):

Sort order applied before maxItems.

## `maxItems` (type: `integer`):

Maximum number of factories to output (each row is one billable result).

## `requestDelayMs` (type: `integer`):

Pause before each request to the government server. A run makes only two requests.

## Actor input object example

```json
{
  "industries": [],
  "counties": [],
  "districts": [],
  "productKeyword": "半導體",
  "nameKeyword": "",
  "registeredFrom": "",
  "registeredTo": "",
  "includeOwner": false,
  "sortBy": "registrationDateDesc",
  "maxItems": 20,
  "requestDelayMs": 1000
}
```

# Actor output Schema

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

All records in the default dataset (JSON, CSV, Excel and more via the API).

# 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 = {
    "productKeyword": "半導體"
};

// Run the Actor and wait for it to finish
const run = await client.actor("waisuan/taiwan-factory-finder").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 = { "productKeyword": "半導體" }

# Run the Actor and wait for it to finish
run = client.actor("waisuan/taiwan-factory-finder").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 '{
  "productKeyword": "半導體"
}' |
apify call waisuan/taiwan-factory-finder --silent --output-dataset

```

## MCP server setup

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

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/2H8Na7BSMyBWDdr5z/builds/MGDXxA1Dt8huadx6Q/openapi.json
