Blue Moon docs
A quick guide to what Blue Moon does, what the numbers mean, and where the data comes from.
Overview
Blue Moon hunts for open-end mutual funds that hold private / illiquid (Level 3) securities (the pattern made famous by a fund holding a stake in SpaceX). Because these funds price once a day at NAV and their private holdings are only revalued periodically, a markup shows up as a sudden, one-day jump in NAV.
There are two ways to find these funds, and Blue Moon does both:
The tabs
- Private Funds Screener
- The full universe of funds, rankable by Level 3 % and Restricted %. Filter by fund type, AUM, and illiquidity, then save a set of filters as a shareable “screen”. This is the “rank by % private, hide the public-only funds” view.
- NAV Jumps
- The largest one-day NAV moves flagged as statistical outliers over a trailing window (2 weeks, 3 months, or 6 months; 6 months by default, since NAV remarks are often a slow, quarterly process). Up moves on high-Level 3 funds are the revaluation signal we care most about. Sort by Move or Z, or toggle to all directions.
- Potential IPOs
- The private / illiquid issuers (e.g. SpaceX, Stripe) held across every fund, ranked by total value held. The "Max % in fund" column shows the largest exposure any single open-end fund has to that issuer, the share of a fund that really drives the opportunity. Click an issuer to see which funds hold it, a way to find pre-IPO exposure through public funds.
Glossary
- NAV (Net Asset Value)
- A fund's per-share value. Mutual funds price once a day after the close, and you buy and sell at that same NAV, with no intraday bid/ask spread. Every move in this app is a change in NAV.
- AUM ($M)
- Assets under management: the fund's net assets, shown in millions of dollars from its latest N-PORT filing.
- Level 3 %
- Level 3 (private / illiquid) holdings as a % of net assets, the illiquidity signal. Level 3 means the value is an estimate with no observable market price (e.g. a stake in a private company like SpaceX). See the fair-value levels for the full 1 / 2 / 3 hierarchy.
- Restricted %
- Restricted (privately placed / not freely tradable) holdings as a % of net assets. Overlaps with Level 3 but is reported separately, so it's a useful cross-check.
- Private / illiquid
- Shorthand for holdings that don't trade on a public market and are revalued only periodically (quarterly, monthly, or on an event) rather than continuously. These are what create the NAV jumps we look for.
- Interval fund
- A fund that only lets investors redeem during periodic repurchase offers, but is still priced daily at NAV. We include these alongside open-end funds because the NAV-jump logic still applies.
- Move
- The one-day NAV return for a flagged jump (today's NAV ÷ yesterday's − 1).
- Z (z-score)
- The move's size in standard deviations versus the fund's trailing volatility. A big move on a normally calm fund has a high Z even if the percentage looks small, and that's the outlier we care about.
- Next 5d (follow-through)
- Cumulative NAV return over the 5 trading days after a jump. The core hypothesis: an upward revaluation is often incomplete, so up-jumps tend to be followed by further gains.
- Open-end vs ETF / CEF / UIT
- The fund's structure. Jump detection is only meaningful for funds priced at NAV (open-end and interval funds), so intraday-traded ETFs and closed-end funds are excluded from the default screens but stay filterable.
The fair-value levels (1, 2, 3)
Funds classify every holding into one of three levels under the accounting fair-value hierarchy (GAAP ASC 820), reported on N-PORT. The levels describe how a holding is priced, from a hard market quote down to a pure estimate:
- Level 1: quoted prices in active markets. A listed stock or ETF that trades continuously, so the price is unambiguous.
- Level 2: no direct quote, but priced from observable inputs (recent trades in similar securities, yield curves, matrix pricing). Most bonds land here.
- Level 3: priced with unobservable inputs, i.e. the manager's own model or estimate, because there is no market to look at (a stake in a private company like SpaceX). This is the level that produces NAV jumps: when a Level 3 holding is remarked, the NAV moves in a sudden step rather than drifting.
Level 3 vs Restricted: what's the difference?
They overlap heavily but measure different things, which is why we track both. Level 3 is about price discovery: there's no observable market price, so the fund has to estimate it (this is the remark/jump engine). Restricted is a legal attribute: the security was privately placed (Rule 144A, Reg D, lockups) and can't be freely sold to the public. A true private-company stake is usually both, which is the pattern we're after, but the two are independent: a holding can be Level 3 yet freely tradable (hard to price, easy to sell), and a 144A bond can be restricted yet Level 2 (legally restricted, but priced off observable inputs). We show both so you can cross-check.
Where the data comes from
Everything starts with public SEC filings for fund holdings and structure, plus daily price feeds for NAV history.
| Source | What it gives | Cadence |
|---|---|---|
| SEC N-PORT | Per-holding fair-value level (1/2/3), restricted-security flag, value, % of net assets, issuer, plus fund net assets and monthly flows. | Filed quarterly, public ~60 days after quarter-end. |
| SEC N-CEN | Fund type (open-end / closed-end / ETF / UIT) and interval-fund flags. | Annual. |
| company_tickers_mf.json | The map from SEC fund → share class → ticker. | Refreshed daily (some classes have no ticker). |
| Yahoo Finance | Daily NAV history per ticker (primary source). | Daily; small funds can have gaps. |
| Tiingo | Daily NAV history, used as a fallback when Yahoo is missing data. | Daily; rate-limited. |
How ingestion works
Data is loaded by a set of ingestion jobs: one syncs the fund universe and types, one pulls N-PORT holdings to compute Level 3 % / Restricted %, and one fetches daily NAV (Yahoo, falling back to Tiingo) to detect jumps. For now these are run on demand; automatic daily refresh is planned.
Worth knowing: N-PORT holdings are public roughly a quarter behind, so Level 3 % is a slow signal. That's exactly why the price-derived jump detection matters: it reacts the day a fund remarks its private holdings.
How the numbers are computed
- Level 3 % / Restricted %
- Level 3 (or restricted) value ÷ net assets, from the fund's latest N-PORT snapshot.
- Daily return (Move)
- today's NAV ÷ yesterday's NAV − 1.
- Jump
- A day flagged as an outlier, either the move clears an absolute threshold (default 3%) or its Z (size in standard deviations vs the fund's trailing volatility) is large. The Z test lets calm, low-volatility funds flag correctly even on small percentage moves.
- Follow-through (Next 5d)
- Cumulative NAV return over the 5 trading days after a jump, measuring whether an up-move keeps going, the heart of the strategy.
Changelog
- ChangedThe NAV jumps analysis now covers all open-end mutual funds, not just those with disclosed private or illiquid (Level 3) holdings. A fund with zero Level 3 that still jumps is worth seeing, and its Level 3 and restricted amounts are shown as context rather than used as a filter.
- AddedA 'Muni funds only' filter on both the NAV Jumps page and the screener, so you can find the largest NAV jumps among municipal bond funds (or just browse muni funds).
- AddedA new Discount to NAV page for closed-end funds. It shows each fund's market price against its NAV and ranks the largest discounts (and premiums), the classic closed-end value signal, with a muni filter too.
- AddedA closed-end fund's detail page now charts its market price against NAV over the past year, so you can see how its discount or premium has moved.
- AddedA Muni % column on the screener showing each fund's municipal-bond exposure computed from its holdings, so you can rank and filter funds by how muni-heavy they are (not just by name).
- ChangedThe NAV jumps analysis now covers more funds: around 700 funds the SEC's annual classification had left unlabeled are now correctly identified as open-end and included.
- FixedClosed-end fund and ETF pages no longer show NAV-jump metrics, which don't apply to exchange-traded funds (their daily price is a market quote, not NAV). Closed-end pages focus on the discount or premium to NAV instead.
- FixedThe Discount to NAV page filters out funds with bad or delisted price data, so an implausible discount or premium from a stale quote can't top the list.
- ChangedThe NAV jumps page now shows the largest moves over a trailing window rather than just the last couple of weeks, and defaults to 6 months. NAV remarks of illiquid holdings are a slow, often quarterly process, so a longer lookback surfaces far more funds and keeps a big move visible for months instead of dropping off after two weeks.
- AddedA 2W / 3M / 6M window selector on the NAV jumps page so you can widen or narrow the lookback.
- AddedThe Docs glossary now spells out all three fair-value levels (1, 2, 3) and explains how Level 3 (a pricing/estimate question) differs from Restricted (a legal/resale question), so it's clearer why a fund can be one without the other.
- AddedThe Docs sidebar now lists the sub-topics under each section, so you can jump straight to a specific topic and link directly to it.
- AddedCross-references within the Docs are now clickable: when a section mentions a topic explained elsewhere (Level 3, the tabs, how a number is computed), the term links straight to it.
- FixedIssuer exposure figures were too high. The 'Max % in fund' on the leaderboard and the '% of fund' (and total value) in the issuer drill-down were adding up every quarter a fund had filed, so a steady ~7% position read as ~17%. Each fund is now measured from its latest filing only, matching the fund detail page. Databricks, for example, drops from 17% to about 7%.
- ChangedRecent NAV jumps now lists open-end mutual funds only. ETFs, closed-end and interval funds trade on an exchange, so their price moves are not the NAV-remark signal this page is built to surface.
- FixedSorting a table column no longer freezes the page. The tables were re-rendering continuously in the background, which could lock up the browser when you clicked a column header.
- ChangedThe 'Max % in fund' column now only counts open-end funds, since those are the ones you can actually buy into. ETFs and closed-end funds that hold the issuer no longer inflate the figure.
- AddedPotential IPOs now shows a 'Max % in fund' column: the highest exposure any single tradeable fund has to that issuer. That share of a fund, more than the dollar total, is what drives the opportunity. Sort by it to surface the most concentrated bets. Issuers held only by non-tradeable funds show 'n/a'.
- AddedDocs section (the Docs link in the header) explaining the metrics, the three tabs, where the data comes from, and how the numbers are computed.
- AddedA version chip in the header that links straight to the notes for the current release.
- FixedColumn headers in every table show their description on hover again.
- ChangedRemoved the back links on the fund and issuer pages; use the header tabs or your browser's back button instead.
- ChangedRebuilt every data grid (Screener, NAV Jumps, Potential IPOs) on TanStack Table for snappier sorting and filtering.
- AddedResponsive header and horizontally scrollable fund-detail tables so the app is usable on phones and tablets.
- AddedPotential IPOs leaderboard is now sortable by any column, with a precomputed total so the page loads instantly.
- FixedGrids now show a loading indicator while data is fetching instead of a misleading “no results” message.
- AddedNAV Jumps feed: one-day NAV moves flagged as statistical outliers, with z-score and 5-day follow-through.
- AddedPotential IPOs: a leaderboard of the private / illiquid issuers held across funds (the SpaceX / Stripe hunt).
- AddedSaved screens: capture a set of filters and sorts and reload them as a shareable link.
- AddedPrivate Funds Screener: rank funds by disclosed Level 3 % and Restricted %, filter by type and AUM.
- AddedFund universe and N-PORT ingestion from SEC filings, with daily NAV history from Yahoo Finance and Tiingo.
- AddedFund-detail pages with NAV charts, holdings, and EDGAR filing links.