SEC Form N-PORT Mutual Fund Holdings Scraper
Pricing
Pay per event
SEC Form N-PORT Mutual Fund Holdings Scraper
Extract SEC EDGAR N-PORT/NPORT-P mutual fund holdings by CIK or ticker with identifiers, balances, USD values, and filing URLs.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Extract structured mutual fund portfolio holdings from public SEC EDGAR N-PORT and NPORT-P filings. Provide fund tickers or CIKs and get a flat dataset of securities, identifiers, balances, values, classifications, and source filing metadata.
What does this actor do?
This actor turns SEC N-PORT filings into analysis-ready holding rows. It resolves fund tickers through SEC ticker maps, reads each registrant's submissions JSON, filters NPORT filings, downloads the raw SEC submission document, and parses each invstOrSec holding.
Who is it for?
- ๐งพ Compliance teams monitoring mutual fund portfolio disclosures.
- ๐ Fund analysts comparing disclosed holdings across report periods.
- ๐ฆ Fintech data teams enriching security master or portfolio databases.
- ๐ Researchers who need repeatable EDGAR extraction without hand-opening filings.
- ๐ค Automation builders feeding BI, alerts, or data warehouses.
Why use it?
SEC N-PORT filings are public, but the raw XML is nested and inconsistent enough to slow down analysts. This actor provides a polite API-first workflow and returns a normalized table suitable for CSV, JSON, API, or scheduled exports.
Data you can extract
| Field group | Examples |
|---|---|
| Filing | CIK, form type, accession number, filing date, report date, raw filing URL |
| Fund | registrant name, series name, series ID, class ID, ticker |
| Security | name, title, LEI, CUSIP, ISIN |
| Position | balance, units, currency, exchange rate, value USD, percent value |
| Classification | payoff profile, asset category, issuer category, issuer country, restricted flag |
How much does it cost to scrape SEC Form N-PORT mutual fund holdings?
The actor uses pay-per-event pricing: a small start event and a per-holding result event. SEC data is public and HTTP-based, so runs are designed to be low-cost. Use maxHoldings and maxFilingsPerCik to control run size.
Input options
tickersโ mutual fund/share-class tickers such asLACAX.ciksโ SEC registrant CIKs with or without leading zeros.startDate/endDateโ filing date range filters.formTypesโ defaults toNPORT-PandNPORT-EX.maxFilingsPerCikโ recent matching filings per registrant.maxHoldingsโ maximum dataset rows for cost control.requestDelayMsโ polite delay between SEC requests.userAgentโ SEC-compliant descriptive User-Agent.
Example input
{"tickers": ["LACAX"],"ciks": ["0000002110"],"startDate": "2025-01-01","formTypes": ["NPORT-P"],"maxFilingsPerCik": 2,"maxHoldings": 100,"requestDelayMs": 350}
Example output
{"cik": "0000002110","ticker": "LACAX","formType": "NPORT-P","accessionNumber": "0001410368-26-055109","filingDate": "2026-05-28","registrantName": "COLUMBIA ACORN TRUST","seriesName": "Columbia Acorn International Select","securityName": "adidas AG","cusip": "000000000","isin": "DE000A1EWWW0","balance": 15472,"units": "NS","currency": "EUR","valueUsd": 2504247.42,"percentValue": 1.35812107416,"assetCategory": "EC","issuerCountry": "DE","rawFilingUrl": "https://www.sec.gov/Archives/..."}
How to run it
- Open the actor input page.
- Enter one or more fund tickers or CIKs.
- Set a filing date range if needed.
- Choose the maximum filings and holdings.
- Run the actor.
- Export the dataset as CSV, JSON, Excel, or via API.
SEC fair access
The actor sends a descriptive User-Agent and includes a configurable request delay. Keep concurrency low and avoid unnecessary repeat runs against the same filings. For scheduled monitoring, prefer daily or weekly cadence unless your workflow requires more frequent updates.
Ticker resolution
Mutual fund tickers are resolved through company_tickers_mf.json. If a ticker is not found there, the actor also checks the standard SEC company ticker map. You can always bypass ticker resolution by providing a CIK directly.
Filing selection
The actor reads data.sec.gov/submissions/CIK##########.json, then filters recent filings by form type and filing date. It downloads the raw .txt submission for each selected accession because that file contains the original N-PORT XML data.
Output quality notes
N-PORT filings can vary by registrant and period. Some securities may not have every identifier, and some derivatives or non-standard positions may omit fields such as ISIN or CUSIP. Missing upstream values are left blank rather than guessed.
Tips for best results
- Start with one ticker and
maxHoldingsaround 100 to confirm the target fund. - Use CIKs for production workflows when you already know the registrant.
- Increase
maxFilingsPerCikfor historical comparisons. - Keep
requestDelayMsat 350 ms or higher for polite EDGAR access. - Export CSV when analysts need quick spreadsheet review.
Integrations
- ๐ Send results to Google Sheets or a BI warehouse.
- ๐ง Feed holdings into portfolio analytics or risk classification systems.
- ๐ Schedule recurring runs and alert when a fund discloses new holdings.
- ๐งพ Archive source filing URLs for compliance evidence.
API usage: Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/sec-form-nport-mutual-fund-holdings-scraper').call({tickers: ['LACAX'],maxFilingsPerCik: 2,maxHoldings: 100});console.log(run.defaultDatasetId);
API usage: Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('automation-lab/sec-form-nport-mutual-fund-holdings-scraper').call(run_input={'tickers': ['LACAX'],'maxFilingsPerCik': 2,'maxHoldings': 100,})print(run['defaultDatasetId'])
API usage: cURL
curl -X POST "https://api.apify.com/v2/acts/automation-lab~sec-form-nport-mutual-fund-holdings-scraper/runs?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"tickers":["LACAX"],"maxFilingsPerCik":2,"maxHoldings":100}'
MCP usage
Use the Apify MCP server with Claude Code or Claude Desktop.
Claude Code setup:
$claude mcp add apify https://mcp.apify.com/?tools=automation-lab/sec-form-nport-mutual-fund-holdings-scraper
Claude Desktop JSON config:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com/?tools=automation-lab/sec-form-nport-mutual-fund-holdings-scraper"}}}
Direct MCP URL:
https://mcp.apify.com/?tools=automation-lab/sec-form-nport-mutual-fund-holdings-scraper
Example prompts:
- "Run the SEC N-PORT holdings scraper for LACAX and summarize the top holdings by value."
- "Compare the latest two NPORT-P filings for CIK 0000002110."
- "Export mutual fund holdings with CUSIP and ISIN fields for compliance review."
Scheduling and monitoring
Create an Apify task with your preferred tickers, date window, and row limit. Schedule it monthly or quarterly to track new disclosures. The raw filing URL in every row makes it easy to audit where a value came from.
FAQ
Can I scrape all holdings for a fund?
Yes. Increase maxHoldings high enough for the target filing. Large diversified funds may contain hundreds or thousands of rows.
Common troubleshooting
Why did my ticker return no filings?
Some tickers map to a class or series whose registrant may not have recent NPORT filings in the selected date range. Try providing the registrant CIK directly or widening the date window.
Why are some identifiers blank?
The actor only returns identifiers present in the SEC filing. Some holdings omit ISIN, LEI, CUSIP, currency, or fair-value fields.
Why should I provide a User-Agent?
SEC fair-access guidance asks automated clients to identify themselves. The actor includes a default User-Agent, but organizations may prefer to include their own contact string.
Legality
This actor reads public SEC EDGAR data. You are responsible for using the data in compliance with SEC terms, Apify terms, and any rules that apply to your organization or jurisdiction.
Related scrapers
- https://apify.com/automation-lab/sec-edgar-company-filings-scraper
- https://apify.com/automation-lab/sec-form-144-restricted-stock-sales-tracker
- https://apify.com/automation-lab/fixed-income-fund-tracker
- https://apify.com/automation-lab/earnings-transcripts
Changelog
- 0.1 โ Initial SEC EDGAR N-PORT holdings extraction by ticker/CIK.
Support
If a run fails or a filing parses unexpectedly, share the run ID, input, and target CIK/ticker so the issue can be reproduced.
Output field reference
ciktickerformTypeaccessionNumberfilingDatereportDateregistrantNameseriesNameseriesIdclassIdsecurityNamesecurityTitleleicusipisinbalanceunitscurrencyexchangeRatevalueUsdpercentValuepayoffProfileassetCategoryissuerCategoryissuerCountryisRestrictedSecurityfairValueLevelrawFilingUrlscrapedAt