Taiwan Gold Spot — 櫃買黃金現貨行情與造市商 API avatar

Taiwan Gold Spot — 櫃買黃金現貨行情與造市商 API

Pricing

from $0.50 / 1,000 results

Go to Apify Store
Taiwan Gold Spot — 櫃買黃金現貨行情與造市商 API

Taiwan Gold Spot — 櫃買黃金現貨行情與造市商 API

The Taipei Exchange's physical gold board back to 2015: daily VWAP, traded high/low, market-maker closing quotes and spread, every securities firm's turnover and every print by firm and price. Quoted in NT$ per 台錢, per gram and per troy ounce, with the 2025 台兩→台錢 unit change handled.

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

9 hours ago

Last modified

Share

Taiwan Gold Spot (櫃買黃金現貨行情) API

Daily prices, market-maker quotes and the full participant flow for the Taipei Exchange's physical gold board — the only regulated spot gold market in Taiwan — as structured JSON, back to 2015.

This is a real exchange-traded market that almost nobody has ever pulled data from. Gold in Taiwan is usually bought as a bank passbook product at whatever price the bank posts; the TPEx gold board is the venue where that price is actually discovered, with two market makers quoting and 200-odd securities-firm branches dealing against them. The exchange publishes seven separate reports about it every session and joins none of them. This Actor returns all seven, reconciled against each other, with the weights converted to something the rest of the world can read.

Output

One dataset, seven record types, told apart by record_type. A real daily bar:

{
"record_type": "daily_quote",
"date": "2026-09-24",
"product_code": "AU9901",
"product_name": "臺銀金",
"average_price": 16508.2,
"average_price_per_gram": 4402.1867,
"average_price_per_troy_ounce": 136926.8419,
"high": 16559.0,
"low": 16422.0,
"last_best_bid": 16427.0,
"last_best_ask": 16485.0,
"closing_spread": 58.0,
"closing_quote": 16485.0,
"closing_quote_equals_last_best_ask": true,
"change": -112.9,
"change_percent": -0.68,
"previous_average_price": 16621.1,
"volume_as_published": 1473.0,
"volume_unit_as_published": "qian",
"volume_qian": 1473.0,
"volume_grams": 5523.75,
"turnover": 24316570,
"trades": 518,
"average_price_rebuilt": 16508.1942,
"average_price_residual_percent": 3.5e-05,
"average_price_matches": true,
"quality_flags": []
}

And the market makers' closing quote, which exists even on a session with no trades at all:

{
"record_type": "closing_mid",
"date": "2026-09-24",
"product_code": "AU9901",
"highest_bid": 16427.0,
"lowest_ask": 16485.0,
"closing_mid": 16456.0,
"closing_mid_per_gram": 4388.2667,
"spread": 58.0,
"spread_percent": 0.352455,
"closing_mid_rebuilt": 16456.0,
"closing_mid_matches": true
}

The other five are market_summary (one row a session: totals, advancing/declining, market-maker count), branch_turnover (every dealing branch, both sides of the book), broker_turnover (securities firms aggregated, with how many branches dealt), market_maker_turnover (the two bullion banks) and dealer_trade — every individual print, by product, securities firm and price.

Units, stated once, because this is where the data bites

Taiwanese gold is weighed in Taiwanese units and getting this wrong scales everything by ten:

Meaning
台錢 (qian)The trading unit since 2025-10-01. Exactly 3.75 g.
台兩 (tael)The trading unit before that. Exactly 10 台錢 = 37.5 g.
volume_qian, volume_gramsNormalised across both eras. Sum these, not the published column.
volume_as_published + volume_unit_as_publishedThe exchange's own figure and its own unit, kept verbatim.
All pricesNT$ per 台錢, in both eras. The price unit never changed — only the volume unit did.
*_per_gram, *_per_troy_ounceDerived, so the number can sit next to a London or COMEX quote.

The unit change is the single biggest trap in this dataset. On 2025-09-23 the board's volume column was in 台兩; on 2025-10-01 it was in 台錢, and the board was shut in between. A series that concatenates the two is wrong by a factor of ten across the join, and it is wrong in a way that still looks like gold volume.

This Actor does not hard-code that date. The exchange names the unit inside the column header — 成交量(台兩) versus 成交量(台錢) — so the unit is read from the payload itself, every session. A header that names no unit at all is refused rather than assumed, because the next change would otherwise pass silently.

Verification

