Data quality

Data Quality — Coverage, Update Timing, and What We Do Not Have

Every figure below is measured from the database, not written by hand. Where a number has not been verified, this page says so instead of estimating.

These coverage figures are a snapshot measured on 2026-08-02, not a live read. For whether the API is up right now, see the system status page.

How far back the data goes

The three datasets whose coverage is verified end to end in the database. Other datasets state their own window on their docs page — this table only lists what has actually been measured.

DatasetRowsInstrumentsFromDelisted kept
TWSE daily prices5,241,0891,6872004Yes
TPEx daily prices3,938,13011,7601994Yes
Monthly revenue333,0362,0962010

Companies that stopped trading are still in here

Most free sources drop a company's price history once it delists. A backtest run on what is left only ever sees the survivors, so its returns come out too high. That is survivorship bias, and it is silent.

311

stopped-trading names with full price history

264

carry an officially recorded delisting date

47

have no official delisting date on record yet

The third figure is published for the same reason as the first two: not every stopped-trading name has an official date on record, and rounding that away would be the kind of tidying this page argues against.

A quiet day is not always a fault

Some sources do not publish daily. Judging those datasets by a daily clock would mark them stale most of the week, so they are judged by their own cadence — and it is written down here rather than left as an internal rule.

DatasetCadenceWhy
competitor-fxirregularFX is not published on a fixed daily schedule; a gap is not staleness.
shareholding-concentrationweeklyTDCC publishes weekly. Judging it daily would flag it stale six days out of seven.

What we do not serve, and why

Anyone can publish a coverage table. This is the other half: datasets deliberately held back from the catalog. Some have no data yet, one is frozen, and two are metadata-only because we do not have the right to redistribute the full text.

DatasetStatusReason
bond_yield_curveOn the roadmapGovernment bond yield curve (TPEx, OGDL v1.0, commercial use permitted). No recorder has been built yet, so there is no data.
taifex_atm_ivTable exists, no data yetThe table exists but is still empty; it fills once the upstream taifex_options data lands.
regime_serveFrozenFrozen. Not offered externally.
announcements_fulltextMetadata onlyWe do not serve the full text of announcements (copyright); only structured metadata is offered.
filings_fulltextMetadata onlyWe do not serve the full text of filings (copyright); only structured metadata is offered.

Every row says where it came from

Provenance is not a page on this site, it is a field in the response. A row you cannot trace is a row you cannot audit.

  • source_role — which official release the value came from, per row.
  • data_gaps — holes are reported in the response rather than filled in. An interpolated value that looks like a measurement is worse than an admitted gap.
  • knowledge_date — when the figure became knowable, which is what makes a point-in-time backtest possible.

Corrections we have had to make are listed on the errata page, and the sourcing rules are on the methodology page.

Related articles