Data methodology

Data methodology: sources, coverage and known gaps

This page sets out where the data comes from, what it actually covers, and the known gaps and limits. Every figure is measured from the database, taken from the 2026-08-02 snapshot, not a marketing estimate. Sources, coverage and gaps are listed together so they can be checked and reproduced independently.

Five principles

First-hand from official sources

Prices come from TWSE and TPEx, company filings (monthly revenue, the three financial statements, material announcements) from MOPS, and futures and options from TAIFEX. All of it is collected and parsed from official endpoints — not resold from a second-hand data vendor, and not mixed with third-party data of unclear origin. The official open data is free and authoritative in itself; what this service provides is a consistent, traceable interface over it with historical depth.

No survivorship bias: stopped-trading stocks are kept

Most price datasets drop a stock entirely once it stops trading, leaving a historical universe of surviving companies only and systematically overstating backtest returns. This database keeps full price history for 311 stopped-trading stocks, 264 of them with an officially registered delisting date. Query any delisted symbol to check it.

Every row traces back to its source

Each response carries source_role and source markers separating official raw values from derived calculations, so any column can be traced back to the endpoint it came from. That is the precondition for research that can be re-run and audited.

Gaps are marked, not filled with estimates

Where data is missing it is marked missing — not interpolated, not carried forward. A filled series raises no error; it simply makes a backtest look better than it was, in a way that is hard to spot afterwards. Keeping the gap is what stops that kind of look-ahead bias entering the result unnoticed.

A consistent interface for programs and AI agents

Every dataset shares the same response structure, with openapi.json and llms.txt for agents to discover endpoints; appending .md to any page URL returns a plain markdown version. Developers call the REST API with an API key.

Coverage, measured

Measured from the database at the 2026-08-02 snapshot. Only figures we can measure are listed.

DatasetWindowSize
TWSE listed daily pricesfrom 20045,241,089 rows / 1,687 names (incl. 311 stopped trading, 264 with an official delisting date)
TPEx OTC daily pricesfrom 19943,938,130 rows
Monthly revenue (MOPS filings)from 2010-01333,036 rows / 2,096 companies

Figures come from a measured database snapshot (2026-08-02) and move as data accumulates; every page on this site quotes that same snapshot rather than estimating its own.

Disclosure timing and point-in-time

Where monthly revenue has no precise disclosure timestamp, the statutory filing deadline is used as the knowledge date and is marked as such in the response. Financial-statement report_date — the actual disclosure date — is not yet covered row by row, so as-of queries remain subject to that limit on the statement side. Point-in-time on the price side is unaffected: price history for stopped-trading stocks is kept in full.

Check it yourself

Everything on this page can be checked. The five keyless symbols (2330, 2317, 2454, 0050, 2603) can be called directly, and the response carries source_role and coverage information. To check the delisted universe, query a delisted symbol's price history instead.

bash
curl "https://api.twmarketdata.com/v2/datasets/twse-daily-price?symbol=2330&limit=2"

Related articles