Seven reports describing one session is seven chances to check the parse, and the checks are the point of this Actor. None of the cross-report ones need a tolerance — they are the same integers printed in different tables, so they either agree exactly or a column was read wrong, and a disagreement fails the run instead of publishing a row.

  • The daily bar's totals equal the session summary's totals. Turnover, volume and trade count, from two independently published reports.
  • Every participant is on one side of the book. The branch turnover table includes the market makers, so its buy total and its sell total must each equal the market's turnover.
  • The securities firms and the market makers are mirror images. Firms buy what the makers sell. broker_turnover buy total equals market_maker_turnover sell total, and the other way round — which is also what makes the two bullion banks' role visible rather than assumed.
  • Every print adds up to the day. The sum of all buy quantities in the per-trade report equals the sum of all sell quantities, and both equal the market's volume, to the 台錢.
  • The daily high and low are the highest and lowest prints. Checked against the per-trade report's own minimum and maximum, to the cent. This is the strongest column-alignment check here because it ties the summary bar to the individual trades behind it.
  • Buy plus sell equals turnover on every row of all three turnover tables.
  • The average price is rebuilt from turnover over volume, and the closing average from the midpoint of the two quotes printed beside it — which is precisely how the exchange's own footnote defines 收市均價.

The two rebuilt figures are the ones that need a stated tolerance, and both are derived rather than picked:

  • The closing average is compared within half of the last digit the report printed — 0.005 against today's two-decimal reports, 0.05 against the one-decimal reports of 2016. The midpoint itself is exact arithmetic; all the slack is in the rounding of the number it is checked against.
  • The average price is checked at 0.5%, deliberately loose, because its job is to catch a wrong weight unit rather than to audit the exchange's rounding. A correct parse lands within 0.001%; a 台兩/台錢 mix-up lands 900% out. Tightening this to the observed residual would fail on ordinary sessions as soon as the exchange's per-trade rounding moved, without catching anything a 0.5% band misses.

Independently of the arithmetic, the parse was checked against a second publication path: the exchange also ships these reports as Big5 CSV downloads, and the JSON columns this Actor reads match those files header for header and value for value.

Two semantics the column names get wrong

Both were found by cross-checking, and both would silently mislead:

  • 最後 is not the last traded price. In every session sampled it equals the closing best ask, to the cent. It is published here as closing_quote, with closing_quote_equals_last_best_ask recording the fact on each row rather than asserting it. If you want the session's value use average_price; if you want an actual last print, the dealer_trade rows have them.
  • The closing bid can sit below the day's traded low. On 2026-09-22 AU9901 printed no lower than 16,526 yet closed bid at 16,493. That is not an error — the market makers moved their quote down after the last trade. Any validation that checks quotes against a traded range will fail a correct parse, which is why this Actor checks only the average against the high and low.

What you can ask for

  • recordTypes — any of the seven. Each is one request per session, so the cost is feeds × weekdays. The default is the three price feeds.
  • startDate / endDate — the session range. Weekends are skipped automatically; public holidays answer empty and are counted rather than treated as failures.
  • productCodes — AU9901 or AU9902.
  • maxRequests — a cap, because all seven feeds over a decade runs to tens of thousands of calls.

Limitations, stated plainly

  • Two products, two market makers, one maker each. AU9901 is made by Bank of Taiwan, AU9902 by First Bank, and the exchange's own 平均每檔黃金之造市商家數 has been 1.00 throughout. There is no competing quote in either name, and the spread should be read with that in mind.
  • This is a thin market. A session is hundreds of prints, not thousands, and the board does go a day without trading. An empty session is not an error; an entire empty range is, and fails the run.
  • The 主要機構法人 (major institutional investors) reports are empty. Both the daily and weekly versions return no rows on every date sampled across the whole archive, so they are not included. An empty table is not published as if it were data.
  • The weekly, monthly and yearly reports are not included. They are aggregations of the daily series this Actor already returns, and can be computed from it.
  • The 當日行情表 snapshot ignores its own date parameter. gold/latest accepts date= and returns today's figures regardless — a request for 2020 comes back with this morning's prices, looking entirely plausible. This Actor does not use it; the dated reports are what it reads.
  • Prices before 2015-01-02 are not available, and the closing-quote report starts 2015-11-30, which is what its own footnote says.
  • market_summary behaves differently from every other feed on a quiet day. On a weekday the board was open with no print at all, it answers normally with zeros while the other six answer 無資料. That row is kept, flagged had_trading: false — it is the only place the difference between "closed" and "open but nobody traded" survives.

Source

Taipei Exchange (證券櫃檯買賣中心), seven official reports on the gold spot board: gold/des410 (daily bars), gold/dss411 (closing quotes), gold/highlight (session summary), gold/dss401, gold/dss402 and gold/dss403 (branch, firm and market-maker turnover) and gold/dss404 (individual prints).

Taiwan Market Data Suite

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