Taiwan Stock Daily Quotes — 台股行情 OHLCV API
Pricing
from $0.50 / 1,000 results
Taiwan Stock Daily Quotes — 台股行情 OHLCV API
Daily OHLCV for every security on the Taiwan Stock Exchange and Taipei Exchange, with P/E, price-to-book and dividend yield joined on. TWSE reaches back to 2004-02-11, TPEX to 2007-07-02. Ex-rights sessions are flagged, not silently mispriced.
Pricing
from $0.50 / 1,000 results
Rating
0.0
(0)
Developer
chris
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 hours ago
Last modified
Categories
Share
Taiwan Stock Daily Quotes (台股每日行情) API
Get structured JSON access to daily OHLCV for every security in Taiwan — around 1,380 on the TWSE and 1,010 on the TPEX in a single session, each with open, high, low, close, change, volume, turnover and trade count, plus P/E, price-to-book and dividend yield joined on from the exchanges' own valuation reports. TWSE sessions go back to 2004-02-11, TPEX to 2007-07-02.
This is the price series everything else keys off. Whatever you are doing with Taiwan market data — margin balances, institutional flow, shareholding dispersion, revenue surprises — it has to be aligned to a price, and the price has to be right on the two days a year where it is easy to get wrong: the ex-dividend days. Each exchange marks those differently, one of them does not mark them at all, and none of it is documented. This Actor resolves all three conventions into one field you can trust.
Why this data matters
- Ex-rights sessions are flagged, not silently mispriced. On 2026-06-11 TSMC closed at 2,250.00 against a previous close of 2,255.00 — but the exchange printed the change as
X0.00, because the stock went ex-dividend that morning. TheXmeans not comparable to the previous close; the0.00beside it carries no information at all. Read that column as a number and you have recorded TSMC as unchanged on a day it moved. Here it comes back aschange: null,change_basis: "PRICE_NOT_COMPARABLE". - TPEX's per-security report has no marker at all, and prints a change measured against the ex-rights reference price. 中美晶 5483 on 2026-07-23: previous close 234.00, close 212.50, printed change −19.00. Neither number is wrong; they are measured from different bases. The Actor detects the gap, sets
change_basis: "EX_RIGHTS_REFERENCE", and gives you the reference price it was measured from. Verified against the official dividend: 5483's two 2026 ex-rights sessions imply deductions of 1.00 and 2.50, summing to exactly the 3.50 per share TPEX publishes for that dividend year. - Every row carries its own identity checks.
ohlc_consistentproves low ≤ open, close ≤ high.average_price_in_rangeputs turnover ÷ volume inside the day's band.changeis checked against the previous session's close wherever the run has seen it — across 465 TWSE sessions in 2026 for 2330, 1101 and 2317, that identity held to the cent, every time, and the days it did not apply were exactly the four ex-rights days the official 除權息計算結果 report lists. average_priceis a VWAP neither exchange publishes. Turnover ÷ volume, per security per session, straight from two printed numbers.- Valuation is joined on by header, never by position. TWSE's P/E report changed shape in the mid-2010s and swapped the P/E and dividend yield columns while doing it. The 2010 layout is
日期 / 本益比 / 殖利率 / 股價淨值比; today's is日期 / 殖利率 / 股利年度 / 本益比 / 股價淨值比 / 財報年季. Parse by position and every historical P/E you pull is actually a yield. Every table here is read by column name. - Two official reports per session, and the Actor reads both. Each exchange publishes the same session twice — once per security for a whole month, once per day for the whole board.
crossCheckreads the second copy and compares it column by column. On TWSE the two agree to the last digit. On TPEX they do not, and the Actor says so rather than picking one silently (see below). - Nobody serves this in English. The sources are four Chinese report endpoints per exchange, in Republic-of-China dates, with three different volume units between them and a host that resets the connection if you ask too quickly.
Output
One record per security per trading session. TSMC on an ordinary day:
{"date": "2026-08-14","market": "TWSE","code": "2330","name": "台積電","open": 2435.0,"high": 2440.0,"low": 2395.0,"close": 2395.0,"change": -40.0,"change_pct": -1.6427,"previous_reference_price": 2435.0,"previous_close": 2435.0,"change_basis": "PREVIOUS_CLOSE","ex_rights_marker": null,"volume_shares": 21162682,"turnover_value": 51159731253,"transactions": 105889,"average_price": 2417.450267,"last_bid_price": null,"last_ask_price": null,"issued_shares": null,"next_limit_up": null,"next_limit_down": null,"source_report": "TWSE STOCK_DAY","ohlc_consistent": true,"average_price_in_range": true,"pe_ratio": 27.76,"pb_ratio": 9.66,"dividend_yield_pct": 0.92,"dividend_per_share": null,"dividend_year_roc": 114,"fiscal_period": "115/2","dividend_yield_matches_dividend": null}
last_bid_price, last_ask_price, issued_shares and the two limit prices are null above because this row came from the per-security report, which does not carry them. Run without stockCodes and the whole-board report fills them in.
And an ex-rights session on the OTC board, where the exchange gives you no marker:
{"date": "2026-07-23","market": "TPEX","code": "5483","name": "中美晶","close": 212.5,"change": -19.0,"previous_reference_price": 231.5,"previous_close": 234.0,"change_basis": "EX_RIGHTS_REFERENCE","ex_rights_marker": "IMPLIED","source_report": "TPEX tradingStock"}
Input
| Field | What it does |
|---|---|
stockCodes | Ticker codes such as 2330, 0050, 5483. Empty means the whole board. |
startDate / endDate | YYYY-MM-DD. Empty means the latest session. |
markets | TWSE, TPEX, or both. |
includeValuation | Join P/E, price-to-book and dividend yield. Doubles the request count. |
onlyTraded | Drop securities that did not trade. |
crossCheck | Read one session from the second official report and compare. |
fetchStrategy | AUTO (recommended), BY_STOCK or BY_DATE. |
Naming stock codes is what makes long histories cheap. The per-security reports return a whole month per request, so ten years of TSMC is 120 requests; the whole-board reports return one session per request, so ten years of everything is 3,650. AUTO picks the right one for you: per-security when you name codes, whole-board when you do not.
Archive floors, each rejected up front rather than returning an empty run:
| TWSE | TPEX | |
|---|---|---|
Whole board (BY_DATE) | 2004-02-11 | 2007-07-02 |
Per security (BY_STOCK) | 2010-01-04 | 2003-04-01 |
Per-run ceilings: 90 calendar days for a whole-board run (a session is ~2,400 records across both markets), 600 report requests for a per-security run.
Things this dataset is honest about
TPEX's two reports disagree on volume. Same exchange, same session, same security, two official endpoints:
| 5483 中美晶, 2026-08-14 | Volume | Turnover |
|---|---|---|
| 個股日成交資訊 (per security) | 25,996,000 shares | NT$4,884,791,000 |
| 每日收盤行情 (whole board) | 25,504,000 shares | NT$4,792,524,000 |
Open, high, low and close are identical between the two; only volume and turnover differ, with the per-security figure larger by 0–6%. The gap scales with the share price, which points at intraday odd-lot trading being folded into one report and not the other — but TPEX documents neither report's coverage, and the difference is not explained by the after-hours fixed-price feed (tpex_off_market), the after-hours odd-lot feed (tpex_odd_stock) or the block-trade feed, all of which were checked and are orders of magnitude too small. So the Actor does not pick a winner: source_report on every row says which report it came from, and with crossCheck on, the run log states the gap in shares. TWSE's two reports have no such problem — they agree to the last digit.
Turnover ÷ volume sometimes lands outside the day's range. That is block trading, not a parsing error. Both exchanges fold block trades into the daily totals, and a block prices against the previous close rather than the day's band. 元大金 2885 on 2026-08-25 traded 16,043,105 shares for NT$1,009,573,854, an average of 62.928832 against a 62.00–62.80 range. Take out the single 1,400,000-share pair trade at 68.60 that the official block-trade report lists for that session and the average falls to 62.386622 — back inside the band. average_price_in_range flags these so you can find them, not because they are wrong.
TPEX's published yield did not always follow from the dividend it publishes beside it. Both numbers are given as-is and dividend_yield_matches_dividend says whether they reconcile. One session a year: 24/361 rows reconcile in 2011 and 40/381 in 2013, against 380/469 in 2015, 436/514 in 2020 and 596/603 in 2026. Treat pre-2015 TPEX yields with care.
P/E is absent more often than it is present, and that is correct. The exchanges print a dash for a loss-making company and a zero for every ETF; both become null here rather than a misleading 0.0. On 2026-08-14 the TWSE quote report carried 1,378 securities, the valuation report covered 1,083 of them, and 869 of those had a P/E.
A security sits on exactly one board. Asking for 2330 with both markets selected costs one wasted request against TPEX, which answers "no data". Narrow markets if you know where your codes live.
Taiwan Market Data Suite
This Actor is part of a suite of 25 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:
- twse-institutional-trades — Daily institutional buy/sell (foreign, investment trust, dealer) per stock — TWSE listed
- tpex-institutional-trades — Daily institutional buy/sell per stock — TPEx OTC market
- taiwan-monthly-revenue — Monthly revenue of 1,900+ listed & OTC companies, MoM/YoY
- taiwan-financial-statements — Quarterly income statement, balance sheet & cash flow back to 2013
- taiwan-dividend-calendar — Ex-dividend / ex-rights dates, reference prices & payouts back to 2003
- taiwan-margin-trading — Daily margin trading & short sale balances per stock
- taiwan-sbl-short-sale-balance — Securities-lending short sale balances per stock
- taiwan-day-trading-stats — Day-trading volume, value & ratio per stock since 2014
- tdcc-shareholding-dispersion — Weekly TDCC shareholding dispersion (retail vs whale structure)
- taiwan-foreign-shareholding — Foreign ownership percentage & remaining quota per stock
- taifex-institutional-derivatives — Institutional futures & options positions (TAIFEX), incl. put/call ratio
- taifex-options-chain — Full options chain by strike & expiry, both sessions, with the exchange's own Delta, since 2001
- taiwan-warrants-daily — Daily quotes, strike, expiry & moneyness for every listed/OTC warrant since 2004
- taiwan-stock-alerts — Watch-list, disposition & short-sale suspension alerts
- taiwan-insider-share-transfers — Insider share-transfer filings (directors, officers, 10% holders) since 2002
- taiwan-director-shareholdings — Monthly director/officer shareholdings & share-pledge ratio since 1999
- taiwan-block-trades — Every block trade (鉅額交易) with price, size & basket constituents since 2005
- taiwan-shareholder-meetings — Shareholder meeting dates, book closure periods & e-voting since 2005
- taiwan-emerging-stock-quotes — Emerging (興櫃) board quotes, pre-IPO register & history since 2003
- taiwan-etf-regular-investment — Monthly regular savings plan (定期定額) rankings for stocks & ETFs since 2020
- taiwan-treasury-stock-buybacks — Every treasury-stock buyback (庫藏股) filing, plan vs execution, since 2000
Property market:
- taiwan-real-estate-transactions — Actual registered sale, presale & lease prices (實價登錄) for all 22 cities since 2012
Government & civic data:
- taiwan-legislator-monitor — Legislative Yuan bills, legislators & meetings
- taiwan-tender-monitor — Government e-procurement tenders (open calls, awards, failures)
Data source
Taiwan Stock Exchange 個股日成交資訊 (STOCK_DAY), 每日收盤行情 (MI_INDEX), 個股日本益比、殖利率及股價淨值比 (BWIBBU, BWIBBU_d); Taipei Exchange 個股日成交資訊 (tradingStock), 上櫃股票每日收盤行情 (otc), 本益比、殖利率及股價淨值比 (peQryStock, peQryDate), and the 上櫃股票每日收盤行情 open-data mirror used for independent verification. Public data, no login required.