All Posts
ProductMutual Fund HoldingsN-PORTSpaceX

Mutual Fund Holdings API: Full N-PORT Portfolios

Mutual fund holdings API for full N-PORT portfolios: Fidelity Contrafund's 441 lines, SpaceX lock-up shares, private Level 3 stakes, changes and fees.

Published October 25, 202615 min readStockFit Engineering
Mutual Fund Holdings API: Full N-PORT Portfolios

A mutual fund holdings API earns its keep on the lines a fact sheet leaves out. Fidelity Contrafund's latest public portfolio, its Form N-PORT report for June 30, 2026, lists 441 holdings against $179.96 billion of net assets. The third-largest line has no CUSIP, no ISIN and no ticker. The filing calls it SPACE EXPLORATION TECHNOLOGIES CORP A (180 DAY LOCK UP): 73,188,869 shares of SpaceX worth $12.51 billion, or 6.95% of the fund.

Lines like that are where holdings pipelines break. Top-ten lists stop before them, and screeners that match holdings by CUSIP never see them. In Contrafund alone, 85 lines worth 9.11% of net assets carry neither a CUSIP nor an ISIN. If you are building a fund screener, an exposure tool or a research agent, those are exactly the positions your users ask about.

This post walks through StockFit's mutual fund holdings API on that one real filing: where the data comes from, how to pull a full portfolio in Python, how to read private and locked-up positions, how to find every mutual fund that owns SpaceX without missing the largest holder, and how to track quarterly changes and fees. Every holdings figure is production API output from October 25, 2026, checked against the filings on EDGAR.

Where mutual fund holdings data comes from: Form N-PORT

Registered funds, mutual funds and most ETFs alike, report their complete portfolio to the SEC on Form N-PORT: every stock, bond, private placement and derivative, with its value and its weight in the fund. They report holdings for every month, but only the report for the third month of each fiscal quarter becomes public, 60 days after the quarter ends. The SEC adopted monthly publication in 2024, delayed it in April 2025, and in February 2026 proposed to restore the quarterly schedule (SEC fact sheet on the Form N-PORT proposal).

Contrafund's June 30 report reached EDGAR on August 24, 2026, 55 days after the quarter closed, as accession 0000035402-26-005386. Mutual funds are not required to publish full holdings daily the way most ETFs do, so for them N-PORT is usually the only complete source (the cadence differences are covered in how often ETF holdings update).

Two endpoints do the work. /api/fund/holdings returns every line of one filing, the latest by default or any quarter through reportDate. /api/fund/profile lists the available report dates with net assets and holding counts, and it is on the free plan. Each holding line carries these fields:

  • name and title: the issuer, and the specific security as the fund describes it.
  • cusip and isin: identifiers, present only when the fund reports them.
  • balance and units: a share count (NS) or a principal amount (PA).
  • valueUsd and pctVal: the value in dollars and the weight as a percent of the fund's net assets.
  • assetCat: EC common equity, EP preferred equity, DBT debt, STIV short-term investment vehicles such as cash sweep funds.
  • fairValueLevel: 1 for a quoted price, 2 for observable inputs, 3 for unobservable inputs.
  • mappedCik and mappedSymbol: the SEC registrant and ticker the CUSIP resolves to, omitted when it does not resolve.

A mutual fund is a series with several share classes, and any class ticker resolves to the series: FCNTX and the K class, FCNKX, return the same 441 lines. If you work from SEC identifiers instead of tickers, mapping a fund's CIK to its ticker covers how series and class IDs relate.

Fidelity Contrafund holdings: 441 lines in one call

One request returns the whole book. pageSize goes up to 1,000, so Contrafund fits on a single page:

bash
curl "https://api.stockfit.io/v1/api/fund/holdings?symbol=FCNTX&pageSize=1000" \
  -H "Authorization: Bearer YOUR_API_KEY"

Here is the response, trimmed to its first three rows. NVIDIA and Meta carry a CUSIP, an ISIN and a resolved ticker. The SpaceX row carries none of them; the keys are simply absent:

