Registered funds and ETFs — directory, holdings, and operations — funds holding a given stock, and SEC-registered investment advisers. Fund holdings come from Form NPORT-P, operations from N-CEN, and adviser profiles from Form ADV.
/v1/funds
Search the tracked registered fund / ETF directory by fund-name, registrant, identifier, or ticker words in any order. Exact identifiers and verified share-class aliases (VOO, VFIAX, VTI, VTSAX) win; otherwise all words are required before a sparse any-word fallback. totalMatches is the directory-wide match count before limit truncation. Each row's profileId resolves on the holdings and operations routes, including series whose NPORT-P directory row has no ticker. holdingCount is the number of stored rows; nullable reportedHoldingCount is the filing's full investment-row count before storage filtering. holdingsCoverage is fullPortfolio, or trackedEquitiesOnly for large multi-series trusts where only positions in tracked stocks are stored (netAssets is always the fund's reported total).
Form NPORT-P covers registered management investment companies and ETFs organized as unit investment trusts. Money market funds and small business investment companies do not file it. Fixed-income-only trust series can also be absent because entry into this tracked directory requires a tracked-stock match; a directory miss is not evidence that a fund does not exist.
Parameters: query (required — fund name, registrant, profile id, series id, own ticker, or verified share-class alias, e.g. Vanguard, IWM, or VFIAX); limit (default 20, max 500).
curl "https://api.equibles.com/v1/funds?query=Vanguard&limit=2" \
-H "Authorization: Bearer eq_your_api_key"import requests
r = requests.get(
"https://api.equibles.com/v1/funds",
params={"query": "Vanguard", "limit": 2},
headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())const res = await fetch("https://api.equibles.com/v1/funds?query=Vanguard&limit=2", {
headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());{
"totalMatches": 120,
"data": [
{ "seriesName": "VANGUARD TOTAL STOCK MARKET INDEX FUND", "registrantName": "VANGUARD INDEX FUNDS", "profileId": "vanguard-total-stock-market-index-fund-s000002848", "ticker": null, "fundType": null, "netAssets": 1991691212321.29, "holdingCount": 3405, "reportedHoldingCount": 3524, "holdingsCoverage": "trackedEquitiesOnly", "latestReportPeriodDate": "2026-03-31" },
{ "seriesName": "VANGUARD 500 INDEX FUND", "registrantName": "VANGUARD INDEX FUNDS", "profileId": "vanguard-500-index-fund-s000002839", "ticker": null, "fundType": null, "netAssets": 1421263311402.89, "holdingCount": 498, "reportedHoldingCount": 519, "holdingsCoverage": "trackedEquitiesOnly", "latestReportPeriodDate": "2026-03-31" }
]
}
/v1/funds/
The portfolio holdings of a fund or ETF from its most recent NPORT-P — each position's issuer, CUSIP, balance, USD value, and share of net assets. {ticker} accepts the same exact profile id, SEC series id, stored series ticker, or verified share-class alias as directory search (for example QQQ, S000004344, VOO, or vanguard-500-index-fund-s000002839). The most recent report is the one with the greatest report period, so a late-filed amendment of an older quarter never shadows the newest one.
totalHoldings counts stored rows. Nullable reportedHoldingCount is the filing's full investment-row count before the platform's storage filter. holdingsCoverage is fullPortfolio for listed ETFs, or trackedEquitiesOnly for the large multi-series trusts, where only positions in stocks this platform tracks are stored (netAssets is always the fund's own reported total).
Parameters: {ticker} (path — a fund ticker, profile id, SEC series id, or verified share-class alias); limit (default 20, max 500); offset.
curl "https://api.equibles.com/v1/funds/QQQ/holdings?limit=2" \
-H "Authorization: Bearer eq_your_api_key"import requests
r = requests.get(
"https://api.equibles.com/v1/funds/QQQ/holdings?limit=2",
headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())const res = await fetch("https://api.equibles.com/v1/funds/QQQ/holdings?limit=2", {
headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());{
"seriesName": "Invesco QQQ Trust, Series 1",
"ticker": "QQQ",
"reportPeriodDate": "2026-03-31",
"netAssets": 372507306132.08,
"totalHoldings": 102,
"reportedHoldingCount": 102,
"holdingsCoverage": "fullPortfolio",
"data": [
{ "name": "NVIDIA Corp.", "cusip": "67066G104", "balance": 185426246.0, "units": "NS", "valueUsd": 32338337302.4, "percentOfNetAssets": 8.681262560507, "assetCategory": "EC", "country": "US" },
{ "name": "Apple Inc.", "cusip": "037833100", "balance": 112027518.0, "units": "NS", "valueUsd": 28431463793.22, "percentOfNetAssets": 7.63245802839, "assetCategory": "EC", "country": "US" }
],
"meta": { "limit": 2, "offset": 0, "count": 2, "hasMore": true, "total": 102 }
}
/v1/funds/
A fund's N-CEN operational filings — the filing date, report period, company type, and its service providers (underwriter, auditor, custodian, and more), newest first. The route accepts the same exact profile id, SEC series id, stored series ticker, or verified share-class alias as directory search.
Form N-CEN is filed at registrant level, while this dataset currently imports it through tracked issuer feeds. Every response therefore carries coverage: "registrantLevelTrackedIssuerFeed" and a coverageNote; an empty data array is a coverage result, not evidence that the fund has no N-CEN filing.
Parameters: {ticker} (path — a fund ticker, profile id, SEC series id, or verified share-class alias); limit (default 10, max 500).
curl "https://api.equibles.com/v1/funds/QQQ/operations?limit=2" \
-H "Authorization: Bearer eq_your_api_key"import requests
r = requests.get(
"https://api.equibles.com/v1/funds/QQQ/operations?limit=2",
headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())const res = await fetch("https://api.equibles.com/v1/funds/QQQ/operations?limit=2", {
headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());{
"coverage": "registrantLevelTrackedIssuerFeed",
"coverageNote": "Form N-CEN is filed at registrant level and this dataset currently imports it through tracked issuer feeds. The returned rows are the stored reports for Invesco QQQ Trust, Series 1.",
"data": [
{
"filedDate": "2026-03-03",
"reportPeriodEnd": "2025-12-19",
"investmentCompanyType": "N-1A",
"investmentCompanyFileNumber": "811-08947",
"isAmendment": false,
"isFirstFiling": false,
"isLastFiling": false,
"serviceProviders": [
{ "role": "Principal Underwriter", "name": "Invesco Distributors, Inc.", "country": null, "isAffiliated": true },
{ "role": "Independent Public Accountant", "name": "PricewaterhouseCoopers LLP", "country": "US", "isAffiliated": false }
]
}
]
}
/v1/stocks/
The registered funds and ETFs that hold a given stock, from each series' most recent NPORT-P — each fund's series, position size, USD value, and share of its net assets. Series that stopped filing more than 18 months ago (liquidated or merged funds) are excluded from both the rows and totalPositions. Each fund files on its own fiscal quarter, so values are as of each row's reportPeriodDate.
Parameters: {ticker} (path); limit (default 20, max 500). This ranking is not paged — there is no offset; raise limit to see more funds.
curl "https://api.equibles.com/v1/stocks/NVDA/fund-owners?limit=2" \
-H "Authorization: Bearer eq_your_api_key"import requests
r = requests.get(
"https://api.equibles.com/v1/stocks/NVDA/fund-owners?limit=2",
headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())const res = await fetch("https://api.equibles.com/v1/stocks/NVDA/fund-owners?limit=2", {
headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());{
"totalPositions": 2257,
"data": [
{ "registrantName": "VANGUARD INDEX FUNDS", "seriesName": "VANGUARD TOTAL STOCK MARKET INDEX FUND", "reportPeriodDate": "2026-03-31", "balance": 733080870.0, "units": "NS", "valueUsd": 127849303728.0, "percentOfNetAssets": 6.419132792125, "payoffProfile": "Long" },
{ "registrantName": "VANGUARD INDEX FUNDS", "seriesName": "VANGUARD 500 INDEX FUND", "reportPeriodDate": "2026-03-31", "balance": 617520783.0, "units": "NS", "valueUsd": 107695624555.2, "percentOfNetAssets": 7.57745758236, "payoffProfile": "Long" }
]
}
/v1/investment-advisers
Search SEC-registered investment advisers (Form ADV) by name — both the legal name and the "doing business as" name match — returning the Org CRD you pass to the profile endpoint, plus city, regulatory AUM, and employee count. asOfDate is the Form ADV bulk-extract snapshot each row was read from — the figures come from the adviser's most recent filing, which can be older. totalMatches is the registry-wide match count before limit truncation.
Parameters: query (required — e.g. BlackRock); limit (default 20, max 500).
curl "https://api.equibles.com/v1/investment-advisers?query=BlackRock" \
-H "Authorization: Bearer eq_your_api_key"import requests
r = requests.get(
"https://api.equibles.com/v1/investment-advisers",
params={"query": "BlackRock"},
headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())const res = await fetch("https://api.equibles.com/v1/investment-advisers?query=BlackRock", {
headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());{
"totalMatches": 13,
"data": [
{ "crd": 105247, "legalName": "BLACKROCK FUND ADVISORS", "primaryBusinessName": "BLACKROCK FUND ADVISORS", "city": "SAN FRANCISCO", "state": "CA", "country": "United States", "totalRegulatoryAum": 4282224366957, "numberOfEmployees": 128, "asOfDate": "2026-05-01" },
{ "crd": 107105, "legalName": "BLACKROCK FINANCIAL MANAGEMENT, INC", "primaryBusinessName": "BLACKROCK FINANCIAL MANAGEMENT, INC", "city": "NEW YORK", "state": "NY", "country": "United States", "totalRegulatoryAum": 1595099828916, "numberOfEmployees": 7987, "asOfDate": "2026-05-01" }
]
}
/v1/investment-advisers/
A full Form ADV profile for one adviser by Org CRD — identity, SEC number and status, regulatory and discretionary AUM, employee count, and fee structure. asOfDate is the date of the SEC's monthly Form ADV bulk extract the record was imported from (the underlying figures may be older), and website passes through exactly as filed on Form ADV Item 1.I — it may be a social-media URL in the SEC's all-caps form.
Parameters: {crd} (path — from /v1/investment-advisers).
curl "https://api.equibles.com/v1/investment-advisers/105247" \
-H "Authorization: Bearer eq_your_api_key"import requests
r = requests.get(
"https://api.equibles.com/v1/investment-advisers/105247",
headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())const res = await fetch("https://api.equibles.com/v1/investment-advisers/105247", {
headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());{
"crd": 105247,
"secNumber": "801-22609",
"legalName": "BLACKROCK FUND ADVISORS",
"primaryBusinessName": "BLACKROCK FUND ADVISORS",
"city": "SAN FRANCISCO",
"state": "CA",
"country": "United States",
"website": "https://www.youtube.com/channel/UCrIXkHfv2tMzebAI1TcdDhg",
"secStatus": "Approved",
"numberOfEmployees": 128,
"totalRegulatoryAum": 4282224366957,
"discretionaryAum": 4282224366957,
"nonDiscretionaryAum": 0,
"chargesPercentageOfAum": true,
"chargesHourly": false,
"chargesSubscription": false,
"chargesFixed": false,
"chargesCommissions": false,
"chargesPerformanceBased": false,
"chargesOther": false,
"asOfDate": "2026-05-01"
}