OTHERAI

SEC 13F Institutional Holdings Tracker

Track what the world's largest institutional investors are buying and selling by extracting position-level portfolio data from SEC 13F-HR filings. Enter an investor name, ticker, or CIK number and get back their complete portfolio with every holding, dollar values, share counts, voting authority, and quarter-over-quarter changes showing new positions, exits, increases, and decreases.

Try on Apify Store
$0.03per event
0
Users (30d)
0
Runs (30d)
90
Actively maintained
Maintenance Pulse
$0.03
Per event

Maintenance Pulse

90/100
Last Build
Today
Last Version
1d ago
Builds (30d)
8
Issue Response
N/A

Cost Estimate

How many results do you need?

result-returneds
Estimated cost:$3.00

Pricing

Pay Per Event model. You only pay for what you use.

EventDescriptionPrice
result-returnedCharged per financial/government data result returned.$0.03

Example: 100 events = $3.00 · 1,000 events = $30.00

Documentation

Track what the world's largest institutional investors are buying and selling by extracting position-level portfolio data from SEC 13F-HR filings. Enter an investor name, ticker, or CIK number and get back their complete portfolio with every holding, dollar values, share counts, voting authority, and quarter-over-quarter changes showing new positions, exits, increases, and decreases.

SEC 13F Institutional Holdings Tracker queries the SEC EDGAR database to fetch the latest 13F-HR filings for any institutional investment manager. It parses the XML information tables to extract every position, computes portfolio-level statistics (total value, top 10 concentration, position count), and optionally compares the latest filing with the previous quarter to identify exactly what changed. The actor handles CIK lookups, accession number resolution, and XML parsing automatically -- you just provide a list of investor names.

What data can you extract?

Data PointSourceExample
Investor nameSEC EDGARBERKSHIRE HATHAWAY INC
CIK numberSEC company tickers0001067983
Filing date13F-HR submission2024-02-14
Report dateQuarter end2023-12-31
Total portfolio valueComputed$348.7B
Number of positionsComputed42
Top 10 concentrationComputed87.3%
Holdings13F information tableName, CUSIP, value, shares, voting authority
Quarter-over-quarter changesComputedNEW, EXIT, INCREASE, DECREASE, UNCHANGED
Filing URLSEC EDGARDirect link to the filing document

Why use SEC 13F Institutional Holdings Tracker?

Researching 13F filings manually on SEC EDGAR is painful. You have to search by CIK, navigate the filing index, find the right XML file among multiple documents, parse the XML to extract holdings, and then repeat the entire process for the previous quarter to see what changed. For tracking multiple investors, this does not scale.

This actor automates every step: looks up the CIK from a company name or ticker, finds the latest 13F-HR filings, locates and parses the information table XML, extracts every position, computes portfolio statistics, and calculates quarter-over-quarter changes.

Built on the Apify platform, SEC 13F Institutional Holdings Tracker gives you:

  • Scheduling -- run quarterly after 13F filing deadlines (45 days after quarter end)
  • API access -- integrate into investment research platforms, portfolio analytics tools, or trading systems
  • Batch processing -- track multiple investors in a single run
  • Integrations -- connect to Google Sheets, Zapier, Make, or webhooks