json
{
  "page": 1,
  "pageSize": 1000,
  "totalPages": 1,
  "totalResults": 441,
  "data": [
    {
      "name": "NVIDIA CORP",
      "cusip": "67066G104",
      "isin": "US67066G1040",
      "ticker": "NVDA",
      "title": "NVIDIA CORP",
      "valueUsd": 16815253460.5,
      "pctVal": 9.343740143228,
      "balance": 84038450,
      "units": "NS",
      "assetCat": "EC",
      "issuerCat": "CORP",
      "country": "US",
      "payoffProfile": "Long",
      "fairValueLevel": 1,
      "mappedCik": 1045810,
      "mappedSymbol": "NVDA",
      "reportDate": "2026-06-30"
    },
    {
      "name": "META PLATFORMS INC",
      "cusip": "30303M102",
      "isin": "US30303M1027",
      "ticker": "META",
      "title": "META PLATFORMS INC CL A",
      "valueUsd": 12525124358.11,
      "pctVal": 6.959841999332,
      "balance": 22235659,
      "units": "NS",
      "assetCat": "EC",
      "issuerCat": "CORP",
      "country": "US",
      "payoffProfile": "Long",
      "fairValueLevel": 1,
      "mappedCik": 1326801,
      "mappedSymbol": "META",
      "reportDate": "2026-06-30"
    },
    {
      "name": "SPACE EXPLORATION TECHNOLOGIES CORP",
      "title": "SPACE EXPLORATION TECHNOLOGIES CORP A (180 DAY LOCK UP)",
      "valueUsd": 12505050157.34,
      "pctVal": 6.948687358337,
      "balance": 73188869,
      "units": "NS",
      "assetCat": "EC",
      "issuerCat": "CORP",
      "country": "US",
      "payoffProfile": "Long",
      "fairValueLevel": 2,
      "reportDate": "2026-06-30"
    }
  ],
  "reportDate": "2026-06-30"
}

In Python, page through the result, count the lines without an identifier, and aggregate by issuer before you rank anything, because one company can appear on several lines:

python
import os
from collections import defaultdict

import requests

BASE = "https://api.stockfit.io/v1/api"
HEADERS = {"Authorization": f"Bearer {os.environ['STOCKFIT_API_KEY']}"}


def get(path, **params):
    r = requests.get(f"{BASE}{path}", headers=HEADERS, params=params, timeout=60)
    r.raise_for_status()
    return r.json()


def fund_holdings(symbol, report_date=None):
    """Every line of one N-PORT filing, across all pages."""
    params = {"symbol": symbol, "pageSize": 1000}
    if report_date:
        params["reportDate"] = report_date
    rows, page = [], 1
    while True:
        body = get("/fund/holdings", page=page, **params)
        rows += body["data"]
        if page >= body["totalPages"]:
            return body["reportDate"], rows
        page += 1


def has_identifier(row):
    return bool(row.get("cusip") or row.get("isin"))


report_date, rows = fund_holdings("FCNTX")
no_id = [r for r in rows if not has_identifier(r)]
print(f"FCNTX as of {report_date}: {len(rows)} lines")
print(f"lines without a CUSIP or ISIN: {len(no_id)} ({sum(r['pctVal'] for r in no_id):.2f}% of net assets)")

by_issuer = defaultdict(float)
for r in rows:
    by_issuer[r["name"]] += r["pctVal"]
for name, pct in sorted(by_issuer.items(), key=lambda kv: -kv[1])[:5]:
    print(f"{pct:5.2f}%  {name}")
text
FCNTX as of 2026-06-30: 441 lines
lines without a CUSIP or ISIN: 85 (9.11% of net assets)
 9.34%  NVIDIA CORP
 6.97%  SPACE EXPLORATION TECHNOLOGIES CORP
 6.96%  META PLATFORMS INC
 6.84%  ALPHABET INC
 5.75%  AMAZON.COM INC

