# ETF & Mutual Fund Holdings: Every Stock a Fund Owns (`precious_bathmat/etf-mutual-fund-holdings`) Actor

Get every holding of any US ETF or mutual fund, such as VOO, QQQ, ARKK, SCHD or VTSAX. Shares, dollar value, portfolio weight, ticker, CUSIP, ISIN and asset type for each position, straight from official SEC filings. No API key.

- **URL**: https://apify.com/precious\_bathmat/etf-mutual-fund-holdings.md
- **Developed by:** [Mariam Ahmed](https://apify.com/precious_bathmat) (community)
- **Categories:** Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.00 / 1,000 holding rows

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## ETF & Mutual Fund Holdings: Every Stock a Fund Owns

Get the **complete holdings of any US ETF or mutual fund**, including VOO, QQQ, VTI, ARKK, SCHD, JEPI, VTSAX, FXAIX and BND. Every position comes back as one row with the **stock name, ticker, number of shares, dollar value and portfolio weight**, plus CUSIP, ISIN, asset type and country.

The data comes straight from the fund's official **SEC Form N-PORT filing**. No API key and no account needed.

### What does this do?

Many fund pages show only the top 10 holdings, and every fund family publishes its full list in a different format. The complete list is in the fund's quarterly filing with the SEC, buried in a large XML file. This Actor finds the latest filing for each fund you enter and turns it into a clean table, largest position first.

```mermaid
flowchart LR
    A[Fund tickers<br/>VOO, ARKK, BND] --> B[Latest SEC<br/>N-PORT filing]
    B --> C[Every position<br/>parsed and ranked]
    C --> D[Table: stock, ticker,<br/>shares, value, weight]
```

### Who is it for?

| You are | You use it to |
|---|---|
| **Investors and financial advisors** | See exactly what you own inside each fund and spot overlap between funds |
| **Financial analysts and researchers** | Track fund positioning, sector exposure and concentration |
| **Fintech apps and portfolio tools** | Show look-through holdings for any fund your users hold |
| **Finance writers and newsletters** | Back up articles on what ARK, Vanguard or JPMorgan funds are buying |

### What data do you get?

One row per holding:

| Field | Meaning |
|---|---|
| `fundTicker`, `fundName`, `fundFamily` | The fund you asked for |
| `holdingsAsOfDate`, `filedDate` | The date the holdings are from, and when the SEC received the filing |
| `rank` | Size of the position within the fund (1 is the largest) |
| `name`, `ticker`, `cusip`, `isin`, `lei` | What the fund holds |
| `quantity`, `quantityType` | Number of shares, bond principal amount or futures contracts |
| `valueUsd`, `weightPercent` | Dollar value and percent of the fund |
| `assetCategory`, `issuerCategory` | Common stock, preferred stock, bond, mortgage-backed security, futures and so on |
| `maturityDate`, `couponRatePercent` | For bonds: when they mature and the interest rate |
| `country`, `currency`, `position` | Where the issuer is, the currency, and long or short |
| `fundNetAssetsUsd`, `totalHoldingsInFund` | Fund size and how many positions it has |
| `secFilingUrl` | Link to the original SEC filing |

### Example: Vanguard S\&P 500 ETF (VOO)

Largest holdings from the SEC filing for 30 June 2026 (filed 28 August 2026), out of 520 positions:

| Rank | Holding | Ticker | Weight | Value |
|---|---|---|---|---|
| 1 | NVIDIA Corp | NVDA | 7.51% | $125.6B |
| 2 | Apple Inc | AAPL | 6.59% | $110.1B |
| 3 | Microsoft Corp | MSFT | 4.30% | $71.8B |
| 4 | Amazon.com Inc | AMZN | 3.62% | $60.5B |
| 5 | Alphabet Inc (class A or C) | – | 3.25% | $54.3B |
| 6 | Broadcom Inc | AVGO | 2.77% | $46.3B |
| 7 | Alphabet Inc (class A or C) | – | 2.59% | $43.3B |
| 8 | Micron Technology Inc | MU | 2.02% | $33.7B |

Bond funds work too. Vanguard Total Bond Market ETF (BND) returns all 17,409 positions, each with its maturity date and coupon.

#### Sample output (JSON)

```json
{
  "fundTicker": "VOO",
  "fundName": "VANGUARD 500 INDEX FUND",
  "fundFamily": "VANGUARD INDEX FUNDS",
  "holdingsAsOfDate": "2026-06-30",
  "filedDate": "2026-08-28",
  "totalHoldingsInFund": 520,
  "rank": 1,
  "name": "NVIDIA Corp",
  "ticker": "NVDA",
  "tickerSource": "matched by company name",
  "cusip": "67066G104",
  "isin": "US67066G1040",
  "quantity": 627619094,
  "quantityType": "shares",
  "valueUsd": 125580304518.46,
  "weightPercent": 7.5142,
  "assetCategory": "Equity (common)",
  "country": "US",
  "secFilingUrl": "https://www.sec.gov/Archives/edgar/data/36405/000003640526000473/0000036405-26-000473-index.htm"
}
```

### How to use it

1. Enter one or more **fund tickers**, one per line.
2. Optional: turn on **Only stocks**, set **Max holdings per fund** (for example 25 for a top 25 list), or set a **Minimum portfolio weight**.
3. Click **Start**. Export to Excel, CSV or JSON, or send the results to Google Sheets with Apify integrations.

**Tip:** run it once a quarter on the funds you follow to see what they bought and sold.

### Popular funds

Ready to run holdings lists:

**S\&P 500 and total market**

- [VOO holdings: Vanguard S\&P 500 ETF](https://apify.com/precious_bathmat/etf-mutual-fund-holdings/examples/voo-holdings)
- [IVV holdings: iShares Core S\&P 500 ETF](https://apify.com/precious_bathmat/etf-mutual-fund-holdings/examples/ivv-holdings)
- [VTI holdings: Vanguard Total Stock Market ETF](https://apify.com/precious_bathmat/etf-mutual-fund-holdings/examples/vti-holdings)

**Nasdaq-100, tech and growth**

- [QQQ holdings: Invesco QQQ Trust](https://apify.com/precious_bathmat/etf-mutual-fund-holdings/examples/qqq-holdings)
- [QQQM holdings: Invesco NASDAQ 100 ETF](https://apify.com/precious_bathmat/etf-mutual-fund-holdings/examples/qqqm-holdings)
- [VGT holdings: Vanguard Information Technology ETF](https://apify.com/precious_bathmat/etf-mutual-fund-holdings/examples/vgt-holdings)
- [XLK holdings: Technology Select Sector SPDR ETF](https://apify.com/precious_bathmat/etf-mutual-fund-holdings/examples/xlk-holdings)
- [SMH holdings: VanEck Semiconductor ETF](https://apify.com/precious_bathmat/etf-mutual-fund-holdings/examples/smh-holdings)
- [VUG holdings: Vanguard Growth ETF](https://apify.com/precious_bathmat/etf-mutual-fund-holdings/examples/vug-holdings)
- [SCHG holdings: Schwab U.S. Large-Cap Growth ETF](https://apify.com/precious_bathmat/etf-mutual-fund-holdings/examples/schg-holdings)
- [ARKK holdings: ARK Innovation ETF](https://apify.com/precious_bathmat/etf-mutual-fund-holdings/examples/arkk-holdings)

**Dividend and income**

- [SCHD holdings: Schwab U.S. Dividend Equity ETF](https://apify.com/precious_bathmat/etf-mutual-fund-holdings/examples/schd-holdings)
- [VIG holdings: Vanguard Dividend Appreciation ETF](https://apify.com/precious_bathmat/etf-mutual-fund-holdings/examples/vig-holdings)
- [JEPI holdings: JPMorgan Equity Premium Income ETF](https://apify.com/precious_bathmat/etf-mutual-fund-holdings/examples/jepi-holdings)
- [JEPQ holdings: JPMorgan Nasdaq Equity Premium Income ETF](https://apify.com/precious_bathmat/etf-mutual-fund-holdings/examples/jepq-holdings)

#### Run it with the API

```bash
curl -X POST "https://api.apify.com/v2/acts/precious_bathmat~etf-mutual-fund-holdings/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "funds": ["VOO", "QQQ", "ARKK"],
    "onlyStocks": true
  }'
```

### Pricing

**$4.00 per 1,000 holding rows** ($0.004 per holding). Funds that cannot be found are not charged.

| Job | Rows | Cost |
|---|---|---|
| ARKK (46 holdings) | 46 | $0.18 |
| QQQ (105 holdings) | 105 | $0.42 |
| VOO (520 holdings) | 520 | $2.08 |
| Top 25 holdings of 10 funds | 250 | $1.00 |
| VTI / VTSAX (3,546 holdings) | 3,546 | $14.18 |

Big bond and total market funds hold thousands of positions. Use **Max holdings per fund** or **Minimum portfolio weight** to keep costs down.

### FAQ

**How recent are the holdings?**
Funds file N-PORT every quarter, and the SEC publishes the filing about 60 days after the quarter ends. Holdings are therefore a snapshot, usually 2 to 5 months old depending on where the fund is in its quarter. Every row includes `holdingsAsOfDate` so you always know the date.

**Why is SPY or DIA not found?**
SPY and DIA are unit investment trusts, which do not file N-PORT holdings with the SEC. Funds registered outside the US are not covered either.

**Why are some tickers empty?**
Many fund families do not put tickers in their filings. The Actor fills them in from the SEC's official company list only for US dollar positions whose company name matches exactly one company, and `tickerSource` tells you where each ticker came from. Foreign shares traded in other currencies keep their CUSIP and ISIN but no US ticker. Bonds, futures and cash funds are never matched by name, and when a fund holds two share classes of one company (such as Alphabet class A and C) both are left blank rather than guessed, unless the fund's own filing includes the ticker. CUSIP and ISIN are always included when the fund reports them.

**Do different share classes return the same holdings?**
Yes. VTI and VTSAX, or VOO and VFIAX, are share classes of one fund with one portfolio. If you enter both, the holdings are returned once.

**Does it include bonds, futures and cash?**
Yes, every position in the filing is included. Turn on **Only stocks** to keep just common and preferred stock.

This data is for research and information only and is not investment advice.

# Actor input Schema

## `funds` (type: `array`):

ETF or mutual fund tickers, one per line, for example VOO, QQQ, ARKK, SCHD, VTSAX or BND. An SEC series ID such as S000002839 also works.

## `onlyStocks` (type: `boolean`):

Return only common and preferred stock positions. Leave off to include bonds, cash funds, futures and other positions.

## `maxHoldingsPerFund` (type: `integer`):

Only return the largest N positions of each fund. Useful for big funds: a total bond market fund can hold over 17,000 positions. Leave empty for every holding.

## `minWeightPercent` (type: `number`):

Only return positions that make up at least this percent of the fund, for example 0.5.

## Actor input object example

```json
{
  "funds": [
    "VOO",
    "ARKK",
    "SCHD"
  ],
  "onlyStocks": false
}
```

# Actor output Schema

## `results` (type: `string`):

Every position of each fund, largest first.

## `summary` (type: `string`):

Per fund: name, holdings date, number of holdings, rows returned, and the reason when a fund could not be found.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "funds": [
        "VOO",
        "ARKK",
        "SCHD"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("precious_bathmat/etf-mutual-fund-holdings").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "funds": [
        "VOO",
        "ARKK",
        "SCHD",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("precious_bathmat/etf-mutual-fund-holdings").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "funds": [
    "VOO",
    "ARKK",
    "SCHD"
  ]
}' |
apify call precious_bathmat/etf-mutual-fund-holdings --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,precious_bathmat/etf-mutual-fund-holdings"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/tnu28q4vTI4mYWKm5/builds/86pYJjPt1eshaJo3T/openapi.json
