ETF Endpoints

Access ETF (Exchange-Traded Fund) data including profiles, holdings, sector weightings, and stock exposure information.

Overview

The ETF endpoints provide access to ETF market data, including fund profiles, holdings information, sector and country weightings, and stock exposure data.

Available Methods

MethodEndpointDescription
GET/etf-infoGet ETF profile information
GET/etf-holdings/portfolio-dateGet ETF holding dates
GET/etf-holdingsGet ETF holdings data
GET/etf-holder/{symbol}Get ETF holder information
GET/etf-sector-weightings/{symbol}Get ETF sector weightings
GET/etf-country-weightings/{symbol}Get ETF country weightings
GET/etf-stock-exposure/{symbol}Get ETF stock exposure

Get ETF Profile

Retrieve ETF profile and basic information including expense ratio, AUM, and fund details.

1const profile = await fmp.etf.getProfile('SPY');

Parameters

ParameterTypeRequiredDescription
symbolstringYesETF symbol (e.g., "SPY", "QQQ")

Example Response

1{
2  success: true,
3  data: {
4    symbol: 'SPY',
5    name: 'SPDR S&P 500 ETF Trust',
6    assetClass: 'Equity',
7    aum: 500000000000,
8    avgVolume: 75000000,
9    cusip: '78462F103',
10    description: 'The SPDR S&P 500 ETF Trust tracks the S&P 500 Index',
11    domicile: 'United States',
12    etfCompany: 'State Street Global Advisors',
13    expenseRatio: 0.0945,
14    inceptionDate: '1993-01-29',
15    isin: 'US78462F1030',
16    nav: 450.25,
17    navCurrency: 'USD',
18    sectorsList: [
19      {
20        exposure: 'Technology',
21        industry: 'Software'
22      }
23    ],
24    website: 'https://www.ssga.com',
25    holdingsCount: 500
26  }
27}

Get ETF Holding Dates

Retrieve available dates for ETF holdings data.

1const holdingDates = await fmp.etf.getHoldingDates('SPY');

Parameters

ParameterTypeRequiredDescription
symbolstringYesETF symbol

Example Response

1{
2  success: true,
3  data: [
4    {
5      date: '2024-01-15'
6    },
7    {
8      date: '2024-01-08'
9    }
10  ]
11}

Get ETF Holdings

Retrieve detailed holdings data for a specific ETF and date.

1const holdings = await fmp.etf.getHoldings({ 
2  symbol: 'SPY',
3  date: '2024-01-15'
4});

Parameters

ParameterTypeRequiredDescription
symbolstringYesETF symbol
datestringYesDate for holdings data (YYYY-MM-DD format)

Example Response

1{
2  success: true,
3  data: [
4    {
5      cik: '0000320193',
6      acceptanceTime: '2024-01-15T16:30:00.000Z',
7      date: '2024-01-15',
8      symbol: 'AAPL',
9      name: 'Apple Inc.',
10      lei: 'HWUPKR0MPOU8FGXBT394',
11      title: 'Common Stock',
12      cusip: '037833100',
13      isin: 'US0378331005',
14      balance: 1000000,
15      units: 'SHRS',
16      cur_cd: 'USD',
17      valUsd: 150000000,
18      pctVal: 7.5,
19      payoffProfile: 'Long',
20      assetCat: 'Equity',
21      issuerCat: 'Corporate',
22      invCountry: 'US',
23      isRestrictedSec: 'N',
24      fairValLevel: '1',
25      isCashCollateral: 'N',
26      isNonCashCollateral: 'N',
27      isLoanByFund: 'N'
28    }
29  ]
30}

Get ETF Holder

Retrieve all stocks held by a specific ETF with asset details.

1const holder = await fmp.etf.getHolder('SPY');

Parameters

ParameterTypeRequiredDescription
symbolstringYesETF symbol

Example Response

1{
2  success: true,
3  data: [
4    {
5      asset: 'AAPL',
6      name: 'Apple Inc.',
7      isin: 'US0378331005',
8      cusip: '037833100',
9      sharesNumber: 1000000,
10      weightPercentage: 7.5,
11      marketValue: 150000000,
12      updated: '2024-01-15'
13    }
14  ]
15}

Get ETF Sector Weighting

Retrieve sector breakdown of ETF holdings.

1const sectorWeighting = await fmp.etf.getSectorWeighting('SPY');

Parameters

ParameterTypeRequiredDescription
symbolstringYesETF symbol

Example Response

