.jpg)
Net asset value looks like the simplest number in finance. One price, once a day, per fund. No bid, no ask, no tick data.
That apparent simplicity is exactly why mutual fund NAV time series break quietly. A fund's NAV drops four percent on a Tuesday and nothing is wrong: it paid a distribution. Two share classes of the same fund report different NAVs forever. A fund disappears from your universe and your backtest gets better. None of these throw an error. They just make your numbers wrong in ways nobody notices until someone asks why your three-year return does not match the fund's fact sheet.
A mutual fund NAV API solves the retrieval problem. Understanding what the number actually is solves the rest.
Net asset value is the per-share value of a fund's portfolio:
NAV = (total assets − total liabilities) ÷ shares outstanding
Two properties make it behave differently from a stock price.
First, it is struck once per day, after the market closes, typically as of 4pm Eastern. There is no intraday NAV. A mutual fund NAV time series is one observation per trading day, full stop.
Second, for open-end funds it is the transaction price. You do not buy a mutual fund at a quoted market price from another investor. You buy from the fund itself at the next NAV calculated after your order is received, which is called forward pricing. The NAV is not an estimate of what the fund is worth, it is what you actually transact at.
Closed-end funds work differently and the distinction matters. A closed-end fund has a fixed share count and trades on an exchange, so it has both a NAV and a market price, and those two numbers routinely diverge. The gap is the premium or discount, and it is a meaningful signal in its own right. Intrinio's Mutual Fund Data feed covers both open-end and closed-end funds, which means you can compute that spread rather than having to source the two sides from different vendors.
The fund's administrator values every position at the day's closing prices, adds cash and receivables, subtracts liabilities and accrued expenses, and divides by shares outstanding.
Three details in that process explain most of the confusion downstream.
Expenses are accrued daily and embedded in NAV. A fund's expense ratio is not billed to you separately. It is deducted from fund assets a little at a time, every day, before NAV is struck. The performance you see in a NAV series is already net of fees.
That is why share classes have different NAVs. An A-class, an I-class, and an R6-class of the same fund hold an identical portfolio, but they carry different expense ratios, so their NAVs diverge from the day each class launches and never reconverge. They are not the same time series and must never be treated as one.
Foreign holdings get fair value pricing. When a fund holds securities on markets that closed hours before the US close, the administrator may adjust those stale prices to reflect subsequent moves. This is legitimate and required, but it means NAV is not always a mechanical sum of last traded prices.
NAV is published by the fund after the close and propagates to data vendors overnight. Intrinio's mutual fund data is sourced from Cannon Valley Research, updated daily, with more than 12 years of history.
Start with the right identifier. This is the single most common integration mistake. Fund identity lives at the share class level, not the fund level. "Growth Fund" is not an addressable thing; the A-class of Growth Fund with its own ticker and CUSIP is. Key your storage on the share class identifier from the first line of code, because retrofitting that later means reloading everything.
Current NAV is the latest observation for a share class. This is what a fund detail page or a portfolio valuation screen calls.
Historical NAV is a date-bounded series for the same identifier. This is what performance analysis, charting, and backtesting call.
Match the access method to the job. Pulling 12 years of daily NAV across a few thousand share classes is a bulk operation, not a loop of per-fund API calls. Intrinio delivers mutual fund data over both the API and CSV, so the sensible pattern is a CSV bulk load for the initial backfill and history rebuilds, then daily API calls to keep current. Teams that try to backfill through the API one fund at a time spend days on something that should take an hour.
Pull the context alongside the prices. The same feed carries holdings, strategy, objective, issuer, expenses, and returns. Joining those to the NAV series on the same identifier is what turns a price history into something a user can actually interpret, and it saves you reconciling identifiers across two vendors.
Returns must be distribution-adjusted. This is the one that bites hardest. Funds distribute income and realized capital gains, and NAV drops by the distribution amount on the ex-date. If you compute returns from the raw NAV series, every distribution reads as a loss, and you will systematically understate performance. The effect is large: for an income-oriented fund it can swamp the actual return entirely. Use distribution-adjusted values, or add distributions back yourself, but never compute a return from raw NAV change alone.
Fee drag is already in the series. Because expenses are deducted before NAV is struck, a NAV-based return is net of fees. You do not subtract the expense ratio again. Doing so double-counts and is a surprisingly common error in homegrown analytics.
Compare like with like. Two funds are only comparable at the share class level, since class differences are the whole reason NAVs diverge. Comparing an institutional class against a retail class of a competitor tells you about fee structures, not management.
Use the standard measures. With a clean adjusted series you can compute trailing and annualized returns, rolling volatility, maximum drawdown, correlation, and tracking error against a benchmark. The objective and strategy fields let you build genuine peer groups rather than comparing a short-duration bond fund to an equity fund because they happen to be in the same list.
For closed-end funds, watch the spread. NAV against market price gives you the premium or discount, and its history tells you whether the current level is unusual for that fund.
Six failure modes account for most broken fund datasets.
Distributions. Covered above, and worth repeating because it is the most damaging. A NAV series with unhandled distributions is not a performance series.
Share class collisions. Storing by fund name or by a loose identifier merges classes with different fee structures into one nonsensical series. Key on the share class.
Pricing calendar gaps. Funds do not strike NAV on market holidays, and funds with significant foreign exposure may follow different pricing calendars. Decide deliberately whether to forward-fill or leave the gap, and apply it consistently, because the choice changes your volatility calculations.
Survivorship bias. Funds merge, liquidate, and reorganize constantly, and poor performers disappear disproportionately. A universe built only from funds that exist today will show returns that no investor could have achieved. Retain dead funds and their final NAVs if you are doing anything historical.
Restatements. NAVs get corrected after publication. Treat recent history as provisional and re-pull a trailing window rather than assuming a value written once is final forever.
Timing mismatches. NAV is a single end-of-day point. Joining it to intraday equity data, or to a benchmark struck at a different time, introduces a mismatch that looks like alpha and is not. Align on the pricing date and be explicit about what time each series represents.
Intrinio's Mutual Fund Data feed provides net asset values, holdings, strategy, objective, issuer, expenses, and returns for both open-end and closed-end funds, sourced from Cannon Valley Research with more than 12 years of history, updated daily and delivered over the API and as CSV.
This feed sits in the Other Data family and is available on the Enterprise plan, priced per feed, so you take the fund data your product needs rather than a fixed bundle.
Request Enterprise Access to talk through fund coverage, history depth, and how NAV data fits alongside the pricing and fundamentals feeds you are already running.