Aggregating changes the ranking. SpaceX's two lock-up lines add up to 6.97%, just above Meta's 6.96%, so ranking raw lines would put SpaceX third and understate it. Alphabet's Class A and Class C lines add up to 6.84%. The issuer-level top ten:

#Issuer, as filedLines% of net assetsValue
1NVIDIA CORP19.34%$16.82B
2SPACE EXPLORATION TECHNOLOGIES CORP26.97%$12.55B
3META PLATFORMS INC16.96%$12.53B
4ALPHABET INC26.84%$12.31B
5AMAZON.COM INC15.75%$10.34B
6BERKSHIRE HATHAWAY INC DEL23.23%$5.81B
7APPLE INC12.68%$4.83B
8BROADCOM INC12.19%$3.93B
9MICROSOFT CORP12.16%$3.88B
10ELI LILLY and CO22.06%$3.71B

We checked this response against the N-PORT XML on EDGAR line by line: all 441 lines, the $179,962,768,685 of net assets and every field of the SpaceX lines match exactly. That is the point of serving the filing rather than a summary of it: any number here can be traced to the document it came from.

SpaceX inside a mutual fund: from private shares to a lock-up line

Contrafund owned SpaceX long before the IPO, and N-PORT shows each step. In the March 31, 2026 report the position sat on five lines worth $8.05 billion, all fair value Level 3: three series of preferred stock and two common lines. By June 30 it was two lines of Class A common stock worth $12.55 billion, both Level 2 and both flagged with a 180-day lock-up:

Report dateLine, as filedTypeLevelSharesValue% of fund
2026-03-31SPACE EXPLORATION TECH CORP SER G PC PPEP3558,215$2.94B1.86%
2026-03-31SPACE EXPLORATION TECH CORP SER N PC PPEP3428,458$2.26B1.43%
2026-03-31SPACE EXPLORATION TECH CORP PPEC34,084,237$2.15B1.36%
2026-03-31SPACE EXPLORATION TECH CORP SER H PC PPEP3120,282$633.4M0.40%
2026-03-31SPACE EXPLORATION TECHNOLOGIES CORP CLASS C PPEC3129,910$68.4M0.04%
2026-06-30SPACE EXPLORATION TECHNOLOGIES CORP A (180 DAY LOCK UP)EC273,188,869$12.51B6.95%
2026-06-30SPACE EXPLORATION TECHNOLOGIES CORP A 144 (180 DAY LOCK UP)EC2247,195$40.1M0.02%

SpaceX's own filings explain the reshuffle. Its S-1 (accession 0001628280-26-036936) describes a ten-for-one split of its common stock in 2022 and a five-for-one split in May 2026. Its first 10-Q as a public company (accession 0001628280-26-052535) says the June 2026 IPO priced at $135.00 a share, every preferred share converted into Class A or Class B common stock, and Class C was reclassified into Class A. SPCX's first trading day in /api/price/history is June 12, 2026.

The fund priced the main lock-up line at the closing price: 73,188,869 shares × $170.86 is $12,505,050,157.34, exactly the reported value, and $170.86 is SPCX's June 30 close. The smaller line, marked A 144, is carried at $162.317 a share, 95% of that close. Both sit in Level 2, which is consistent with how lock-up shares work: the input, the listed price, is observable, but the shares themselves cannot be sold yet.

Same stock, same day, different paperwork. Baron Partners Fund (BPTIX) reported its 36,938,300 SpaceX shares under the public CUSIP 84615Q103 as Level 1, also at $170.86: 34.96% of the fund. Two filers made two reporting choices, and a CUSIP match sees only one of them.

SpaceX inside Fidelity Contrafund, every N-PORT quarter since Sep 2019
Source: StockFit /api/fund/holdings?symbol=FCNTX at each reportDate listed by /api/fund/profile, SpaceX lines summed by issuer name, as of 2026-10-25. Per-share values in the tooltip are as filed: before 2022 on the pre-split basis, then after SpaceX's 2022 ten-for-one split, and from June 2026 after its five-for-one split.

