Taiwan Corporate Action Prices — 減資分割參考價 API avatar

Taiwan Corporate Action Prices — 減資分割參考價 API

Under maintenance

Pricing

from $0.50 / 1,000 results

Go to Apify Store
Taiwan Corporate Action Prices — 減資分割參考價 API

Taiwan Corporate Action Prices — 減資分割參考價 API

Under maintenance

Every point at which a Taiwan share price legitimately jumps without the company changing: capital reductions, par value changes and ETF splits, back to 2011. Fourteen official tables joined into one adjustment factor per event, every price re-derived and checked.

Pricing

from $0.50 / 1,000 results

Rating

0.0

(0)

Developer

chris

chris

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Share

Taiwan Corporate Action Prices (減資/面額變更/ETF分割參考價) API

Every point at which a Taiwan share price legitimately jumps without the company being worth a dollar more or less — as structured JSON, both boards, back to 2011.

On 2025-06-18 元大台灣50 (0050) closed at 188.65 and reopened at 47.16. Nothing happened to the fund. It split four for one, and any price series that does not know that has a 75% crash in it.

This Actor is the official list of those moments, and the adjustment factor for each one.

The four events, and why they are one dataset

EventWhat changesTypical effect on the price
減資 Capital reductionShare count falls; sometimes cash comes backUsually up — but down when the cash returned outweighs it
變更股票面額 Par value changePar value changes, share count moves inverselyDown when par is cut (the usual direction since 2014)
ETF分割 ETF splitUnits multiplyDown
ETF反分割 ETF reverse splitUnits contractUp

Taiwan publishes these in fourteen separate tables across two exchanges, under four different column vocabularies, with no shared key and no joined view anywhere. This Actor reads all fourteen and emits one row per event, in one shape.

Why this data matters

  • It is the missing piece of every Taiwan price history. Daily quote feeds — including taiwan-stock-daily-quotes — publish raw closes. Splice them naively across one of these events and your return series is wrong by the whole ratio. price_adjustment_factor is the one number that fixes it.
  • The direction is not guessable. A capital reduction usually raises the price, and everyone assumes it always does. 無敵 (8201) closed at 8.69 on 2016-07-06, kept 700 shares of every 1,000 and handed back NT$3.00 a share — and reopened at 8.12. Seven of the 700 reductions on record moved the price down. A sign convention inferred from the event type is wrong seven times.
  • Nor is the magnitude. 國泰臺灣加權正2 (00663L) split seven for one on 2025-06-11; 0050 split four for one a week later. Both are "an ETF split".
  • Leveraged funds have a different limit. 00663L's first session ran ±20%, not ±10% — and no column on any of the fourteen tables says so. It is recovered here from the printed limits and published as price_limit_pct.
  • The forward view is free money for a scheduler. The announcement tables carry events that have not happened yet: the ratio, the halt date and the resumption date are set weeks ahead. Know that 富邦NASDAQ (00662) splits five for one on 2026-11-17 before it does.

Output

One record per event. A real row — 中環 (2323), a reduction that returned capital and paid a dividend on the old shares:

{
"resume_date": "2022-10-24",
"halt_date": "2022-10-14",
"announcement_date": "2022-10-13",
"market": "twse",
"action_type": "CAPITAL_REDUCTION",
"record_type": "RESUMED",
"stock_code": "2323",
"stock_name": "中環",
"last_close_before_halt": 6.53,
"reference_price": 6.2,
"limit_up": 6.82,
"limit_down": 5.58,
"opening_base_price": 6.2,
"price_adjustment_factor": 0.94946401,
"implied_share_multiplier": 1.05322581,
"share_multiplier": 0.94,
"official_ratio_label": "每壹仟股換發新股票 ÷ 1000",
"reason": "退還股款",
"cash_returned_per_share": 0.6,
"cash_dividend_per_share": 0.1,
"price_limit_pct": 0.1,
"limits_match_reference": true,
"opening_base_matches_reference": true,
"reference_price_matches_ratio": true,
"source_market_report": "twse:TWTAUU",
"quality_flags": []
}

A thousand shares became 940, each old share got NT$0.60 of capital and NT$0.10 of dividend back, and the price went from 6.53 to 6.20. (6.53 − 0.60 − 0.10) ÷ 0.94 = 6.202 — which is the exchange's own 6.20, and the Actor checked that before publishing the row.

The two multipliers are not the same number

FieldMeansFor 中環
share_multiplierShares you hold after ÷ shares before, as the exchange filed it0.94
implied_share_multiplierPre-halt close ÷ reference price — the multiplier read back out of the prices1.0532
price_adjustment_factorReference price ÷ pre-halt close — multiply old prices by this0.9495

They agree exactly for a pure split or par change. They part company whenever cash leaves the company, because part of the value did not turn into shares. Use price_adjustment_factor to splice prices; use share_multiplier to track a position size.

What you can ask for

InputEffect
startDate / endDateEmpty for the whole archive. The floor is 2011-01-01 — TWSE rejects anything earlier outright
marketboth, twse or tpex
actionTypesAny of CAPITAL_REDUCTION, PAR_VALUE_CHANGE, ETF_SPLIT, ETF_REVERSE_SPLIT
recordsresumed for the historical record, announced for pending events, both by default
stockCodesKeep only these securities, e.g. 2323, 0050
fetchReductionDetailsFetch the exchange ratio for listed reductions. On by default — see below
maxDetailRequestsSafety cap on those lookups, default 500. 0 lifts it

The whole archive is fourteen requests, because every historical table takes a date range of any length in one call. It is a small dataset: about 740 events in sixteen years, roughly 700 of them capital reductions.

