FL
FundLens
← Back to blog

SEC N-PORT filings explained for developers

·2 min read·FundLens

Most US mutual funds and ETFs disclose their full portfolios to the SEC on Form N-PORT. If you want reliable holdings data, it helps to understand where it comes from — and why a clean API saves you weeks of filing-parsing work.

What is Form N-PORT?

N-PORT is the monthly portfolio report that registered funds file with the SEC. It contains every position the fund held at month-end: the security, its identifiers, quantity, market value, and percentage of net assets, plus fund-level totals like net assets and currency.

Funds file N-PORT every month, but the reports become public on a delayed, quarterly basis — the filings for each quarter are released after a lag. That cadence matters: it means a fund's public holdings history is a series of point-in-time snapshots, not a live feed.

Why the raw filings are painful

The data is technically free on SEC EDGAR, but in practice:

  • It's XML, not JSON, and the schema is verbose.
  • Security identifiers are inconsistent across filers (CUSIP, ISIN, ticker, or none).
  • You have to stitch thousands of individual filings together to build a time series.
  • Share-class tickers don't always map cleanly to the filing entity.

This is exactly the normalization layer FundLens provides: one schema, consistent identifiers, and dollar values across every fund and every snapshot.

Working with point-in-time snapshots

Because each filing is a snapshot, the right mental model is "list the available dates, then pull the one you want." The history endpoint enumerates every filing FundLens has for a fund:

curl "https://api.fundlens.io/v1/funds/VTI/holdings/history" \
  -H "x-api-key: YOUR_API_KEY"

Then pull any specific snapshot by passing its date to the holdings endpoint with as_of. This avoids look-ahead bias: you're always working with what was actually disclosed as of that date.

Where to go next