Skip to content

Form N-MFP (Money Market Fund Holdings)

Verified Jun 9, 2026 · tested with live no-key EDGAR full-text search for N-MFP2 (efts.sec.gov, 1,017 hits in Q1 2024) plus pull of a real filing's primary_doc.xml (CIK 356476)

View this page as raw Markdown (.md)

money-market-fundssec-filingsholdingsshort-term-fundingfreeno-api-keydata:n-mfp

Form N-MFP is a monthly SEC filing that every U.S. registered money market fund must submit. Each filing discloses fund-level assets under management, fund category (e.g., Government, Prime, Tax-Exempt), and a security-level schedule of portfolio holdings: issuer name, CUSIP, maturity date, face value, amortized cost or market value, and yield. Filings are public on EDGAR as structured XML, free, and require no API key (SEC asks for a descriptive User-Agent header). Used in, for example, Anderson, Du & Schlusche, where month-end N-MFP holdings and per-fund AUM construct the Bartik shares and funding-shift measures.

For a commercial alternative with pre-parsed, time-series data, see the Crane Data Money Fund Intelligence page; N-MFP is the underlying public SEC source for those same filings.

There are two complementary EDGAR endpoints.

Full-text search across filers (covers 2001 onward, paginates):

Terminal window
# All N-MFP2 filings in Q1 2024, no key; replace the User-Agent with your own
curl -s 'https://efts.sec.gov/LATEST/search-index?q=&forms=N-MFP2&startdt=2024-01-01&enddt=2024-03-31' \
-A "Your Name your-email@example.com"

The JSON response contains a hits.hits array. Each entry’s _id field looks like "0001145549-24-015515:primary_doc.xml". The _source.display_names array holds a string such as "Fidelity Investments (CIK 0000356476)" from which you can parse the CIK; the cik field in the JSON may be empty, so parse display_names defensively.

Pull one filing’s XML (build the archive URL from CIK and accession number with dashes removed):

Terminal window
# CIK 356476, accession 0001145549-24-015515 -> dashes removed in the path
curl -s 'https://www.sec.gov/Archives/edgar/data/356476/000114554924015515/primary_doc.xml' \
-A "Your Name your-email@example.com"

The XML contains <seriesId>, <moneyMarketFundCategory> (e.g., Exempt Government), <totalValueOtherAssets>, and repeated <nameOfIssuer> rows for each holding (e.g., FEDERAL FARM CREDIT BANK, FEDERAL HOME LOAN BANK).

import json, re, urllib.request, xml.etree.ElementTree as ET
UA = {"User-Agent": "Your Name your-email@example.com"}
# 1. Query the full-text search for a date window
url = (
"https://efts.sec.gov/LATEST/search-index?q=&forms=N-MFP2"
"&startdt=2024-01-01&enddt=2024-01-31"
)
req = urllib.request.Request(url, headers=UA)
hits = json.loads(urllib.request.urlopen(req).read())["hits"]["hits"]
for hit in hits:
filing_id = hit["_id"] # e.g. "0001145549-24-015515:primary_doc.xml"
accession_raw = filing_id.split(":")[0] # "0001145549-24-015515"
accession_nodash = accession_raw.replace("-", "") # "000114554924015515"
# Parse CIK from display_names if the cik field is empty
names = hit["_source"].get("display_names", [])
cik_match = re.search(r"CIK\s+(\d+)", " ".join(names))
if not cik_match:
continue
cik = cik_match.group(1).lstrip("0") # drop leading zeros for URL
# 2. Fetch the primary XML
xml_url = (
f"https://www.sec.gov/Archives/edgar/data/{cik}"
f"/{accession_nodash}/primary_doc.xml"
)
req2 = urllib.request.Request(xml_url, headers=UA)
tree = ET.parse(urllib.request.urlopen(req2))
root = tree.getroot()
# Strip namespace for convenience
ns = {"n": root.tag.split("}")[0].lstrip("{")} if "}" in root.tag else {}
# Fund-level fields
series_id = root.findtext(".//seriesId") or root.findtext(".//n:seriesId", namespaces=ns)
category = root.findtext(".//moneyMarketFundCategory") or \
root.findtext(".//n:moneyMarketFundCategory", namespaces=ns)
# Holding rows
for issuer_el in root.iter("nameOfIssuer"):
print(series_id, category, issuer_el.text)

Inspect the tag names in the XML before production use; they vary across form versions (see Gotchas).

  • Form version determines XML schema. The form changed from N-MFP to N-MFP2 to N-MFP3, and the XML tag names and structure differ across versions. A parser keyed to one version breaks on another; branch on the form type returned in the search results before parsing.
  • One CIK, multiple series. A single filing is submitted by a fund family (one CIK) and can cover multiple series, each representing a separate fund. Key on <seriesId>, not just CIK; aggregating at the CIK level mixes funds.
  • Month-end snapshot only. N-MFP captures holdings as of the last business day of the month. Holdings between month-ends are not observed.
  • Full-text search pagination. The efts.sec.gov endpoint paginates results and covers filings from 2001 onward. Use narrow date windows and page through results rather than pulling a single large query that hits the cap.
  • User-Agent is required. The SEC fair-access policy requires a descriptive User-Agent header (name and contact email). Requests without it are throttled or blocked.
  • CIK may be embedded in display_names, not in a dedicated field. The cik field in the full-text search JSON can be empty. Parse the CIK out of the display_names string and strip leading zeros when building the archive URL path.
  • Value convention varies by tag. Holdings can be reported at amortized cost or market value depending on the schema field. Do not assume one convention; read the tag name and map it to the fund’s stated valuation method.
FormApprox. periodNotes
N-MFP2010-2016Original structured XML filing; initial schema
N-MFP22016-2023Revised schema following 2014 money market reform; tag names changed
N-MFP32024 onwardFurther schema revision; check SEC release notes for tag-level changes
TagLevelDescription
seriesIdFundSeries identifier for this fund within the filing
moneyMarketFundCategoryFundFund type: Government, Prime, Tax-Exempt, etc.
totalValueOtherAssetsFundTotal assets in dollars
nameOfIssuerHoldingIssuer name for each portfolio security
cusipHoldingCUSIP of the security, if available
finalMaturityDateHoldingStated final maturity date
percentageOfMoneyMarketFundNetAssetsHoldingHolding as a share of net assets

Tag names may differ slightly in N-MFP (the original version); verify against the filing you are parsing.

Cite the SEC, the form type and version, the filer and period, the accession number or full archive URL, and the access date, for example: U.S. Securities and Exchange Commission, Form N-MFP2, [Fund Family Name] (CIK [NNNNNN]), filing for [Month Year], accession no. [XXXXXXXXXX-XX-XXXXXX], retrieved from https://www.sec.gov/Archives/edgar/data/, accessed YYYY-MM-DD. When citing the EDGAR full-text search endpoint, note the form type, date range, and the efts.sec.gov URL so the pull is reproducible.

Found an error or want a topic covered? Open an issue, use the Edit page link above, or email contact@instituteforautomatedresearch.org. Edits are reviewed before publishing; provenance and accuracy are the point.