The history is one loop over the report dates that the profile lists:

python
profile = get("/fund/profile", symbol="FCNTX")
dates = sorted(q["reportDate"] for q in profile)
print(f"{len(dates)} N-PORT quarters on file, {dates[0]} to {dates[-1]}")

for d in dates[-6:]:
    as_of, rows = fund_holdings("FCNTX", report_date=d)
    spacex = [r for r in rows if r["name"].startswith("SPACE EXPLORATION")]
    value = sum(r["valueUsd"] for r in spacex)
    weight = sum(r["pctVal"] for r in spacex)
    levels = sorted({r["fairValueLevel"] for r in spacex})
    print(f"{as_of}  {len(spacex)} lines  level {levels}  ${value / 1e9:5.2f}B  {weight:4.2f}%")
text
28 N-PORT quarters on file, 2019-09-30 to 2026-06-30
2025-03-31  5 lines  level [3]  $ 2.74B  1.89%
2025-06-30  5 lines  level [3]  $ 2.74B  1.65%
2025-09-30  5 lines  level [3]  $ 3.14B  1.79%
2025-12-31  5 lines  level [3]  $ 5.82B  3.30%
2026-03-31  5 lines  level [3]  $ 8.05B  5.10%
2026-06-30  2 lines  level [2]  $12.55B  6.97%

Before the IPO the value moved in steps, flat for one to three quarters and then a jump: a mark set by the fund's valuation process rather than by a market price. The value per share on Contrafund's common line read $97.00 at December 31, 2023, $112.00 at June 30, 2024, $185.00 at December 31, 2024, $212.00 at September 30, 2025, $400.44 at December 31, 2025 and $526.59 at March 31, 2026. Adjusted for the five-for-one split, the last private mark is $105.32, against the $135.00 IPO price. The 2022 split is visible in the filings too: between the December 2021 and March 2022 reports the common line went from 347,648 shares at $560.00 to 3,476,480 shares at $56.00.

These are reported fund values, shown to explain the data. They are not investment advice or a view on any security.

Private companies in mutual fund holdings: reading Level 3 lines

SpaceX was the largest private position, not the only one. At June 30, 2026 Contrafund still held 79 Level 3 lines worth 1.70% of net assets, most of them preferred stock in private companies, with the round in the title (SERIES F, SER I). Grouped by issuer name, the largest were:

Issuer, as filedLinesLargest line, as filed% of fundValue
ANTHROPIC PBC3ANTHROPIC PBC SERIES F PC PP0.27%$488.3M
OPENAI GROUP PBC3OPENAI GROUP PBC A-2 PC PP0.23%$407.9M
FANATICS INC1FANATICS HOLDINGS INC CLASS A PP0.13%$231.5M
CANVA INC3CANVA INC CL A PP0.13%$228.9M
DOUYIN CO LTD1BYTEDANCE LTD SER E-1 PC PP0.12%$207.6M
ZIPLINE INTERNATIONAL INC5ZIPLINE INTERNATIONAL INC SER E PC PP0.11%$200.5M
STRIPE GLOBAL HOLDINGS INC4STRIPE GLOBAL HOLDINGS INC SER I PC PP0.10%$173.9M
DATABRICKS INC1DATABRICKS INC SER L PC PP0.06%$109.6M

Look at the ByteDance row: the issuer name is Douyin Co Ltd, while the title says ByteDance. When you search a portfolio for a private company, search both fields. Other lock-ups sat next to SpaceX on June 30: CEREBRAS SYSTEMS INC B (180 DAY LOCKUP) at 0.39% and KARDIGAN, INC (180 DAY LOCK-UP 12/15/26) at 0.02%.

Fidelity Contrafund: Level 3 and Level 2 holdings, % of net assets
Source: StockFit /api/fund/holdings?symbol=FCNTX, field fairValueLevel, pctVal summed per level for every reportDate, as of 2026-10-25. Level 1 (quoted prices) is the remainder and is not shown.