The one place requests go. TPEx ships each reduction's exchange ratio, cash returned and par values inside the row, free. TWSE keeps them behind one request per reduction — about 400 for a full backfill — and throttles them, with a 307 carrying no Location header. The Actor adapts its pace to whatever the exchange is tolerating rather than retrying into a wall, but the throttle is the binding constraint: a full listed backfill measures around ten minutes. Turn fetchReductionDetails off and listed reductions still carry the reference price, the limits and the adjustment factor; they just lose share_multiplier and the ratio cross-check, and are flagged NO_OFFICIAL_RATIO.

Verification

These tables have no totals row to reconcile against, so the exchanges' own arithmetic is reproduced instead — three independent identities, all measured against the live archive before release.

1. The limits must fall out of the reference price. Taiwan's up-limit is the reference price times the limit width, pulled down to a legal tick; the down-limit is the same pulled up. Reproducing that needs three things the tables do not state: the tick ladder (six bands for shares, two for ETFs, chosen by the resulting price rather than the starting one), the limit width in force that day (7% before 2015-06-01, 10% after), and the multiple a leveraged fund carries. Result: 716 of 717 archived rows reproduce exactly.

The one that does not is a superseded filing, and it is interesting. When a reduction and an ex-rights date land on the same resumption, the exchange strikes the down-limit off the ex-rights price and the up-limit off the reference price — an asymmetry that is documented nowhere and that four rows in the archive depend on. Three of those four verify. The fourth is an earlier filing of the same event that omits the ex-rights price its own sibling row carries, and it is flagged SUPERSEDED_ANNOUNCEMENT and LIMIT_MISMATCH rather than quietly corrected.

2. The opening auction base must be the reference price at the nearest tick. 721 of 721, exactly.

3. The reference price must fall out of the exchange ratio. (close − cash returned − cash dividend) ÷ share multiplier, against the published figure. This one needs a tolerance, and a fixed one would be wrong in both directions — so it is derived from where the rounding actually comes from. The published price is the exchange's arithmetic taken to the cent (TWSE truncates, TPEx rounds half up), worth 0.01; and the close the recomputation starts from is itself only published to the cent, a half-cent that division by the ratio magnifies. For a reduction to 90% that is 0.0056; for 台南-KY at 31.1% it is 0.0161. Widest gap among rows that reconcile: 0.0113, inside its own bound of 0.0262.

One row in the entire archive does not reconcile, and it is published saying so. 中興電 (1513), resumed 2014-12-10: the exchange's price table says 19.60 became 20.05, and the exchange's own detail record for the same event says 875 shares per 1,000 with NT$1.25 returned — which gives 20.97. Those two official records disagree, no combination of the published fields closes the gap, and nothing here invents a number to make it go away. It carries REFERENCE_PRICE_RATIO_MISMATCH.

Drift fails the run rather than corrupting the output. Every column read by position is checked against its expected header first; if a report is republished with different columns, the Actor fails instead of publishing figures read out of the wrong place. And if more than a twentieth of resumption rows stop reproducing their own limits, that is columns having moved — the run fails rather than shipping a dataset where the checks quietly went false.

Units and conventions, stated once

FieldUnit
All pricesNT$ per share, as published
price_adjustment_factor, share_multiplier, implied_share_multiplierDimensionless ratios, 8 decimal places
price_limit_pctFraction — 0.1 is ±10%
cash_returned_per_share, cash_dividend_per_shareNT$ per pre-reduction share
All datesISO YYYY-MM-DD; the exchanges publish Republic-of-China years and they are normalised here

Limitations, stated plainly

  • The archive starts 2011-01-01. TWSE refuses an earlier start date outright rather than returning an empty table. Events before that are not available from these reports at any price.
  • ETF splits carry no share_multiplier. The exchanges publish a column called 分割(反分割)比率 for splits and reverse splits without stating which way it points, and a reverse split's row would be ambiguous. The raw figure is in official_ratio with the exchange's own column name beside it in official_ratio_label, and implied_share_multiplier — read out of the prices, which are unambiguous — is exact for these events. Nothing is guessed.
  • Listed par value changes carry no official ratio either. TWSE's detail report for them just echoes the row. implied_share_multiplier is exact; the OTC board publishes the ratio and the par values properly.
  • Announcements carry no prices. They cannot: the pre-halt close has not happened. They carry the ratio, the reason and both dates, which is what a scheduler needs.
  • The forward tables are snapshots. They hold whatever is pending right now and ignore any date range sent to them, so a historical query returns nothing from them by design. The record of what did happen is the resumption tables, which do take a range.
  • One event can appear more than once. TWSE publishes one row per filing, so an amended announcement leaves both on the record. The older ones are flagged SUPERSEDED_ANNOUNCEMENT rather than dropped — they are part of the public record.
  • The OTC board has never split an ETF. Both TPEx ETF tables exist, are read, and have been empty for the whole archive. That is the market, not a bug.
  • A few securities trade with no price limit at all. Futures-based ETFs after a reverse split print 9,999.95 against 0.01; those rows are flagged NO_PRICE_LIMIT and their limit identity is skipped rather than failed.
  • This is not a dividend feed. Ordinary ex-dividend and ex-rights adjustments are a different report — see taiwan-dividend-calendar. The two together are the complete set of price discontinuities. Where an ex-rights date shares a resumption with one of these events, the row carries ex_rights_reference_price and the flag BUNDLED_EX_RIGHTS.
  • The security name is not stable. 台南-KY was F-台南 within the same event's two filings. Key a time series on stock_code.

Taiwan Market Data Suite

This Actor is part of a suite of 36 Taiwan market data APIs by chamarix — official sources only, cross-validated against independent official endpoints, clean JSON out. Code samples for the whole suite: GitHub.

Market data:

Property market:

Government & civic data: