Building an AI agent? Start with /llms.txt for the full site index.
Financials & Growth
Quarterly income statements for listed companies, sourced from MOPS — revenue down to operating and net income, with per-share earnings.
GET /v2/datasets/income-statementincome-statement returns one row per company per fiscal period from the official MOPS financial-statement filings. Each row carries a source role and lineage naming the exact MOPS form, so a figure can be audited back to the filing rather than taken on trust.
| Field | Type | Description |
|---|---|---|
symbol | string | Ticker. |
period | string | Fiscal period (e.g. 2026-Q1). |
revenue | number | Net revenue (TWD thousands). |
operating_income | number | Operating income (TWD thousands). |
net_income | number | Net income attributable to owners (TWD thousands). |
eps | number | Basic earnings per share (TWD). |
source_role | string | Canonical source role (official_mops_income_statement). |
| Rows | 90,713 |
| Window | 2013-03-31 – 2026-03-31 |
| Grade | Verified |
A real response from this endpoint. Rows are returned under "rows", and provenance is carried in the shape shown below — it is not identical across datasets, so read this page's rather than assuming another's.
{ "dataset": "income_statement", "rows": [ { "fiscal_year": 2026, "fiscal_quarter": 1, "period_type": "quarterly", "period_end_date": "2026-03-31", "report_date": null, "source": "mops_official", "revenue": 1134103440, "gross_profit": 751295421, "operating_income": 658966142, "pretax_income": 687799687, "net_income": 572801304, "eps": 22.08, "updated_at": "2026-06-04T06:44:59.737553", "symbol": "2330", "fiscal_period": "2026-Q1", "frequency": "quarterly", "fundamentals_context": { "generated_at": "2026-07-20T18:31:56Z", "ticker": "2330", "period": "2026Q1", "period_type": "quarterly", "statement_family": "income_statement", "metric_values": { "period_end_date": "2026-03-31", "report_date": null, "source": "mops_official", "revenue": 1134103440, "gross_profit": 751295421, "operating_income": 658966142, "pretax_income": 687799687, "net_income": 572801304, "eps": 22.08, "updated_at": "2026-06-04T06:44:59.737553", "symbol": "2330", "fiscal_period": "2026-Q1", "frequency": "quarterly" }, "source_lineage": { "provider": "mops_official", "source_role": "official_mops_income_statement", "source_table": "fundamental_income_statements", "ingestion_run_id": null, "transformation_version": "fundamentals_ai_context_v1" }, "data_gaps": [], "restatement_warning": { "has_restatement": false, "reason": null, "previous_version_ref": null }, "not_investment_advice": true, "coverage_window": { "min_period": null, "max_period": null, "coverage_confidence": "medium", "row_count": 0 }, "safe_usage_notes": [ "not_investment_advice", "official_public_first_policy", "period_semantics_explicit" ], "available_tools_or_endpoints": [ { "name": "income_statement", "path": "/v2/datasets/income-statement" }, { "name": "income_statement", "path": "/v2/datasets/financials" } ] } }, { "fiscal_year": 2025, "fiscal_quarter": 4, "period_type": "quarterly", "period_end_date": "2025-12-31", "report_date": null, "source": "mops_official", "revenue": 3809054272, "gross_profit": 2281293979, "operating_income": 1936091677, "pretax_income": 2041662840, "net_income": 1715396780, "eps": 66.26, "updated_at": "2026-06-04T06:44:59.737553", "symbol": "2330", "fiscal_period": "2025-Q4", "frequency": "quarterly", "fundamentals_context": { "generated_at": "2026-07-20T18:31:56Z", "ticker": "2330", "period": "2025Q4", "period_type": "quarterly", "statement_family": "income_statement", "metric_values": { "period_end_date": "2025-12-31", "report_date": null, "source": "mops_official", "revenue": 3809054272, "gross_profit": 2281293979, "operating_income": 1936091677, "pretax_income": 2041662840, "net_income": 1715396780, "eps": 66.26, "updated_at": "2026-06-04T06:44:59.737553", "symbol": "2330", "fiscal_period": "2025-Q4", "frequency": "quarterly" }, "source_lineage": { "provider": "mops_official", "source_role": "official_mops_income_statement", "source_table": "fundamental_income_statements", "ingestion_run_id": null, "transformation_version": "fundamentals_ai_context_v1" }, "data_gaps": [], "restatement_warning": { "has_restatement": false, "reason": null, "previous_version_ref": null }, "not_investment_advice": true, "coverage_window": { "min_period": null, "max_period": null, "coverage_confidence": "medium", "row_count": 0 }, "safe_usage_notes": [ "not_investment_advice", "official_public_first_policy", "period_semantics_explicit" ], "available_tools_or_endpoints": [ { "name": "income_statement", "path": "/v2/datasets/income-statement" }, { "name": "income_statement", "path": "/v2/datasets/financials" } ] } } ], "count": 50, "status": "ok", "data_as_of": null, "pit": false, "unit": { "currency": "TWD", "scale": "per_field", "fields": { "revenue": { "currency": "TWD", "scale": "thousand_twd", "scale_multiplier": 1000, "unit_label": "<Chinese value - see the zh page>", "verified": true }, "gross_profit": { "currency": "TWD", "scale": "thousand_twd", "scale_multiplier": 1000, "unit_label": "<Chinese value - see the zh page>", "verified": true }, "operating_income": { "currency": "TWD", "scale": "thousand_twd", "scale_multiplier": 1000, "unit_label": "<Chinese value - see the zh page>", "verified": true }, "pretax_income": { "currency": "TWD", "scale": "thousand_twd", "scale_multiplier": 1000, "unit_label": "<Chinese value - see the zh page>", "verified": true }, "net_income": { "currency": "TWD", "scale": "thousand_twd", "scale_multiplier": 1000, "unit_label": "<Chinese value - see the zh page>", "verified": true }, "eps": { "currency": "TWD", "scale": "twd_per_share", "scale_multiplier": 1, "unit_label": "<Chinese value - see the zh page>", "verified": true } }, "unverified_fields": [], "source_of_truth": "official_mops_statement", "note": "<Chinese value - see the zh page>" }}Captured from the live API on 2026-07-20.
Chinese data values are shown as a marker here so this page stays in English; the /zh page shows them verbatim.
curl "https://api.twmarketdata.com/v2/datasets/income-statement?symbol=2330&start_date=2026-06-01&end_date=2026-07-15&limit=5" \ -H "X-API-Key: sk_live_..."| Parameter | Required | Type | Description |
|---|---|---|---|
symbol | Yes | string | Ticker, e.g. 2330. |
start_date | No | string (YYYY-MM-DD) | Start of the query range. |
end_date | No | string (YYYY-MM-DD) | End of the query range. |
limit | No | integer | Maximum rows to return. |
A first call:
import requests resp = requests.get( "https://api.twmarketdata.com/v2/datasets/income-statement", params={"symbol": "2330", "limit": "5"}, headers={"X-API-Key": "sk_live_..."},)resp.raise_for_status()print(resp.json()["rows"])With a date-range filter:
import requests # The full verified example — the same call with every supported filter set.resp = requests.get( "https://api.twmarketdata.com/v2/datasets/income-statement", params={"symbol": "2330", "start_date": "2026-06-01", "end_date": "2026-07-15", "limit": "5"}, headers={"X-API-Key": "sk_live_..."},)resp.raise_for_status()for row in resp.json()["rows"]: print(row)This endpoint is GET /v2/datasets/income-statement. The full machine-readable schema (parameters, security, response envelope) lives in the OpenAPI spec.