The IPO moved a large block of the fund between levels in one quarter: Level 3 fell from 7.00% to 1.70% of net assets, and Level 2 rose from 3.30% to 10.36%. The same fair value hierarchy shows up on company balance sheets; Level 3 assets by company covers that side with 10-K data.

Which mutual funds own SpaceX? Reverse lookup and the CUSIP blind spot

The reverse question, which funds hold a given company, is one call to /api/fund/reverse-lookup, the same endpoint behind finding every ETF that holds a stock. For SPCX it returns 599 funds holding $27.10 billion, each as of its latest N-PORT report (June 30, 2026 to September 30, 2026). Filtered to mutual funds, Baron's lineup leads the weight ranking:

Mutual funds with the largest SpaceX weight, by identifier match
Source: StockFit /api/fund/reverse-lookup?symbol=SPCX (599 funds), filtered to mutual funds via /api/lookup/symbol, latest N-PORT per fund, as of 2026-10-25. Lines without a CUSIP or ISIN are not matched, so Fidelity Contrafund's 6.97% is missing.

Contrafund is missing. The reverse lookup matches each holding line to a company by its CUSIP, and Contrafund's SpaceX lines have none. This comes from the source data, so any pipeline that joins N-PORT holdings on identifiers has the same blind spot, ours included. The issuer name is always there, though, so sweep by name. This runs the sweep across every Fidelity mutual fund that /api/fund/by-adviser returns:

python
holders = get("/fund/reverse-lookup", symbol="SPCX", pageSize=1000)
print(f"funds holding SPCX by identifier: {holders['totalResults']}")
print(f"FCNTX among them: {any(h['fundTicker'] == 'FCNTX' for h in holders['data'])}")

funds = get("/fund/by-adviser", adviser="Fidelity", type="mf", pageSize=500)["data"]
found = []
for f in funds:
    as_of, rows = fund_holdings(f["ticker"])
    lines = [r for r in rows if r["name"].startswith("SPACE EXPLORATION") and r["assetCat"] in ("EC", "EP")]
    if lines:
        found.append((f["ticker"], as_of, lines))

hidden = [t for t, _, lines in found if not any(has_identifier(r) for r in lines)]
print(f"Fidelity mutual funds scanned: {len(funds)}")
print(f"holding SpaceX stock: {len(found)}")
print(f"only through lines without a CUSIP or ISIN: {len(hidden)}")
text
funds holding SPCX by identifier: 599
FCNTX among them: False
Fidelity mutual funds scanned: 468
holding SpaceX stock: 44
only through lines without a CUSIP or ISIN: 29

Of 44 Fidelity mutual funds that hold SpaceX stock, 29 hold it only through lines without a CUSIP or ISIN, and none of those 29 appear in the reverse lookup. The other 15 appear, but only with their small CUSIP-bearing line. Among the 11 funds whose latest report is June 30, 2026, $17.33 billion of SpaceX sat in lines without an identifier and $86.6 million in lines a CUSIP match can see. The name match also catches 4 funds that hold only SpaceX bonds; the assetCat filter leaves them out. The largest positions the name sweep finds:

FundReport dateSpaceX value% of fundSeen by CUSIP match
Fidelity Contrafund (FCNTX)2026-06-30$12.55B6.97%No
Fidelity Blue Chip Growth Fund (FBGRX)2026-07-31$3.10B3.14%Only $24.2M
Fidelity Growth Company Fund (FDGRX)2026-05-31$2.35B2.38%No
Fidelity Advisor New Insights Fund (FNIAX)2026-06-30$2.07B7.33%Only $25.3M
Fidelity OTC Portfolio (FOCPX)2026-07-31$1.96B4.54%No
Fidelity Contrafund K6 (FLCNX)2026-06-30$1.83B4.87%Only $31.6M
Fidelity Series Opportunistic Insights Fund (FWWEX)2026-06-30$800.8M5.20%No
Fidelity Growth Company K6 Fund (FGKFX)2026-05-31$792.3M2.88%No

