# Taiwan Director Compensation (TWSE + TPEx) — Board Pay (`chamarix/taiwan-director-compensation`) Actor

What every listed and OTC company in Taiwan paid its board last year, filed with the exchanges and never assembled until now. Parent-company and consolidated-group pay side by side, so what the subsidiaries paid is a subtraction. With EPS, ROE and profit on the same row.

- **URL**: https://apify.com/chamarix/taiwan-director-compensation.md
- **Developed by:** [chris](https://apify.com/chamarix) (community)
- **Categories:** AI, Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Taiwan Director Compensation (上市櫃董監酬金) API

Get structured JSON access to **what every listed and OTC company in Taiwan paid its board last year** — board pay, board pay including the salaries directors draw as employees, pay from group subsidiaries, pay from affiliates outside the group, and the profit, EPS and ROE it was all earned against.

**1,953 companies across both boards, one row each**, for report year 114 (2025). Parent-company and consolidated-group figures sit side by side on the same row, so *what the subsidiaries paid* is a subtraction rather than a join.

### Why this data matters

- **Pay and performance on one row.** Every other route to this asks you to join a compensation filing to a financial statement. Here the year's 稅後純益, EPS and ROE are already on the row, next to the board's pay and the exchange's own ratio of one to the other. 台積電's board took NT$157,366,729 against NT$1.72 trillion of profit — 0.0092% — while 台泥's took NT$29,518,258 against a NT$11.6 billion loss.
- **The number nobody publishes: what the subsidiaries paid.** The exchanges file board pay twice, once for the parent company alone and once for every company consolidated into its accounts, and never state the difference. This Actor fetches both and subtracts: `subsidiary_pay_delta`. **富邦金 (2881) tops up its board by NT$485,549,000 through group subsidiaries** on top of what the listed parent pays, 國泰金 (2882) by NT$167,597,000. For 1,215 of the 1,655 companies filing both, the figure is zero — which is itself the finding.
- **A column name that would mislabel every OTC row by seven years.** TPEX names these columns `董事酬金108年支付` and `董事酬金109年支付`. The data in them is report year **114**, filed the same week as the TWSE edition whose matching columns read `-前年支付` and `-今年支付`. Reading the digits as a year is a mistake that produces output which looks entirely normal. Columns here are read **by position**, and the year digits are used only to assert the earlier one still comes first — so if the exchange ever swaps them, the run fails instead of quietly inverting the meaning.
- **The report year is not in the report, and it was verified rather than assumed.** There is no 報告年度 column — only an 出表日期 of 1150415, the day the extract was cut. It covers the year before, which was confirmed against the source financial statements: 台泥's filed 稅後純益 of -11,617,608 and EPS of -1.60 are exactly its ROC 114 (2025) annual figures, as are 台積電's 66.26, 中華電's 4.99 and 德麥's +758,499 / 20.47 on the TPEX side.
- **稅後純益 here is not net income.** It is profit attributable to owners of the parent — 台泥 files -11,617,608 against a 本期淨利 of -11,862,586. The field is named `net_income_attributable_to_parent_thousands` for what it is. It is also in **thousands of NTD** while every pay column beside it is in whole NTD; that thousand-fold difference between adjacent columns is confirmed, not guessed, because it is exactly what makes the exchange's own percentage column come out right to the fourth decimal across all 3,613 filings.
- **Every row is checked against the arithmetic it states about itself.** Totals must equal the sum of their two payment timings; the filed percentage must match the profit it divides; the two average-pay columns must imply the same headcount. All 3,613 filings in the current edition pass. Tolerances are derived from the exchange's own rounding — a half-unit of the fourth decimal place, plus the error a thousand-rounded denominator propagates — rather than picked as round numbers, because a fixed constant either lets a real error through on a large company or flags a correct row on a small one.
- **Cross-validated against a separate official report.** Dividing each filed total by its filed average recovers the headcount the exchange computed it over; that is compared against the exchange's independent monthly 董監持股 filing. Across 978 listed companies it lands on the filed seat count exactly **72.2%** of the time and within one seat **95.1%** of the time.

### Output

One record per company per role. A real record, as published:

```json
{
  "report_year": 2025,
  "report_year_roc": "114",
  "published_date": "2026-04-15",
  "market": "TWSE",
  "code": "1101",
  "name": "台泥",
  "role": "director",
  "role_zh": "董事",
  "industry": "水泥工業",
  "net_income_attributable_to_parent_thousands": -11617608,
  "eps": -1.6,
  "roe_pct": -3.95,
  "paid_in_capital_thousands": 77511817.0,
  "pay_prior_year_paid": 29518258,
  "pay_current_year_paid": 0,
  "pay_total": 29518258,
  "pay_incl_employee_total": 60409865,
  "pay_pct_of_net_income": -0.2541,
  "pay_incl_employee_pct_of_net_income": -0.52,
  "avg_pay_per_person": 2012151,
  "avg_pay_per_person_incl_employee": 4117919,
  "pay_from_affiliates": 0,
  "implied_persons_paid": 14.67,
  "consolidated_pay_total": 30154418,
  "consolidated_pay_incl_employee_total": 66046025,
  "consolidated_avg_pay_per_person": 2055516,
  "consolidated_pay_from_affiliates": 5452000,
  "consolidated_implied_persons_paid": 14.67,
  "subsidiary_pay_delta": 636160,
  "scopes_present": ["parent", "consolidated"],
  "quality_flags": [],
  "quality_ok": true
}
```

#### The two scopes

| | Unprefixed fields | `consolidated_` fields |
|---|---|---|
| Covers | the listed company alone | every company consolidated into its accounts |
| Official table | `t187ap29_A` / `_B` | `t187ap29_C` / `_D` |
| Companies filing it | 1,831 | 1,777 |

Neither may be assumed present: **92 listed companies file a consolidated table with no parent-company one, and 74 the reverse.** `scopes_present` says which this company filed, and `subsidiary_pay_delta` is null unless both are there — never a fabricated zero.

#### `implied_persons_paid` is not a seat count

Total over average recovers the headcount the exchange divided by. It comes out **fractional for 393 of the 1,831 companies**, in steps of a twelfth — 台泥 at 14.67, 泰山 at 9.58 — because a board that turns over mid-year is averaged over months served. It is the weighted number of people paid. For an actual seat count on a given date, use [taiwan-director-shareholdings](https://apify.com/chamarix/taiwan-director-shareholdings).

### Input

```json
{
  "markets": ["TWSE", "TPEX"],
  "roles": ["director", "supervisor"],
  "stockCodes": ["2330", "1101"],
  "includeRationale": true,
  "includeRawFields": false,
  "crossCheck": true
}
```

- **markets** — `TWSE` (上市), `TPEX` (上櫃), or both.
- **roles** — `director` (董事) or `supervisor` (監察人), or both.
- **stockCodes** — optional filter, matched as text. Codes are not all four digits: the TDR listings run to six (`911608`).
- **includeRationale** — keep the filed free-text explanation of how pay relates to the year's result, usually quoting the charter article that caps the board's share of profit. It is by far the longest field; turn it off for a compact dataset.
- **includeRawFields** — also emit every official Chinese column verbatim, prefixed by scope.
- **crossCheck** — compare implied headcounts against the separate 董監持股 report and log the agreement rate.

### Coverage

| | Directors | Supervisors |
|---|---|---|
| TWSE (上市) | 1,072 | 1 |
| TPEX (上櫃) | 881 | 2 |

**The supervisor tables really are nearly empty.** Audit committees have replaced supervisors at all but a handful of companies, so the official 監察人 tables carry one listed and two OTC filings. That is the state of the filing, not a failed fetch, and the Actor does not treat it as an error.

### Update cadence and history

The report is **annual**, published each April after the filing season closes; the 114 (2025) edition was cut on 2026-04-15 (TWSE) and 2026-04-14 (TPEX). The feeds carry **only the latest edition** — no date parameter, no archive endpoint — so history accrues from the day you start collecting. Run it once a year after filing season, or quarterly to catch amendments: the `published_date` stamp moves when a company refiles.

Because the report year is derived from the extract date rather than from today's, a run in January 2027 against an unchanged feed still reports 114 — correctly — and rolls forward on its own the day the 115 edition lands.

### Notes on the source

- Both feeds are public open data, no login and no key.
- Both boards sign their numbers (`+758499`, `-0.2541`); TPEX signs values that need no sign. Signs are parsed, not rejected.
- Blank and `--` cells are `null`, never zero. The three TDR listings (`9103`, `911608`, `911622`) file a flat zero profit, which makes their pay-to-profit ratio undefined rather than inconsistent — those rows are not flagged.
- TPEX intermittently answers with **HTTP 520** under load; requests are retried and this resolves on its own.
- A renamed, dropped or reordered column fails the run loudly rather than filling a column with silent nulls — but a change to TPEX's hard-coded year digits deliberately does not, since those digits carry no meaning.

### Taiwan Market Data Suite

This Actor is part of a suite of 31 Taiwan market data APIs by [chamarix](https://apify.com/chamarix) — official sources only, cross-validated against independent official endpoints, clean JSON out. Code samples for the whole suite: [GitHub](https://github.com/cc77556/taiwan-market-data-actors).

**Market data:**

- [taiwan-stock-daily-quotes](https://apify.com/chamarix/taiwan-stock-daily-quotes) — Daily OHLCV, VWAP, P/E, price-to-book & dividend yield for every listed/OTC stock since 2004
- [taiwan-index-history](https://apify.com/chamarix/taiwan-index-history) — Daily TAIEX & TPEx index history since 1990 with market turnover, the total-return index & all 273 TWSE indices
- [twse-institutional-trades](https://apify.com/chamarix/twse-institutional-trades) — Daily institutional buy/sell (foreign, investment trust, dealer) per stock — TWSE listed
- [tpex-institutional-trades](https://apify.com/chamarix/tpex-institutional-trades) — Daily institutional buy/sell per stock — TPEx OTC market
- [taiwan-monthly-revenue](https://apify.com/chamarix/taiwan-monthly-revenue) — Monthly revenue of 1,900+ listed & OTC companies, MoM/YoY
- [taiwan-financial-statements](https://apify.com/chamarix/taiwan-financial-statements) — Quarterly income statement, balance sheet & cash flow back to 2013
- [taiwan-director-compensation](https://apify.com/chamarix/taiwan-director-compensation) — Board pay for 1,950+ companies, parent vs consolidated scope, with EPS, ROE & profit on the same row
- [taiwan-esg-disclosures](https://apify.com/chamarix/taiwan-esg-disclosures) — 21 ESG topics for 1,950+ companies — Scope 1/2/3 emissions, energy, water, waste, pay, board & climate risk
- [taiwan-dividend-calendar](https://apify.com/chamarix/taiwan-dividend-calendar) — Ex-dividend / ex-rights dates, reference prices & payouts back to 2003
- [taiwan-margin-trading](https://apify.com/chamarix/taiwan-margin-trading) — Daily margin trading & short sale balances per stock
- [taiwan-sbl-short-sale-balance](https://apify.com/chamarix/taiwan-sbl-short-sale-balance) — Securities-lending short sale balances per stock
- [taiwan-day-trading-stats](https://apify.com/chamarix/taiwan-day-trading-stats) — Day-trading volume, value & ratio per stock since 2014
- [taiwan-odd-lot-trading](https://apify.com/chamarix/taiwan-odd-lot-trading) — Both odd-lot sessions per stock — intraday & after-hours, shares, turnover, OHLC & quotes since 2004
- [tdcc-shareholding-dispersion](https://apify.com/chamarix/tdcc-shareholding-dispersion) — Weekly TDCC shareholding dispersion (retail vs whale structure)
- [taiwan-foreign-shareholding](https://apify.com/chamarix/taiwan-foreign-shareholding) — Foreign ownership percentage & remaining quota per stock
- [taiwan-futures-daily](https://apify.com/chamarix/taiwan-futures-daily) — Daily bars, settlement price & open interest for all 384 TAIFEX futures contracts since 1998, with the large-trader report
- [taifex-institutional-derivatives](https://apify.com/chamarix/taifex-institutional-derivatives) — Institutional futures & options positions (TAIFEX), incl. put/call ratio
- [taifex-options-chain](https://apify.com/chamarix/taifex-options-chain) — Full options chain by strike & expiry, both sessions, with the exchange's own Delta, since 2001
- [taiwan-warrants-daily](https://apify.com/chamarix/taiwan-warrants-daily) — Daily quotes, strike, expiry & moneyness for every listed/OTC warrant since 2004
- [taiwan-government-bonds](https://apify.com/chamarix/taiwan-government-bonds) — Central government bond benchmark yields, the full yield curve & issuance master, with staleness stated
- [taiwan-stock-alerts](https://apify.com/chamarix/taiwan-stock-alerts) — Watch-list, disposition & short-sale suspension alerts
- [taiwan-insider-share-transfers](https://apify.com/chamarix/taiwan-insider-share-transfers) — Insider share-transfer filings (directors, officers, 10% holders) since 2002
- [taiwan-director-shareholdings](https://apify.com/chamarix/taiwan-director-shareholdings) — Monthly director/officer shareholdings & share-pledge ratio since 1999
- [taiwan-block-trades](https://apify.com/chamarix/taiwan-block-trades) — Every block trade (鉅額交易) with price, size & basket constituents since 2005
- [taiwan-shareholder-meetings](https://apify.com/chamarix/taiwan-shareholder-meetings) — Shareholder meeting dates, book closure periods & e-voting since 2005
- [taiwan-emerging-stock-quotes](https://apify.com/chamarix/taiwan-emerging-stock-quotes) — Emerging (興櫃) board quotes, pre-IPO register & history since 2003
- [taiwan-etf-regular-investment](https://apify.com/chamarix/taiwan-etf-regular-investment) — Monthly regular savings plan (定期定額) rankings for stocks & ETFs since 2020
- [taiwan-treasury-stock-buybacks](https://apify.com/chamarix/taiwan-treasury-stock-buybacks) — Every treasury-stock buyback (庫藏股) filing, plan vs execution, since 2000

**Property market:**

- [taiwan-real-estate-transactions](https://apify.com/chamarix/taiwan-real-estate-transactions) — Actual registered sale, presale & lease prices (實價登錄) for all 22 cities since 2012

**Government & civic data:**

- [taiwan-legislator-monitor](https://apify.com/chamarix/taiwan-legislator-monitor) — Legislative Yuan bills, legislators & meetings
- [taiwan-tender-monitor](https://apify.com/chamarix/taiwan-tender-monitor) — Government e-procurement tenders (open calls, awards, failures)

### Data source

TWSE 上市公司董事、監察人酬金 (`t187ap29_A_L`, `_B_L`, `_C_L`, `_D_L`) and TPEX 上櫃公司董事、監察人酬金 (`mopsfin_t187ap29_A_O`, `_B_O`, `_C_O`, `_D_O`), plus TWSE 董監事持股餘額明細資料 (`t187ap11_L`) used for independent verification of headcounts. Public open data, no login required.

# Actor input Schema

## `markets` (type: `array`):

TWSE is the listed board (上市), TPEX the over-the-counter board (上櫃). Both boards publish the same four tables in the same shape.

## `roles` (type: `array`):

Directors (董事) or supervisors (監察人). The supervisor tables are nearly empty — one listed and two OTC companies in the current edition — because audit committees have replaced supervisors almost everywhere. That is the state of the filing, not a failed fetch.

## `stockCodes` (type: `array`):

Optional list of company codes to keep, e.g. \['2330', '1101']. Matched as text, because codes are not all four digits — the TDR listings run to six ('911608').

## `includeRationale` (type: `boolean`):

Each filing carries a free-text explanation of how pay relates to the year's profit, quoting the article of the company's own charter that sets the board's share. It is the longest field by far — past 1,000 characters for some filers — so turn this off for a compact dataset.

## `includeRawFields` (type: `boolean`):

Adds a `fields` object holding every column exactly as the exchange publishes it, under its original Chinese name and prefixed by scope. For auditing a value back to source.

## `crossCheck` (type: `boolean`):

Divides each filed total by its filed average to recover how many people were paid, then compares that against the exchange's separate monthly 董監持股 filing and writes the agreement rate to the log. Exact agreement is not expected for every company — a board that turned over mid-year averages over months served — so this is a signal, not a gate. Costs one extra request.

## Actor input object example

```json
{
  "markets": [
    "TWSE",
    "TPEX"
  ],
  "roles": [
    "director",
    "supervisor"
  ],
  "stockCodes": [],
  "includeRationale": true,
  "includeRawFields": false,
  "crossCheck": true
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

One record per company per role, carrying parent-company and consolidated-group pay side by side with the year's profit, EPS and ROE, so pay-for-performance is a single row rather than a join.

# 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 = {
    "markets": [
        "TWSE",
        "TPEX"
    ],
    "roles": [
        "director",
        "supervisor"
    ],
    "stockCodes": [],
    "includeRationale": true,
    "includeRawFields": false,
    "crossCheck": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("chamarix/taiwan-director-compensation").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 = {
    "markets": [
        "TWSE",
        "TPEX",
    ],
    "roles": [
        "director",
        "supervisor",
    ],
    "stockCodes": [],
    "includeRationale": True,
    "includeRawFields": False,
    "crossCheck": True,
}

# Run the Actor and wait for it to finish
run = client.actor("chamarix/taiwan-director-compensation").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 '{
  "markets": [
    "TWSE",
    "TPEX"
  ],
  "roles": [
    "director",
    "supervisor"
  ],
  "stockCodes": [],
  "includeRationale": true,
  "includeRawFields": false,
  "crossCheck": true
}' |
apify call chamarix/taiwan-director-compensation --silent --output-dataset

```

## MCP server setup

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

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/mLeEUubGjO2Fe91FC/builds/IwALntW9z2DgVwdE6/openapi.json
