Skip to content

ETF Screener ​

POST /api/v1.0/quote/etf-screen

ETF-only screener. Filter, sort and page by ETF FieldIDs (fees, leverage, style box, holdings, tracking error). Use this endpoint to screen ETFs. items[].values[] keep integers scaled according to each indicator.

Request ​

ParameterTypeInRequiredDescription
marketstringbodyyesETF market: US, HK, JP, AU, SG, CA, MY, or CN.
screen_groupsobject[]bodynoFilter groups. Each item is {field_id, intervals?, choices?, sub_groups?}; multiple groups are combined with AND.
sortsobject[]bodynoSort rules. Each item is {sort_field_id, sort_flag}; 0 ascending and 1 descending. Defaults to AUM descending.
need_fieldsobject[]bodynoFactors to return, each {field_id}. Defaults to code (2), price (5), and AUM (10).
offsetintbodynoStart offset, default 0, minimum 0.
limitintbodynoPage size, default 20, maximum 500.

Example ​

bash
curl -X POST 'https://webapi.futunn.com/api/v1.0/quote/etf-screen' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <AccessToken>' \
  -d '{"market":"US","sorts":[{"sort_field_id":10,"sort_flag":1}],"need_fields":[{"field_id":2},{"field_id":5},{"field_id":10}],"offset":0,"limit":20}' | jq

Response ​

FieldTypeDescription
data.itemsobject[]Matching ETF list
data.totalintegerTotal matching ETFs
data.items[].codestringETF symbol
data.items[].namestringETF name
data.items[].valuesobject[]Requested factor values; ival is the integer scaled according to the indicator
data.items[].values[].field_idintegerFactor FieldID
data.items[].values[].ivalintegerNumeric value scaled according to the indicator
data.items[].values[].textstringText value
data.items[].values[].content_typeintegerContent type: 1=percent 2=number 3=plain 4=text 5=holding list
pagination.completedbooleanTrue when this is the last page

Errors ​

ret_codeerror.codeDescription
0—Success
-3invalid_parameterMissing or invalid parameter
-7invalid_symbolUnknown symbol
-8unsupportedMarket or product is not supported
-9permission_deniedMissing permission
-10no_dataNo data
-11rate_limitedToo many requests

Sample ​

json
{
  "ret_code": 0,
  "ret_msg": "success",
  "data": {
    "total": 1,
    "items": [
      {
        "code": "US.SPY",
        "name": "SPDR S&P 500 ETF",
        "values": [
          {"field_id": 2, "text": "US.SPY"},
          {"field_id": 5, "ival": 500000000},
          {"field_id": 10, "ival": 500000000000}
        ]
      }
    ]
  },
  "pagination": {
    "completed": true
  }
}