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.

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:
nameandtitle: the issuer, and the specific security as the fund describes it.cusipandisin: identifiers, present only when the fund reports them.balanceandunits: a share count (NS) or a principal amount (PA).valueUsdandpctVal: the value in dollars and the weight as a percent of the fund's net assets.assetCat:ECcommon equity,EPpreferred equity,DBTdebt,STIVshort-term investment vehicles such as cash sweep funds.fairValueLevel: 1 for a quoted price, 2 for observable inputs, 3 for unobservable inputs.mappedCikandmappedSymbol: 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:
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:
{
"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:
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}")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 INCAggregating 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 filed | Lines | % of net assets | Value |
|---|---|---|---|---|
| 1 | NVIDIA CORP | 1 | 9.34% | $16.82B |
| 2 | SPACE EXPLORATION TECHNOLOGIES CORP | 2 | 6.97% | $12.55B |
| 3 | META PLATFORMS INC | 1 | 6.96% | $12.53B |
| 4 | ALPHABET INC | 2 | 6.84% | $12.31B |
| 5 | AMAZON.COM INC | 1 | 5.75% | $10.34B |
| 6 | BERKSHIRE HATHAWAY INC DEL | 2 | 3.23% | $5.81B |
| 7 | APPLE INC | 1 | 2.68% | $4.83B |
| 8 | BROADCOM INC | 1 | 2.19% | $3.93B |
| 9 | MICROSOFT CORP | 1 | 2.16% | $3.88B |
| 10 | ELI LILLY and CO | 2 | 2.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 date | Line, as filed | Type | Level | Shares | Value | % of fund |
|---|---|---|---|---|---|---|
| 2026-03-31 | SPACE EXPLORATION TECH CORP SER G PC PP | EP | 3 | 558,215 | $2.94B | 1.86% |
| 2026-03-31 | SPACE EXPLORATION TECH CORP SER N PC PP | EP | 3 | 428,458 | $2.26B | 1.43% |
| 2026-03-31 | SPACE EXPLORATION TECH CORP PP | EC | 3 | 4,084,237 | $2.15B | 1.36% |
| 2026-03-31 | SPACE EXPLORATION TECH CORP SER H PC PP | EP | 3 | 120,282 | $633.4M | 0.40% |
| 2026-03-31 | SPACE EXPLORATION TECHNOLOGIES CORP CLASS C PP | EC | 3 | 129,910 | $68.4M | 0.04% |
| 2026-06-30 | SPACE EXPLORATION TECHNOLOGIES CORP A (180 DAY LOCK UP) | EC | 2 | 73,188,869 | $12.51B | 6.95% |
| 2026-06-30 | SPACE EXPLORATION TECHNOLOGIES CORP A 144 (180 DAY LOCK UP) | EC | 2 | 247,195 | $40.1M | 0.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.
The history is one loop over the report dates that the profile lists:
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}%")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 filed | Lines | Largest line, as filed | % of fund | Value |
|---|---|---|---|---|
| ANTHROPIC PBC | 3 | ANTHROPIC PBC SERIES F PC PP | 0.27% | $488.3M |
| OPENAI GROUP PBC | 3 | OPENAI GROUP PBC A-2 PC PP | 0.23% | $407.9M |
| FANATICS INC | 1 | FANATICS HOLDINGS INC CLASS A PP | 0.13% | $231.5M |
| CANVA INC | 3 | CANVA INC CL A PP | 0.13% | $228.9M |
| DOUYIN CO LTD | 1 | BYTEDANCE LTD SER E-1 PC PP | 0.12% | $207.6M |
| ZIPLINE INTERNATIONAL INC | 5 | ZIPLINE INTERNATIONAL INC SER E PC PP | 0.11% | $200.5M |
| STRIPE GLOBAL HOLDINGS INC | 4 | STRIPE GLOBAL HOLDINGS INC SER I PC PP | 0.10% | $173.9M |
| DATABRICKS INC | 1 | DATABRICKS INC SER L PC PP | 0.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%.
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:
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:
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)}")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: 29Of 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:
| Fund | Report date | SpaceX value | % of fund | Seen by CUSIP match |
|---|---|---|---|---|
| Fidelity Contrafund (FCNTX) | 2026-06-30 | $12.55B | 6.97% | No |
| Fidelity Blue Chip Growth Fund (FBGRX) | 2026-07-31 | $3.10B | 3.14% | Only $24.2M |
| Fidelity Growth Company Fund (FDGRX) | 2026-05-31 | $2.35B | 2.38% | No |
| Fidelity Advisor New Insights Fund (FNIAX) | 2026-06-30 | $2.07B | 7.33% | Only $25.3M |
| Fidelity OTC Portfolio (FOCPX) | 2026-07-31 | $1.96B | 4.54% | No |
| Fidelity Contrafund K6 (FLCNX) | 2026-06-30 | $1.83B | 4.87% | Only $31.6M |
| Fidelity Series Opportunistic Insights Fund (FWWEX) | 2026-06-30 | $800.8M | 5.20% | No |
| Fidelity Growth Company K6 Fund (FGKFX) | 2026-05-31 | $792.3M | 2.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:
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})")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.
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%}")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?
/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?
Q.Which mutual funds own SpaceX?
/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?
Q.Why does a mutual fund holding have no CUSIP or ticker?
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?
Q.Can I get historical mutual fund holdings by quarter?
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?
Ready to build?
Free API key, no credit card.