Features

  • Flexible investor lookup -- search by company name, stock ticker, or CIK number
  • Full position extraction -- every holding from the 13F information table including name of issuer, title of class, CUSIP, value (in dollars), share count, share type, investment discretion, and voting authority (sole, shared, none)
  • Quarter-over-quarter change tracking -- automatically fetches the previous quarter's filing and computes changes for every position: NEW (not in previous quarter), EXIT (removed), INCREASE (more shares), DECREASE (fewer shares), or UNCHANGED
  • Portfolio summary -- total portfolio value, total positions, top 10 concentration percentage, and top 10 holdings with portfolio weight
  • Batch investor tracking -- process multiple investors in a single run
  • Minimum position filter -- exclude small positions below a dollar threshold
  • Configurable holding limits -- cap the number of holdings per investor (sorted by value)
  • SEC rate limit compliance -- enforces 200ms minimum between requests (5 req/sec, well within SEC's 10 req/sec limit)
  • Robust XML parsing -- handles the various 13F XML formats across different filers with namespace stripping and recursive element search

Use cases for tracking 13F holdings

Following legendary investors

Track the portfolios of Warren Buffett (Berkshire Hathaway), Bill Ackman (Pershing Square), Cathie Wood (ARK Investment), Ray Dalio (Bridgewater), and other prominent investors. See exactly what they bought and sold each quarter.

Investment idea generation

Screen new positions (changeType: NEW) from top-performing funds to discover stocks that sophisticated investors are initiating positions in. Cross-reference multiple funds to find convergent bets.

Portfolio overlap analysis

Compare holdings across multiple institutional investors to identify crowded trades (stocks held by many funds) and contrarian bets (stocks where one fund is buying while others sell).

Hedge fund monitoring

Track activist investors and hedge funds known for influencing corporate governance. Monitor new positions that could signal upcoming activist campaigns.

Institutional ownership research

For any publicly traded company, identify which institutions hold positions by searching multiple 13F filers and filtering for the relevant CUSIP.

Compliance and reporting

Regulatory compliance teams track institutional ownership patterns for securities lending, proxy voting, and beneficial ownership reporting purposes.

How to track 13F holdings

  1. Enter investor names -- Provide one or more investor names, tickers, or CIK numbers in the input. For example: "BERKSHIRE HATHAWAY", "BRK-A", or "1067983".
  2. Configure options -- Enable or disable change tracking, set maximum holdings per investor, and optionally set a minimum position value filter.
  3. Run the actor -- Click "Start" to begin. The actor looks up CIKs, fetches 13F filings, parses XML information tables, and computes statistics.
  4. Download results -- Once finished, download your data as JSON, CSV, or Excel from the Dataset tab. Each investor produces one output record.

Input parameters

ParameterTypeRequiredDefaultDescription
investorsstring[]Yes--List of institutional investors to look up. Accepts company names, stock tickers, or CIK numbers.
includeChangeTrackingbooleanNotrueCompare latest filing with previous quarter to show position changes (NEW, EXIT, INCREASE, DECREASE).
maxHoldingsintegerNo500Maximum number of holdings to include per investor, sorted by value descending (1-10,000).
minPositionValueintegerNo0Only include positions worth at least this amount in dollars. Set to 1000000 to filter out positions under $1M.

Input examples

Track a single legendary investor:

{
    "investors": ["BERKSHIRE HATHAWAY"],
    "includeChangeTracking": true,
    "maxHoldings": 100
}

Batch track multiple funds:

{
    "investors": [
        "BERKSHIRE HATHAWAY",
        "PERSHING SQUARE",
        "BRIDGEWATER ASSOCIATES",
        "ARK INVESTMENT MANAGEMENT",
        "SCION ASSET MANAGEMENT"
    ],
    "maxHoldings": 50,
    "minPositionValue": 10000000
}

Full portfolio dump without changes:

{
    "investors": ["1067983"],
    "includeChangeTracking": false,
    "maxHoldings": 10000
}

Input tips

  • Use company names for best results -- "BERKSHIRE HATHAWAY" works better than trying to guess the exact CIK number. The actor searches SEC's company tickers database.
  • Set minPositionValue for cleaner output -- Large institutional portfolios can have hundreds of small positions. Filter at $1M+ or $10M+ to focus on meaningful positions.
  • Disable change tracking for speed -- If you only need the current portfolio, set includeChangeTracking to false to skip fetching the previous quarter's filing.

Output example

Each item in the output dataset represents one investor's portfolio:

{
    "investor": "BERKSHIRE HATHAWAY INC",
    "cik": "0001067983",
    "filingDate": "2024-02-14",
    "reportDate": "2023-12-31",
    "accessionNumber": "0000950123-24-001234",
    "filingUrl": "https://www.sec.gov/Archives/edgar/data/1067983/000095012324001234/primary_doc.xml",
    "portfolio": {
        "totalValue": 348700000000,
        "totalPositions": 42,
        "top10Concentration": 87.3,
        "top10Holdings": [
            {
                "name": "APPLE INC",
                "value": 174300000000,
                "percentOfPortfolio": 49.98
            },
            {
                "name": "BANK OF AMER CORP",
                "value": 34800000000,
                "percentOfPortfolio": 9.98
            }
        ]
    },
    "holdings": [
        {
            "nameOfIssuer": "APPLE INC",
            "titleOfClass": "COM",
            "cusip": "037833100",
            "value": 174300000000,
            "shares": 905560000,
            "sharesType": "SH",
            "investmentDiscretion": "SOLE",
            "votingSole": 905560000,
            "votingShared": 0,
            "votingNone": 0
        }
    ],
    "changes": [
        {
            "cusip": "037833100",
            "nameOfIssuer": "APPLE INC",
            "titleOfClass": "COM",
            "currentValue": 174300000000,
            "previousValue": 156400000000,
            "valueChange": 17900000000,
            "valueChangePercent": 11.44,
            "currentShares": 905560000,
            "previousShares": 915560000,
            "sharesChange": -10000000,
            "sharesChangePercent": -1.09,
            "changeType": "DECREASE"
        },
        {
            "cusip": "92556V106",
            "nameOfIssuer": "VISA INC",
            "titleOfClass": "COM CL A",
            "currentValue": 0,
            "previousValue": 2100000000,
            "valueChange": -2100000000,
            "valueChangePercent": -100,
            "currentShares": 0,
            "previousShares": 8297460,
            "sharesChange": -8297460,
            "sharesChangePercent": -100,
            "changeType": "EXIT"
        }
    ],
    "previousFilingDate": "2023-11-14",
    "searchedAt": "2026-03-18T14:30:00.000Z"
}

Output fields

FieldTypeDescription
investorstringInvestor/company name from SEC records
cikstringSEC Central Index Key (10-digit, zero-padded)
filingDatestringDate the 13F-HR was filed with the SEC
reportDatestringQuarter end date the filing covers
accessionNumberstringSEC accession number for the filing
filingUrlstringDirect URL to the filing on SEC EDGAR
portfolio.totalValuenumberTotal portfolio value in dollars
portfolio.totalPositionsnumberNumber of positions in the portfolio
portfolio.top10ConcentrationnumberPercentage of portfolio value in the top 10 holdings
portfolio.top10Holdingsobject[]Top 10 positions with name, value, and percentOfPortfolio
holdingsobject[]Complete position list with nameOfIssuer, titleOfClass, cusip, value, shares, sharesType, investmentDiscretion, votingSole, votingShared, votingNone
changesobject[]/nullQuarter-over-quarter changes (null if change tracking disabled). Each with cusip, currentValue, previousValue, valueChange, valueChangePercent, currentShares, previousShares, sharesChange, sharesChangePercent, changeType
previousFilingDatestring/nullFiling date of the previous quarter's 13F used for change comparison
searchedAtstringISO timestamp of when the search was performed

How much does it cost to track 13F holdings?

SEC 13F Institutional Holdings Tracker uses compute-based pricing on the Apify platform. Costs depend on memory allocation (512 MB default) and run time.

ScenarioInvestorsChange TrackingEst. RuntimeEst. Cost
Single investor (latest only)1No~15 sec~$0.005
Single investor (with changes)1Yes~30 sec~$0.01
Batch of 5 investors5Yes~2 min~$0.04
Batch of 20 investors20Yes~8 min~$0.12

Apify Free Tier: New Apify accounts receive $5 of free platform credits each month.

Track 13F holdings using the API

Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("ryanclinton/sec-13f-holdings").call(run_input={
    "investors": ["BERKSHIRE HATHAWAY", "PERSHING SQUARE"],
    "includeChangeTracking": True,
    "maxHoldings": 50,
    "minPositionValue": 10000000,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    p = item["portfolio"]
    print(f"{item['investor']}: ${p['totalValue']/1e9:.1f}B across {p['totalPositions']} positions")
    if item.get("changes"):
        new_pos = [c for c in item["changes"] if c["changeType"] == "NEW"]
        exits = [c for c in item["changes"] if c["changeType"] == "EXIT"]
        print(f"  {len(new_pos)} new positions, {len(exits)} exits")

JavaScript

import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: "YOUR_API_TOKEN" });

const run = await client.actor("ryanclinton/sec-13f-holdings").call({
    investors: ["BERKSHIRE HATHAWAY", "PERSHING SQUARE"],
    includeChangeTracking: true,
    maxHoldings: 50,
    minPositionValue: 10000000,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
    const p = item.portfolio;
    console.log(`${item.investor}: $${(p.totalValue / 1e9).toFixed(1)}B across ${p.totalPositions} positions`);
    if (item.changes) {
        const newPos = item.changes.filter(c => c.changeType === "NEW").length;
        const exits = item.changes.filter(c => c.changeType === "EXIT").length;
        console.log(`  ${newPos} new positions, ${exits} exits`);
    }
}

cURL

# Start the actor run
curl -X POST "https://api.apify.com/v2/acts/ryanclinton~sec-13f-holdings/runs?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "investors": ["BERKSHIRE HATHAWAY"],
    "includeChangeTracking": true,
    "maxHoldings": 50
  }'

# Fetch results (replace DATASET_ID from the run response)
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN&format=json"

How the SEC 13F holdings tracker works

Step 1: CIK lookup

For each investor query, the actor loads the SEC company tickers file (~14,000 entries) and searches by CIK number, stock ticker, or company name (case-insensitive substring match). This maps the user's query to the SEC's Central Index Key needed for all subsequent API calls.

Step 2: Find 13F filings

The actor fetches the investor's submissions from data.sec.gov/submissions/CIK{cik}.json, which contains the complete filing history. It filters for 13F-HR form types and takes the most recent filing (plus the second-most-recent if change tracking is enabled).

Step 3: Fetch and parse XML

For each filing, the actor fetches the filing index to locate the information table XML file. 13F filers use inconsistent naming -- the actor searches for files containing "infotable", "info_table", or "13f" in the filename, with fallback heuristics for non-standard names. The XML is parsed with fast-xml-parser, handling namespace prefixes and case variations in element names.

Step 4: Extract holdings

Each infoTable entry is transformed into a holding record. The value field in the XML is reported in thousands of dollars, so the actor multiplies by 1,000 to convert to actual dollar values. Share counts, share types (SH for shares, PRN for principal amount), investment discretion, and voting authority breakdowns are extracted from their respective XML elements.

Step 5: Compute changes

If change tracking is enabled and two filings are available, the actor maps both quarters' holdings by CUSIP. Positions present in the current quarter but not the previous are tagged NEW. Positions absent from the current quarter but present in the previous are tagged EXIT. Positions in both quarters are compared by share count: more shares = INCREASE, fewer = DECREASE, same = UNCHANGED. Changes are sorted by absolute value change.

Step 6: Output

Holdings are filtered by minimum value, sorted by value descending, and capped at the maxHoldings limit. The portfolio summary, holdings, and changes are assembled into the final output record.

Limitations

  • 13F filers only -- Only institutional investment managers with over $100M in qualifying assets are required to file 13F-HR. Smaller funds, individuals, and non-U.S. investors are not covered.
  • Quarterly snapshots -- 13F filings are snapshots of holdings as of the end of each calendar quarter. Intra-quarter trading activity is not visible.
  • 45-day filing delay -- Managers have 45 days after quarter end to file. Q4 filings (December 31) are due by February 14; Q1 (March 31) by May 15; etc.
  • Long equity only -- 13F filings only report long positions in qualifying securities (equities, options, warrants, convertible bonds). Short positions, fixed income, derivatives, and private investments are not included.
  • Confidential treatment -- Some filers request confidential treatment for certain positions, which means those holdings may be omitted or delayed.
  • XML format variations -- 13F XML formats vary across filers and time periods. The actor handles known variations but rare edge cases may result in incomplete parsing.
  • SEC rate limits -- The actor respects SEC EDGAR's rate limit (10 req/sec) by enforcing a 200ms minimum interval between requests.

Integrations

  • Zapier -- Trigger workflows when new 13F data is available (run quarterly after filing deadlines).
  • Make -- Build automated portfolio monitoring pipelines.
  • Google Sheets -- Export holdings to Google Sheets for collaborative analysis and charting.
  • Apify API -- Call the actor programmatically from investment research platforms or trading systems.
  • Webhooks -- Get notified when a tracking run completes.

FAQ

What is a 13F filing? SEC Form 13F-HR is a quarterly report filed by institutional investment managers who exercise investment discretion over $100M or more in qualifying securities. It lists every equity position held as of the end of the calendar quarter.

When are 13F filings due? Filings are due 45 calendar days after the end of each quarter: February 14 (Q4), May 15 (Q1), August 14 (Q2), November 14 (Q3). Most managers file on or near the deadline.

Can I look up an investor by ticker symbol? Yes. The actor searches SEC's company tickers database, so you can use company names ("BERKSHIRE HATHAWAY"), tickers ("BRK-A"), or CIK numbers ("1067983").

What does "top 10 concentration" mean? It is the percentage of the total portfolio value held in the top 10 largest positions. A high concentration (e.g., 90%) means the portfolio is concentrated in a few stocks. A low concentration (e.g., 30%) means holdings are widely diversified.

Why are some positions missing from the changes? If you set a minPositionValue filter, small positions are excluded from the current holdings list. However, if a position was above the threshold in the previous quarter, it will appear as an EXIT in the changes.

How is "value" calculated? Values in the 13F XML are reported in thousands of dollars. The actor converts to actual dollars by multiplying by 1,000. For example, a value of 174300 in the XML becomes $174,300,000.

Can I track changes across more than two quarters? Currently, the actor compares the latest filing with the immediately previous filing. For multi-quarter trend analysis, run the actor quarterly and compare datasets over time.

What is CUSIP? CUSIP is a 9-character identifier assigned to securities traded in the U.S. and Canada. The actor uses CUSIP to match positions across quarters for change tracking.

Related actors

ActorHow to combine
Website Contact ScraperFind investor relations contacts at companies identified in 13F holdings
B2B Lead Gen SuiteBuild profiles of companies that appear in institutional portfolios
WHOIS Domain LookupResearch domain details for investment managers and portfolio companies

Support

Found a bug or have a feature request? Open an issue in the Issues tab on this actor's page. For custom investment research solutions, reach out through the Apify platform.

How it works

01

Configure

Set your parameters in the Apify Console or pass them via API.

02

Run

Click Start, trigger via API, webhook, or set up a schedule.

03

Get results

Download as JSON, CSV, or Excel. Integrate with 1,000+ apps.

Use cases

Sales Teams

Build targeted lead lists with verified contact data.

Marketing

Research competitors and identify outreach opportunities.

Data Teams

Automate data collection pipelines with scheduled runs.

Developers

Integrate via REST API or use as an MCP tool in AI workflows.

Ready to try SEC 13F Institutional Holdings Tracker?

Start for free on Apify. No credit card required.

Open on Apify Store