Answer

This answer is currently available in Chinese only; an English version is coming soon.

t187ap05_L 月營收端點怎麼用?TWSE OpenAPI 抓台股月營收

t187ap05_L 是 TWSE OpenAPI 的上市公司每月營業收入端點,免金鑰直接 GET 就回傳 JSON,內含當月營收、上月營收、去年同月營收與增減百分比。它只回最新一期,歷史需要自己每月抓取保存。

這個端點是什麼

月營收是台股特有的高頻基本面訊號——上市櫃公司每月都要公告營業收入,這在美股沒有對應物。t187ap05_L 就是上市公司這份申報的開放資料版本。2026-07-31 實測回傳約一千多筆,涵蓋當期全部上市公司,每筆包含公司代號、公司名稱、產業別、當月營收、上月營收、去年當月營收,以及對應的增減百分比與累計營收。

curl "https://openapi.twse.com.tw/v1/opendata/t187ap05_L"

官方原始用法

免金鑰、免標頭,直接 GET。欄位名稱是中文,例如「營業收入-當月營收」「營業收入-去年同月增減(%)」「累計營業收入-當月累計營收」。金額單位為新台幣千元,數值以字串回傳需自行轉型。「出表日期」與「資料年月」皆為民國年格式(資料年月 11506 表示民國 115 年 6 月,即 2026 年 6 月)。

import requests

url = "https://openapi.twse.com.tw/v1/opendata/t187ap05_L"
rows = requests.get(url, timeout=30).json()

row = next(r for r in rows if r["公司代號"] == "2330")
print(row["資料年月"], row["營業收入-當月營收"], row["營業收入-去年同月增減(%)"])

它的限制

  • 只有最新一期:端點回傳當期全市場快照,沒有指定年月的查詢參數。實測帶入 ?date= 參數回傳內容不變,歷史要自己每月抓取保存。
  • 只有上市:上櫃公司的月營收不在這個端點,需另外從 TPEx 取得,且欄位命名不同。
  • 沒有公告時點:回應中的「出表日期」是資料表產生日,不等於各公司實際公告的時點。做 point-in-time 回測時,用它當作可知悉時點會有偏差。
  • 欄位為中文且單位需確認:金額單位為千元,跨資料源合併時容易與「元」混用,需自行統一。
  • 備註欄位為自由文字:合併或更名等特殊情況以文字說明,難以程式化解析。

需要歷史與 point-in-time 時的做法

營收動能策略最需要的兩件事,恰好是這個端點沒有的:多年歷史,以及「這筆資料是什麼時候可以被知道的」。TW Market Data 的月營收自 2010-01 起、涵蓋 2,096 檔,含 YoY/MoM,並且每筆帶有知悉時點,可做 as-of 查詢對齊回測時間軸,不偷看未來。

curl "https://api.twmarketdata.com/v2/datasets/monthly-revenue?symbol=2330&limit=12" \
  -H "X-API-Key: $TWMD_API_KEY"

Related