ETF DATA API

China ETF Data API

Query ETF price performance, NAV changes, fund size, tracking relationships and portfolio holdings for quantitative research, portfolio analysis and AI workflows.

PRICE

Prices & adjustments

Daily prices, volume and adjustment factors for returns and historical backtests.

NAV

NAV & premium

Unit, accumulated and adjusted NAV for price-to-NAV analysis.

SCALE

Shares & fund size

Shares outstanding, fund size and NAV per unit for flow and scale tracking.

PORTFOLIO

Indices & holdings

Tracking indices and portfolio securities for product exposure analysis.

PYTHON SDK · MCP

Move directly into research

Use consistent ETF symbols and date parameters to retrieve a pandas DataFrame, or let an AI query the same data through MCP.

import quantcoda as qc

qc.set_token("qc_live_your_key")
df = qc.etf_daily(
    symbol="510300.SH",
    start_date="20260101"
)
INDEX MAPPING · FUND SIZE

China ETF index mapping and AUM data

Start with ETF reference data: symbol identifies the ETF, while index_code and index_name identify its tracked index. The separate tracking-indices endpoint describes the index itself; it is not a holdings list.

For fund size, query shares outstanding and fund size for the same ETF. This endpoint requires PRO or above. total_size is in 10,000 CNY, and total_share is in 10,000 fund units. Multiply by 10,000 to convert to CNY or units; neither field is trading turnover.

Field reference for this workflow

ETF reference data

symbol
Security code (with exchange suffix)
csname
ETF short name (Chinese)
extname
ETF extended short name
cname
Fund full name (Chinese)
index_code
Index code (with suffix)
index_name
Tracked index name
setup_date
Fund inception date YYYYMMDD
list_date
Listing date YYYYMMDD
list_status
Listing status (L/D/P)
exchange
Exchange (SSE/SZSE)
mgr_name
Fund manager
custod_name
Fund custodian
mgt_fee
Management fee rate
etf_type
ETF type

ETF shares outstanding & fund size

trade_date
Trading date YYYYMMDD
symbol
Security code (with exchange suffix)
etf_name
ETF name
total_share
Total fund shares (10k units)
total_size
Fund size (10k CNY)
nav
NAV per unit
close
Close price
exchange
Exchange (SSE/SZSE)

Python: join mapping and a dated fund-size snapshot

import os
import quantcoda as qc

qc.set_token(os.environ["QUANTCODA_TOKEN"])
mapping = qc.basic(symbol="510300.SH")
sizes = qc.share_size(symbol="510300.SH", trade_date="20260105")

if mapping.empty or sizes.empty:
    print("No matching data; check the symbol, date and coverage.")
else:
    result = sizes[["symbol", "trade_date", "total_size", "total_share"]].merge(
        mapping[["symbol", "index_code", "index_name"]],
        on="symbol", how="left", validate="many_to_one"
    )
    result["aum_cny"] = result["total_size"] * 10000
    result["fund_units"] = result["total_share"] * 10000
    print(result.to_string(index=False))

trade_date is the fund-size observation date (YYYYMMDD), not the download time. The date above is an example, not a guarantee of an available row. Missing values remain missing; a missing row is not zero AUM. If the mapping is not unique, the example raises a merge error so you can inspect it instead of silently duplicating fund size.

The reference mapping has no historical effective-date filter. Joining it to an older size observation does not establish a point-in-time mapping. Publication time, complete historical coverage and revision timing are not guaranteed here; do not assume today's reference data was known on a past backtest date. See data methodology before using the result in a backtest.

Use the same methods with the Python SDK or discover their tools on the hosted MCP server. For statement-based research, see the China stock financial data API; check API pricing and request limits before running a larger universe.

AVAILABLE DATA

ETF data services

START WITH FREE

Prices and adjustment factors are free

Create an API key to query ETF reference data, daily prices and adjustment factors.

Create a free account