ETF Benchmark Indices

ETF benchmark index directory with publisher, publication date, base date, base points, and adjustment cycle. Refreshed every Monday.

GET /v2/etf/indices

Parameters

NameTypeRequiredDescription
symbolstringNoIndex code, e.g. 000300.SH
pub_datestringNoPublication date, YYYYMMDD
base_datestringNoBase date, YYYYMMDD

Response Fields

FieldTypeDescription
symbolstringIndex code
indx_namestringFull index name
indx_csnamestringShort index name
pub_party_namestringIndex publisher
pub_datestringPublication date, YYYYMMDD
base_datestringBase date, YYYYMMDD
bpnumberBase points
adj_circlestringConstituent adjustment cycle

API Example

cURL
curl -H "X-API-Key: YOUR_KEY" \
  "https://asharehub.com/v2/etf/indices?symbol=000300.SH"
Python SDK
from asharehub import AShareHub

client = AShareHub(api_key="YOUR_KEY")
df = client.etf_indices(symbol="000300.SH")
print(df.head())

Sample Data

returns a pandas.DataFrame
symbolindx_nameindx_csnamepub_party_namepub_datebase_datebpadj_circle
000300.SH沪深300指数沪深300中证指数有限公司、上海证券交易所20050408200412311000半年
000852.SH中证1000指数中证1000中证指数有限公司20141017200412311000半年
000905.SH中证小盘500指数中证500中证指数有限公司20070115200412311000半年

China ETF index mapping and AUM data workflow

For ETFs listed in Shanghai or Shenzhen, combine the ETF directory with daily ETF shares and assets. Join both responses on the ETF's symbol. The directory's index_symbol identifies its tracked index. To retrieve the index publisher, base date, or other benchmark metadata, pass that value as symbol to etf_indices() on this page.

This example requests asset-size records for 510300.SH from July 30 through August 3, 2026. total_size is reported in CNY 10,000; multiply by 10,000 to calculate aum_cny in yuan. total_share is measured in 10,000 fund units and is not AUM.

Python SDK
import pandas as pd
from asharehub import AShareHub

with AShareHub(api_key="YOUR_KEY") as client:
    reference = client.etf_basic(symbol="510300.SH")
    daily = client.etf_share_size(
        symbol="510300.SH",
        start_date="20260730",
        end_date="20260803",
    )

if reference.empty or daily.empty:
    print("No ETF reference or size records for this request.")
else:
    mapping = reference[["symbol", "index_symbol", "index_name"]]
    result = daily.merge(
        mapping, on="symbol", how="left", validate="many_to_one"
    ).sort_values(["symbol", "trade_date"])
    result["aum_cny"] = pd.to_numeric(result["total_size"]) * 10000
    columns = [
        "symbol", "index_symbol", "trade_date", "total_size", "aum_cny"
    ]
    print(result[columns].to_string(index=False))

Preserve missing asset sizes or index mappings as missing. The directory is a current reference: joining it to past asset records does not prove that the ETF tracked the same index on every historical date. Historical benchmark changes require effective-date records. Align asset observations by trade_date before comparing funds.