Dashboard

Portfolio overlap

GET/api/fund/overlap

ETF Pro

Compares the holdings of two ETFs side by side. Returns overlap statistics (shared holdings count, exclusive counts) and per-holding detail showing weights in both portfolios. Uses CUSIP matching on the most recent N-PORT filing for each fund.

Get API key Try it live in the API explorer

Query parameters

Example request

curl 'https://api.stockfit.io/v1/api/fund/overlap?symbol1=VTI&symbol2=VOO' \
  -H 'Authorization: Bearer YOUR_API_TOKEN'

Responses

200 OK

Portfolio overlap analysis

Response schema

  • symbol1 string
  • symbol2 string
  • reportDate1 string

    Report date for the first ETF

  • reportDate2 string

    Report date for the second ETF

  • overlapCount integer

    Number of holdings in both portfolios

  • onlyIn1Count integer

    Holdings only in the first ETF

  • onlyIn2Count integer

    Holdings only in the second ETF

  • overlapWeight1 number

    Percentage of first fund's portfolio in shared holdings

  • overlapWeight2 number

    Percentage of second fund's portfolio in shared holdings

  • holdings array of object

    Per-holding overlap detail (sorted by combined weight)

    array of:
    • cusip string
    • name string
    • mappedSymbol string | null
    • weight1 number | null

      Weight in first ETF (%)

    • weight2 number | null

      Weight in second ETF (%)

    • value1 number | null

      Position value in first ETF (USD)

    • value2 number | null

      Position value in second ETF (USD)

    • overlapStatus string (enum)

      Whether the holding appears in both portfolios or only one

      Allowed values: both, only_1, only_2

Example response

{
  "symbol1": "VTI",
  "symbol2": "VOO",
  "reportDate1": "2025-12-31",
  "reportDate2": "2025-12-31",
  "overlapCount": 498,
  "onlyIn1Count": 3150,
  "onlyIn2Count": 5,
  "overlapWeight1": 82.5,
  "overlapWeight2": 99.8,
  "holdings": [
    {
      "cusip": "67066G104",
      "name": "NVIDIA Corp",
      "mappedSymbol": "NVDA",
      "weight1": 6.12,
      "weight2": 7.75,
      "value1": 0,
      "value2": 0,
      "overlapStatus": "both"
    }
  ]
}

400 Bad Request

Symbol not found or not a fund (ETF or mutual fund)

Response schema

  • error string

    Human-readable error message

Example response

{}

403 Forbidden

Feature not available on current plan

Response schema

  • error string

    Human-readable error message

Example response

{}