# Taiwan Shareholder Meeting Calendar & E-Voting — 股東會 (`chamarix/taiwan-shareholder-meetings`) Actor

Every annual and extraordinary shareholder meeting filed by a Taiwan-listed company since 2005: meeting date and venue, the closed-book period that forces short sellers to cover, whether the board is up for election, and the e-voting window. TWSE, TPEx, Emerging and public-registered boards.

- **URL**: https://apify.com/chamarix/taiwan-shareholder-meetings.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/platform/actors/running/actors-in-store#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 Shareholder Meeting Calendar, Book Closure & E-Voting API (TWSE + TPEx)

Get structured JSON access to **every annual and extraordinary shareholder meeting filed by a Taiwan-listed company since 2005** — the meeting date and venue, the **closed-book period** that fixes who gets to vote and forces margin short sellers to cover, whether the **board is up for election**, and the **electronic-voting window**. Listed, OTC, Emerging and public-registered boards, **2,454 meetings in 2026 alone**.

Taiwan's meeting season is the most concentrated in Asia: of the 1,119 TWSE meetings filed for 2026, **566 fall in May and 516 in June**. Every one of them closes the share register for the 60 days beforehand, and every one of them is announced on MOPS weeks in advance. The exchanges' open-data feeds carry the current year only. This Actor serves a whole board-year in one request, reaches back twenty years, and reproduces the statutory closed-book window on every row before emitting it.

### Why this data matters