Report dates differ by fund because each files on its own fiscal quarter. The May 31 reports predate the IPO and still show private Level 3 lines, and the July 31 reports are priced at SPCX's $108.37 close that day, so compare positions within one report date, not across them. The sweep made 577 requests in total, the holdings calls plus pagination and the two lookups, and finished in 3.3 minutes.

Track mutual fund portfolio changes quarter over quarter

/api/fund/changes compares a fund's two latest N-PORT reports and returns added, removed and reweighted positions, the last group meaning a weight change of more than 0.05 points, with lines aggregated per security first. For Contrafund, March 31, 2026 to June 30, 2026: 68 added, 56 removed, 119 reweighted. Meta fell from 10.29% to 6.96% as the share count dropped from 28,374,859 to 22,235,659, and SpaceX rose from 5.10% to 6.97% across the line reshuffle above.

One trap is specific to private holdings. Positions are matched by CUSIP, then ISIN, then ticker, and lines with none of them fall back to the issuer name. So when a private issuer changes its name, the position reads as an exit plus a new buy. Check for a removed row and an added row with the same balance and value:

python
changes = get("/fund/changes", symbol="FCNTX")
print(f"{changes['previousDate']} to {changes['latestDate']}: {len(changes['added'])} added, "
      f"{len(changes['removed'])} removed, {len(changes['reweighted'])} reweighted")

gone = {(r["prevBalance"], r["prevValueUsd"]): r["name"] for r in changes["removed"] if not r["cusip"]}
for r in changes["added"]:
    match = gone.get((r["balance"], r["valueUsd"]))
    if not r["cusip"] and match:
        print(f"same position, new name: {match} -> {r['name']} "
              f"({r['balance']:,.0f} shares, ${r['valueUsd']:,.0f})")
text
2026-03-31 to 2026-06-30: 68 added, 56 removed, 119 reweighted
same position, new name: STRIPE INC -> STRIPE GLOBAL HOLDINGS INC (2,759,959 shares, $173,877,417)

Between the two reports the filed issuer name changed from STRIPE INC to STRIPE GLOBAL HOLDINGS INC. The 2,759,959 shares and the $173,877,417 value did not move, so this is one unchanged position under a new name, not a trade.

Mutual fund share classes, 12b-1 fees and expense ratios

Holdings belong to the series; fees belong to each share class. /api/fund/fees returns the prospectus fee table per class from N-1A filings: management fee, 12b-1 fee, other expenses and total expense ratio, plus fields for waivers and sales charges that are filled only when the filing tags them.

python
fees = get("/fund/fees", symbol="FCNTX", pageSize=100)["data"]
latest = max(f["filedDate"] for f in fees)
for f in fees:
    if f["filedDate"] == latest:
        print(f"{f['symbol']}  {f['accessionNumber']}  management {f['managementFee']:.2%}  "
              f"12b-1 {f['distribution12b1Fee'] or 0:.2%}  total {f['totalExpenseRatio']:.2%}")
text
C000016601  0000024238-26-000028  management 0.73%  12b-1 0.00%  total 0.74%
C000064233  0000024238-26-000028  management 0.67%  12b-1 0.00%  total 0.67%

The symbol field falls back to the SEC class ID when no ticker is mapped to the class, as for both Contrafund classes here: C000016601 is FCNTX and C000064233 is the K class, FCNKX. The SEC's mutual fund ticker file maps one to the other, and the fund ticker post linked above shows how. For a broader cost view across funds, see the ETF fee analysis API.

Read Contrafund's fee as of a date. The prospectus says its management fee “fluctuates based on the fund's performance relative to a securities market index”: a basic fee plus a performance adjustment between −0.20% and +0.20%, set by the fund's return against the S&P 500 over the past 36 months. The total expense ratio was 0.39% in the February 2024 prospectus, 0.63% in February 2025 and 0.74% in February 2026, and the February 2026 prospectus puts the adjustment for 2025 at +0.15%. Our fee series for Contrafund is currently missing the February 2025 prospectus, so that figure comes from accession 0000024238-25-000018 on EDGAR. Check which filedDate values come back before you compare years.

12b-1 fees appear per class as well. Fidelity Advisor New Insights Fund (FNIAX), another SpaceX holder, files five classes in the same prospectus: 12b-1 fees of 0.25%, 0.50% and 1.00% on three of them and none on the other two, for total expense ratios from 0.70% to 1.82%.

Which plan includes mutual fund holdings

/api/fund/holdings is on the Starter plan ($19/month, or $15/month billed annually), the ETF plan ($59/month, or $39/month billed annually) and Professional ($99/month, or $69/month billed annually). Reverse lookup, changes, fees and the adviser roster need ETF or Professional. /api/fund/profile is free, with history depth by plan (4 quarters on Free, 20 on Starter, 80 on ETF and Professional), so you can check report dates and holding counts first. , or see the full ETF and mutual fund data API.

FAQ

Q.Is there an API for mutual fund holdings?
Yes. StockFit's /api/fund/holdings returns every line of a fund's Form N-PORT report: name, title, CUSIP and ISIN when reported, shares, value, weight, asset category, fair value level and the resolved ticker. Pass any share-class ticker (FCNTX), a CIK, CUSIP or FIGI. Fidelity Contrafund's June 30, 2026 report comes back as 441 lines in one call with pageSize=1000.
Q.How often do mutual funds disclose their holdings?
Funds report holdings to the SEC on Form N-PORT for every month, but only the third month of each fiscal quarter is made public, 60 days after the quarter ends. Contrafund's June 30, 2026 report was filed on August 24, 2026. Mutual funds are not required to publish full holdings daily the way most ETFs do, so quarterly N-PORT is usually the only complete source.
Q.Which mutual funds own SpaceX?
By CUSIP match, /api/fund/reverse-lookup?symbol=SPCX returns 599 funds, led by weight by Baron Partners Fund (34.96%), Baron Asset Fund and Baron Focused Growth Fund. Fidelity funds mostly report their SpaceX shares as lock-up lines without a CUSIP, so a name sweep finds them instead: 44 Fidelity mutual funds hold SpaceX stock, led by Contrafund at $12.55 billion (6.97%) on June 30, 2026.
Q.What are Fidelity Contrafund's top holdings?
As of its June 30, 2026 N-PORT report, aggregated by issuer: NVIDIA 9.34%, SpaceX 6.97% (two lock-up lines), Meta 6.96%, Alphabet 6.84% (Class A and Class C) and Amazon 5.75%, out of 441 lines and $179.96 billion of net assets.
Q.Why does a mutual fund holding have no CUSIP or ticker?
Private company shares and restricted shares, such as IPO lock-up shares, often have no CUSIP of their own, and filers report N/A. In Contrafund's June 30, 2026 report, 85 lines worth 9.11% of net assets have neither a CUSIP nor an ISIN, including SpaceX, OpenAI, Anthropic and Stripe. Match those lines on the issuer name.
Q.What does fair value level 3 mean in a fund's holdings?
Level 3 means the fund valued the position with unobservable inputs, typically a private company mark set by its own valuation process. Level 1 is a quoted price and Level 2 uses observable inputs, such as a listed price for locked-up shares. Contrafund's Level 3 share fell from 7.00% to 1.70% of net assets when SpaceX listed.
Q.Can I get historical mutual fund holdings by quarter?
Yes. Pass reportDate to /api/fund/holdings and you get the latest N-PORT report on or before that date. /api/fund/profile lists the available dates: 28 quarters for Contrafund, back to September 30, 2019. The profile shows 4 quarters on Free, 20 on Starter and 80 on ETF and Professional.
Q.Which plan includes the mutual fund holdings API?
Holdings are on Starter ($19/month, or $15/month billed annually), ETF ($59/month, or $39/month billed annually) and Professional ($99/month, or $69/month billed annually). Reverse lookup, portfolio changes, fees and funds by adviser need ETF or Professional. Fund profiles are free.

Ready to build?

Free API key, no credit card.