Skip to main content
GET
/
index-funds
Get ETF / index-fund holdings
curl --request GET \
  --url https://api.financialdatasets.ai/index-funds \
  --header 'X-API-KEY: <api-key>'
{
  "ticker": "<string>",
  "fund": {
    "name": "<string>",
    "cik": "<string>",
    "asset_class": "<string>",
    "as_of": "2023-12-25",
    "filing_date": "2023-12-25",
    "source": "<string>",
    "total_net_assets": 123,
    "total_holdings": 123,
    "holdings_resolved": 123,
    "returned": 123,
    "offset": 123
  },
  "holdings": [
    {
      "ticker": "<string>",
      "name": "<string>",
      "cusip": "<string>",
      "isin": "<string>",
      "weight": 123,
      "market_value": 123,
      "shares": 123,
      "asset_class": "<string>",
      "resolution_status": "<string>"
    }
  ]
}

Overview

Give us a security ticker, get the funds that hold it, each with that fund’s weight in the security. Results are sorted by weight descending, with a security header that echoes the queried ticker and the total number of funds. Use this to answer “which ETFs hold AAPL, and how much?” for exposure look-through, crowding, and flow analysis. To get started, please create an account and grab your API key at financialdatasets.ai. You will use the API key to authenticate your API requests.

The “current” definition

This endpoint returns the funds whose most recent filing holds the security. Funds that held it in an earlier filing but no longer report it are excluded. This is the strict “currently holds” view.

Matching

holding is matched against the security’s resolved ticker, so this covers equity positions. Matching bonds and foreign securities by CUSIP or ISIN is coming soon.

Find available tickers

The funds available in the API are listed by the same helper endpoint used by the by-fund query:
Tickers
import requests

# free endpoint, no API key required
url = 'https://api.financialdatasets.ai/index-funds/tickers/'
response = requests.get(url)

tickers = response.json().get('tickers')
print(f'{len(tickers)} funds available')
This endpoint is free and does not require an API key.

Filtering the Data

holding is required. By default, limit is 50 (max 1000). Use offset to page through the funds. A security that no fund currently holds returns an empty funds array (not an error).

Examples

Funds holding a security
import requests

# add your API key to the headers
headers = {
    "X-API-KEY": "your_api_key_here"
}

# set your query params
holding = 'AAPL'            # held security ticker
limit = 100                 # number of funds to return

# create the URL
url = (
    f'https://api.financialdatasets.ai/index-funds/'
    f'?holding={holding}'
    f'&limit={limit}'
)

# make API request
response = requests.get(url, headers=headers)

# parse funds from the response
funds = response.json().get('funds')

Authorizations

X-API-KEY
string
header
required

API key for authentication.

Query Parameters

ticker
string

The fund's ticker symbol (e.g., SPY). Returns that fund's holdings. Mutually exclusive with holding.

holding
string

A held security's ticker symbol (e.g., AAPL). Returns the funds whose latest filing holds it. Mutually exclusive with ticker.

as_of
string<date>

Only valid with ticker. Returns the fund composition in effect on or before this date (YYYY-MM-DD). Without it, the fund's latest filing is returned.

asset_class
enum<string>

Only valid with ticker. Filter constituents by instrument type: equity or bond. Omit for all holdings.

Available options:
equity,
bond
limit
integer
default:50

The maximum number of rows to return (default: 50, max: 1000).

Required range: x <= 1000
offset
integer
default:0

The number of rows to skip, for pagination (default: 0).

Response

Index fund holdings response. The shape depends on the query direction: ticker returns a fund header + constituents; holding returns a security header + funds.

Forward response (?ticker=...): a fund header plus its constituents, sorted by weight descending.

ticker
string

The fund ticker echoed back from the request.

fund
object

Fund header: identity, the as-of period, and coverage counts for the full fund (not the returned page).

holdings
object[]