1{
2  success: true,
3  data: [
4    {
5      sector: 'Technology',
6      weightPercentage: '32.62%'
7    },
8    {
9      sector: 'Financial Services',
10      weightPercentage: '12.48%'
11    },
12    {
13      sector: 'Healthcare',
14      weightPercentage: '12.1%'
15    }
16  ]
17}

Get ETF Country Weighting

Retrieve country breakdown of ETF holdings.

1const countryWeighting = await fmp.etf.getCountryWeighting('SPY');

Parameters

ParameterTypeRequiredDescription
symbolstringYesETF symbol

Example Response

1{
2  success: true,
3  data: [
4    {
5      country: 'United States',
6      weightPercentage: '99.37%'
7    },
8    {
9      country: 'Switzerland',
10      weightPercentage: '0.3%'
11    },
12    {
13      country: 'Netherlands',
14      weightPercentage: '0.14%'
15    }
16  ]
17}

Get ETF Stock Exposure

Retrieve which ETFs hold a specific stock.

1const stockExposure = await fmp.etf.getStockExposure('AAPL');

Parameters

ParameterTypeRequiredDescription
symbolstringYesStock symbol to find ETF exposure

Example Response

1{
2  success: true,
3  data: [
4    {
5      etfSymbol: 'SPY',
6      assetExposure: 'AAPL',
7      sharesNumber: 1000000,
8      weightPercentage: 7.5,
9      marketValue: 150000000
10    },
11    {
12      etfSymbol: 'QQQ',
13      assetExposure: 'AAPL',
14      sharesNumber: 500000,
15      weightPercentage: 12.3,
16      marketValue: 75000000
17    }
18  ]
19}

Response Types

ETFProfile

1interface ETFProfile {
2  symbol: string;
3  assetClass: string;
4  aum: number;
5  avgVolume: number;
6  cusip: string;
7  description: string;
8  domicile: string;
9  etfCompany: string;
10  expenseRatio: number;
11  inceptionDate: string;
12  isin: string;
13  name: string;
14  nav: number;
15  navCurrency: string;
16  sectorsList: {
17    exposure: string;
18    industry: string;
19  }[];
20  website: string;
21  holdingsCount: number;
22}

ETFHolding

1interface ETFHolding {
2  cik: string;
3  acceptanceTime: string;
4  date: string;
5  symbol: string;
6  name: string;
7  lei: string;
8  title: string;
9  cusip: string;
10  isin: string;
11  balance: number;
12  units: string;
13  cur_cd: string;
14  valUsd: number;
15  pctVal: number;
16  payoffProfile: string;
17  assetCat: string;
18  issuerCat: string;
19  invCountry: string;
20  isRestrictedSec: string;
21  fairValLevel: string;
22  isCashCollateral: string;
23  isNonCashCollateral: string;
24  isLoanByFund: string;
25}

ETFHolder

1interface ETFHolder {
2  asset: string;
3  name: string;
4  isin: string;
5  cusip: string;
6  sharesNumber: number;
7  weightPercentage: number;
8  marketValue: number;
9  updated: string;
10}

ETFWeighting

1interface ETFWeighting {
2  sector: string;
3  weightPercentage: string;
4}

ETFCountryWeighting

1interface ETFCountryWeighting {
2  country: string;
3  weightPercentage: string;
4}

ETFStockExposure

1interface ETFStockExposure {
2  etfSymbol: string;
3  assetExposure: string;
4  sharesNumber: number;
5  weightPercentage: number;
6  marketValue: number;
7}

Popular ETFs

Here are some popular ETF symbols you can use:

  • SPY - SPDR S&P 500 ETF Trust
  • QQQ - Invesco QQQ Trust
  • IWM - iShares Russell 2000 ETF
  • VTI - Vanguard Total Stock Market ETF
  • VEA - Vanguard FTSE Developed Markets ETF
  • VWO - Vanguard FTSE Emerging Markets ETF
  • BND - Vanguard Total Bond Market ETF
  • GLD - SPDR Gold Shares

Error Handling

Always check the success property before accessing data:

1const profile = await fmp.etf.getProfile('INVALID');
2
3if (profile.success && profile.data) {
4console.log('ETF Name:', profile.data.name);
5console.log('Expense Ratio:', profile.data.expenseRatio);
6} else {
7console.error('Error:', profile.error);
8console.error('Status:', profile.status);
9}

Rate Limiting

ETF endpoints are subject to FMP's rate limits. For production applications, implement appropriate rate limiting and caching strategies.

Next Steps

Explore other endpoint categories:


Ready to explore financial data? Check out the Financial Endpoints for income statements, balance sheets, and more.