- **The closed-book period is a forced-buying calendar.** `book_closure_start` is the day the share register shuts. Taiwan requires margin short positions to be covered before it, so a crowded short in a name with an approaching annual meeting has a deadline set by statute rather than by the market. Pair this Actor with [taiwan-sbl-short-sale-balance](https://apify.com/chamarix/taiwan-sbl-short-sale-balance) to see who has to buy and when.
- **Board elections are when control is actually contested.** Taiwanese directors serve three-year terms, so an election year is when an activist stake, a family split or a proxy fight has to surface. **431 of the 1,119 TWSE meetings in 2026 elect a new board**, and `is_board_election` finds them in one filter.
- **Appraisal rights flag a deal before it is a deal.** `has_appraisal_rights` is true only when a dissenting shareholder can force the company to buy their shares — which in practice means a merger, a spin-off or a share swap is on the agenda. Seven TWSE meetings carried it in 2026.
- **Extraordinary meetings are the signal, not the noise.** 35 TWSE, 36 TPEx and 64 Emerging companies called one in 2026. An EGM is called for a specific resolution, and the filing date tells you when the company knew.
- **Twenty years of history, not an accumulating snapshot.** MOPS answers for any meeting year back to **2005**, so you can reconstruct a company's entire meeting record, chart the adoption of electronic voting across the market, or line meetings up against price history.

### Output

One record per company, per meeting.

```json
{
  "meeting_year": 2026,
  "market": "TWSE",
  "stock_code": "2330",
  "company_name": "台積電",
  "company_address": "新竹科學園區力行六路8號",
  "meeting_type": "ANNUAL",
  "meeting_type_label": "常會",
  "meeting_date": "2026-06-04",
  "book_closure_start": "2026-04-06",
  "book_closure_end": "2026-06-04",
  "book_closure_days_before_meeting": 59,
  "book_closure_matches_statutory_window": true,
  "convening_method": "實體方式召開",
  "meeting_venue": "新竹喜來登大飯店（新竹縣竹北市光明六路東一段265號3樓）",
  "video_conference_platform": null,
  "is_board_election": false,
  "contact_phone": "03-5636688",
  "transfer_agent": "中國信託商業銀行 代理部",
  "transfer_agent_phone": "02-6636-5566",
  "evoting_adopted": true,
  "evoting_period_text": "自115年05月05日至115年06月01日止",
  "evoting_start_date": "2026-05-05",
  "evoting_end_date": "2026-06-01",
  "evoting_platform": "台灣集中保管結算所股份有限公司",
  "evoting_url": "https://stockservices.tdcc.com.tw",
  "evoting_legacy_note": null,
  "has_appraisal_rights": false,
  "announcement_date": "2026-04-17",
  "announcement_time": "16:21:54",
  "record_status": "ACTIVE",
  "planned_cash_capital_increase": null,
  "cash_capital_increase_subscription_rate_pct": null,
  "employee_cash_bonus": 0,
  "employee_stock_bonus": 0,
  "director_remuneration": 0,
  "source": "MOPS"
}
```

| Field | Meaning |
|---|---|
| `meeting_year` | 開會年度 — the calendar year the meeting falls in, which is how MOPS files the report |
| `market` | `TWSE` (上市), `TPEX` (上櫃), `EMERGING` (興櫃) or `PUBLIC` (公開發行, registered but untraded) |
| `meeting_type` / `meeting_type_label` | `ANNUAL` / `EXTRAORDINARY`, plus the 常會 / 臨時 label verbatim |
| `meeting_date` | 股東常(臨時)會日期, ISO 8601 |
| `book_closure_start` / `book_closure_end` | 停止過戶起訖日期 — the closed-book period. Published from 2020 onwards |
| `book_closure_days_before_meeting` | Days from the first closed day to the meeting: 59 for an AGM, 29 for an EGM |
| `book_closure_matches_statutory_window` | False when the published window is not the statutory one — see below |
| `convening_method` / `video_conference_platform` | 召開方式 (physical / hybrid / virtual) and the platform. Published from 2022 |
| `is_board_election` | 是否改選董監 — directors and supervisors are elected at this meeting |
| `transfer_agent` / `transfer_agent_phone` | 股務單位 — the registrar handling the register and the proxies |
| `evoting_adopted` / `evoting_start_date` / `evoting_end_date` | Whether electronic voting is offered, and the exercise window parsed to ISO dates |
| `evoting_platform` / `evoting_url` | 電子投票平台 and 投票網址 — in practice always TDCC |
| `has_appraisal_rights` | 異議股東得行使股份收買請求權 — a dissenter can force a buy-out. Published from 2020 |
| `announcement_date` / `announcement_time` | When the company filed this announcement. Published from 2020 |
| `record_status` | `ACTIVE`, or `CANCELLED` for a meeting withdrawn after being announced |
| `planned_cash_capital_increase` … `director_remuneration` | The capital-increase and bonus figures put to the meeting. TWSE current year only |
| `source` | `MOPS` for the announcement report, `OPENDATA` for a row only an exchange feed carries |

#### Five things about this report that will bite you

**1. The report grew four times, and older years simply do not have the newer columns.** The closed-book period appears from **2020**; the convening method and video platform from **2022**; the e-voting window, platform and URL from **2015**; before that there is one free-text cell and nothing else. This Actor reads the table by column name rather than by position, so an older year comes back with the same field names and `null` where the column did not exist — but do not mistake a `null` `book_closure_start` in 2015 for a company that failed to close its register.

**2. A postponed meeting is filed twice, and the second filing keeps the first one's closed-book window.** 寶碩 (5210) announced its 2026 annual meeting for 06-02 with the register closing 04-04, then moved the meeting to 07-28 — and the 07-28 filing still carries the 04-04–06-02 window. 艾華 (6204) did the same thing on the same date. Both companies' original rows are still in the report, so a naive group-by-company gives you two annual meetings in one year. Key on `(stock_code, meeting_type, meeting_date)`, and use `book_closure_matches_statutory_window` to spot the moved one.

**3. Withdrawn meetings vanish from MOPS entirely.** When a company cancels an announced meeting, MOPS drops the row from the report as though it never happened. Only TWSE's `t187ap38_L` keeps it, marked 種類 已撤銷. This Actor merges that feed back in for the current TWSE year (`includeOpenDataExtras`, on by default) and marks those rows `record_status: "CANCELLED"` — 新紡 (1419) and 永冠-KY (1589) both withdrew an extraordinary meeting in 2026. There is no TPEx equivalent, so no other board can show you this.

**4. The 2005–2014 free-text cell is not an e-voting field.** Before the report had proper e-voting columns it had one cell, 是否採電子投票, that opens with 是 or 否 and then says whatever the company wanted. Of the 195 notes filed on the TWSE board in 2014, **167 describe electronic voting and 28 are about something else entirely** — a competition-clause waiver under 公司法 §209, or the procedure for submitting a shareholder proposal. `evoting_adopted` is only set to `true` when the note actually names electronic voting; the rest stay `null` with the raw text preserved in `evoting_legacy_note`. It is never guessed from the leading 是.

**5. The two publications disagree on which meetings exist, in both directions.** For 2026 TWSE, `t187ap38_L` and `t187ap41_L` each carry exactly 1,119 rows — but they are not the same 1,119. `t187ap38_L` keeps the two withdrawn meetings and drops two superseded extraordinary meetings (福懋油 1225's 04-16 and 定穎投控 3715's 03-11) that both MOPS and `t187ap41_L` still list. MOPS is used as the spine because it is the only one that reaches back past this year.

### Data integrity

Three independent publications carry these filings, and this Actor checks itself against all of them.

**Every closed-book window is reproduced against statute, on every run.** 公司法 §165 closes the register for the 60 days before an annual meeting and the 30 before an extraordinary one, ending on the meeting day itself — so `book_closure_end` must equal `meeting_date` and the span must be exactly 59 or 29 days. Across **4,358 meetings on all four boards in 2020, 2023 and 2026, exactly two broke it**, and both were the postponements described above, each of which also still files its original meeting as a separate row. That is the published footprint of a moved meeting, not a parse error, so it is flagged per row and named in the log rather than failing the run.

**MOPS is cross-checked against the exchanges' own feeds.** MOPS 股東常會(臨時會)公告 (`ajax_t108sb31`) and the open-data feeds (`t187ap41_L`, `t187ap41_O`) are separate renderings of the same filings reached through completely different query paths. Comparing them meeting by meeting for 2026 gave **1,119 TWSE and 929 TPEx meetings matched key for key, with zero differences on any of the seven shared fields** — company name, registered address, venue, board-election flag, contact phone, transfer agent and its phone. The check runs on every execution (`crossCheck`, on by default) and never changes the output.

**The closed-book dates and filing timestamps are cross-checked against a third feed.** TWSE's `t187ap38_L` restates the same meetings from a different compilation. Over the 1,117 meetings it shares with MOPS for 2026, `停止過戶起`, `停止過戶訖` and `公告日期` all reproduced exactly, and so did every filing time once the leading zero the feed drops on a morning filing is restored — which accounted for all 166 apparent disagreements and none of them were real.

Beyond that, the parser refuses to guess. Every column of the MOPS header is looked up by name, and a column this Actor has not seen fails the run rather than being read into the wrong field. A year before the archive begins, a board with no filings and a year that has not happened yet all return no rows and no error, because MOPS answers all three with the same 查無資料 page.

### Input

| Field | Type | Description |
|---|---|---|
| `startYear` | string | `YYYY`. Empty = the current year. History goes back to `2005` |
| `endYear` | string | `YYYY` inclusive; empty = just the start year. One request per board-year |
| `markets` | array | Any of `TWSE`, `TPEX`, `EMERGING`, `PUBLIC`. Empty = all four |
| `stockCodes` | array | e.g. `["2330", "2454"]`. Empty = every company |
| `meetingTypes` | array | `ANNUAL` and/or `EXTRAORDINARY`. Empty = both |
| `meetingMonths` | array | Two-digit months, e.g. `["05", "06"]`. Empty = the whole year |
| `boardElectionOnly` | boolean | Keep only meetings that elect directors and supervisors |
| `electronicVotingOnly` | boolean | Keep only meetings with an e-voting window |
| `includeOpenDataExtras` | boolean | Merge in the capital-increase columns and the withdrawn meetings. Default `true` |
| `crossCheck` | boolean | Compare against the exchange feeds and log the result. Default `true` |

Example — this year's whole market:

```json
{}
```

Example — every board election on the two exchanges, with the closed-book dates:

```json
{
  "markets": ["TWSE", "TPEX"],
  "boardElectionOnly": true
}
```

Example — every extraordinary meeting of the last five years:

```json
{
  "startYear": "2022",
  "endYear": "2026",
  "meetingTypes": ["EXTRAORDINARY"]
}
```

Example — one company's entire meeting history:

```json
{
  "startYear": "2005",
  "endYear": "2026",
  "stockCodes": ["2330"],
  "crossCheck": false
}
```

### Pricing & cost control

Pay per result: **$0.50 / 1,000 records**.

- All four boards, current year: 2,454 records ≈ $1.23 (TWSE 1,119 + TPEx 929 + Emerging 393 + public-registered 13, measured on 2026)
- TWSE only, current year: 1,119 records ≈ $0.56
- Every board election on both exchanges: 801 records ≈ $0.40
- Every extraordinary meeting on both exchanges, current year: 71 records ≈ $0.04
- One ticker's full 22-year meeting history: 21 records for 2330 ≈ $0.01

Filters are applied before anything is written, so `meetingTypes`, `meetingMonths`, `boardElectionOnly`, `electronicVotingOnly` and `stockCodes` all cut the bill directly. Fetching is per board-year regardless — MOPS serves a whole board's year in one request — so a filtered run is no slower than an unfiltered one, only cheaper.

### Data source & reliability

- Direct from MOPS 股東常會(臨時會)公告 (`ajax_t108sb31`), with TWSE `t187ap41_L` / `t187ap38_L` and TPEx `t187ap41_O` as independent cross-checks — the exchanges' own publications, no third-party intermediaries
- Coverage starts at **2005** on all four boards; 2004 and earlier return 查無資料 everywhere, and the Actor clamps requests up to that floor rather than emitting empty runs
- Filings appear as soon as the board resolves to call the meeting, typically two to four months ahead, and are amended in place when a meeting moves
- Only TWSE and TPEx publish an open-data mirror, so the Emerging and public-registered boards are served by MOPS alone and are not cross-checked
- The capital-increase and bonus columns exist only in TWSE's `t187ap38_L`, which restates the current year only — they are `null` for every other board and year, and are never inferred

### Use cases

- **Short-squeeze calendars** — join `book_closure_start` against securities-lending balances to find crowded shorts facing a statutory covering deadline
- **Activist and proxy-fight screening** — filter to `boardElectionOnly` and watch which companies file an extraordinary meeting in an election year
- **M\&A early warning** — `has_appraisal_rights` surfaces the meetings where a merger, spin-off or share swap is on the agenda
- **Event studies** — line up meeting dates and filing dates against price history across a whole board and twenty years
- **Corporate-governance research** — chart the adoption of electronic voting and of hybrid meetings across the market since 2005
- **IR and compliance tooling** — pull venues, transfer agents and e-voting windows for a portfolio into a single calendar feed

### Taiwan Market Data Suite

This Actor is part of a suite of 19 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:**

- [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-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

- [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

- [taifex-institutional-derivatives](https://apify.com/chamarix/taifex-institutional-derivatives) — Institutional futures & options positions (TAIFEX), incl. put/call ratio

- [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 insider 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-emerging-stock-quotes](https://apify.com/chamarix/taiwan-emerging-stock-quotes) — Emerging Stock Board (興櫃) quotes, pre-IPO company register & listing-application status

**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)

# Actor input Schema

## `startYear` (type: `string`):

Calendar year the meeting is held in, e.g. 2026. Leave empty for the current year. MOPS holds this report from 2005 onwards — 2004 and earlier answer 查無資料 on every board.

## `endYear` (type: `string`):

Last meeting year to cover, inclusive. Leave empty to fetch only the start year. One request per board-year, so a twenty-year sweep of all four boards is 80 requests.

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

Which boards to cover. Leave empty for all four. Only TWSE and TPEx have an open-data mirror to cross-check against; Emerging and public-registered companies are served by MOPS alone.

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

Optional list of security codes (e.g., \['2330', '2454']). Filtering happens after the fetch — MOPS serves a whole board-year at once, so a filtered run costs the same as an unfiltered one.

## `meetingTypes` (type: `array`):

Annual meetings (股東常會) are held once a year, mostly in May and June. Extraordinary meetings (股東臨時會) are called for a specific resolution — a merger, a capital reduction, a contested board seat — and are the interesting ones. Leave empty for both.

## `meetingMonths` (type: `array`):

Keep only meetings held in these months, as two-digit strings. Taiwan's season is heavily bunched — of the 1,119 TWSE meetings in 2026, 566 fall in May and 516 in June. Leave empty for the whole year.

## `boardElectionOnly` (type: `boolean`):

Keep only meetings whose 是否改選董監 is 是. Taiwanese boards serve three-year terms, so an election year is when a proxy fight, an activist stake or a change of control has to surface.

## `electronicVotingOnly` (type: `boolean`):

Keep only meetings with an e-voting window. Mandatory for listed and OTC companies since 2018, so this mainly matters on the Emerging board and on historical years.

## `includeOpenDataExtras` (type: `boolean`):

For the current year on TWSE, merge in t187ap38\_L: planned cash capital increase and subscription rate, employee bonuses, director remuneration, and the meetings that were withdrawn after being announced — MOPS drops those from the report entirely, so this is the only way to see them. Costs one request. No TPEx equivalent exists.

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

Compare every meeting against TWSE's t187ap41\_L and TPEx's t187ap41\_O — an entirely separate query path — and log whether each shared value reproduces. Costs one request per board and never changes the output.

## Actor input object example

```json
{
  "startYear": "",
  "endYear": "",
  "markets": [
    "TWSE",
    "TPEX"
  ],
  "stockCodes": [],
  "meetingTypes": [],
  "meetingMonths": [],
  "boardElectionOnly": false,
  "electronicVotingOnly": false,
  "includeOpenDataExtras": true,
  "crossCheck": true
}
```

# Actor output Schema

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

One record per company, per meeting — date, venue, closed-book period, board election and the e-voting window.

# 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 = {
    "startYear": "",
    "endYear": "",
    "markets": [
        "TWSE",
        "TPEX"
    ],
    "stockCodes": [],
    "meetingTypes": [],
    "meetingMonths": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("chamarix/taiwan-shareholder-meetings").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 = {
    "startYear": "",
    "endYear": "",
    "markets": [
        "TWSE",
        "TPEX",
    ],
    "stockCodes": [],
    "meetingTypes": [],
    "meetingMonths": [],
}

# Run the Actor and wait for it to finish
run = client.actor("chamarix/taiwan-shareholder-meetings").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 '{
  "startYear": "",
  "endYear": "",
  "markets": [
    "TWSE",
    "TPEX"
  ],
  "stockCodes": [],
  "meetingTypes": [],
  "meetingMonths": []
}' |
apify call chamarix/taiwan-shareholder-meetings --silent --output-dataset

```

## MCP server setup

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

```

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/dr3IiP7IwX0luYnBj/builds/QsbMfmA9GXGDLDGhb/openapi.json
