# 13F Holdings Tracker: Hedge Fund Positions by Quarter (`mrdoe/institutional-holdings-13f-tracker`) Actor

What hedge funds and institutions hold, from SEC 13F filings: shares, value, % of portfolio and the quarter-over-quarter change (new, increased, decreased, exited). Tickers matched. No API key.

- **URL**: https://apify.com/mrdoe/institutional-holdings-13f-tracker.md
- **Developed by:** [MrDoe](https://apify.com/mrdoe) (community)
- **Categories:** Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 holding returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

![13F Holdings Tracker: Hedge Fund Positions by Quarter - 13F institutional holdings tracker showing hedge fund positions and quarter-over-quarter changes](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/institutional-holdings-13f-tracker--hero.png)

### What does 13F Holdings Tracker: Hedge Fund Positions by Quarter do?

13F Institutional Holdings Tracker returns the stock positions that hedge funds, asset managers and other institutions report to the SEC on Form 13F, one row per holding. Each row has the fund, the quarter, the issuer and ticker, shares held, value in US dollars, share of the portfolio and the change in shares since the previous quarter, labelled new, increased, decreased, unchanged or exited. Give it fund CIK numbers or names, or a whole watchlist of funds at once, and it reads the official SEC EDGAR filings directly.

### Why use 13F Holdings Tracker: Hedge Fund Positions by Quarter?

- The change since last quarter is the point: every holding is labelled new, increased, decreased, unchanged or exited.
- Positions the fund sold out of completely are returned as exited rows, not silently dropped.
- Repeated lines for the same security are merged, so each position appears once.
- A watchlist of many funds in one run, and delta mode to receive only newly filed quarters.
- Official SEC EDGAR data with a link to the filing on every row; no API key.

### What makes this different

Sites that sell 13F data charge for the same public filings. This Actor reads the official filings, merges duplicate lines, matches tickers, computes the quarter-over-quarter change and the exited positions, and links every row to the source filing.

### Who can use the 13F Institutional Holdings Tracker and how?

- **Retail investors:** see what famous funds bought, sold and dropped last quarter as input to your own research.
- **Analysts and newsletters:** publish a quarterly summary of the biggest new and exited positions of a list of funds.
- **Quant and data teams:** build a history of institutional ownership by ticker for factor research and crowding measures.
- **Journalists:** check what a fund reported and link to the filing.
- **Fintech developers:** power a whale-watching or copy-the-funds feature through the Apify API.
- **Investor relations teams:** monitor which institutions hold or exit your company.
- **Portfolio managers:** compare your book with peers' quarter-end positions.
- **Researchers:** study concentration and turnover of institutional portfolios.

### How it works

![13F Holdings Tracker: Hedge Fund Positions by Quarter workflow: your input, collection, output](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/institutional-holdings-13f-tracker--how-it-works.png)

1. **Your input** — enter fund CIK numbers or names, and optionally a starting quarter.
2. **The Actor collects it** — the Actor reads each fund's latest 13F filings from SEC EDGAR and compares them with the quarter before.
3. **Your output** — you get one row per holding with shares, value, portfolio share and the change.

### What data can you extract?

The dataset has 28 fields per row:

| Field                       | Type   | Description                                                  |
| --------------------------- | ------ | ------------------------------------------------------------ |
| `institution_name`          | string | Fund name as registered with the SEC.                        |
| `cik`                       | string | SEC CIK number of the fund.                                  |
| `filing_quarter`            | string | Quarter of the filing, for example 2026-Q2.                  |
| `report_date`               | string | Quarter end date (YYYY-MM-DD).                               |
| `filed_date`                | string | Date the 13F was filed (YYYY-MM-DD).                         |
| `accession_number`          | string | SEC accession number of the filing.                          |
| `ticker`                    | string | Ticker matched from issuer name or CUSIP, null when unknown. |
| `ticker_source`             | string | sec_name_match or openfigi.                                  |
| `issuer_name`               | string | Issuer as reported.                                          |
| `title_of_class`            | string | Class of the security, for example COM.                      |
| `cusip`                     | string | CUSIP identifier.                                            |
| `put_call`                  | string | Put or Call for option positions.                            |
| `shares_held`               | number | Shares (or principal amount) held.                           |
| `value_usd`                 | number | Reported market value in US dollars.                         |
| `shares_change_qoq`         | number | Change in shares since the previous quarter.                 |
| `shares_change_qoq_pct`     | number | Percent change in shares since the previous quarter.         |
| `position_change`           | string | new, increased, decreased, unchanged or exited.              |
| `pct_of_portfolio`          | number | Share of the reported portfolio in percent.                  |
| `rank_in_portfolio`         | number | Rank by value within the filing.                             |
| `investment_discretion`     | string | Investment discretion code (SOLE, DFND, OTR).                |
| `portfolio_total_value_usd` | number | Total value of the reported portfolio.                       |
| `positions_in_filing`       | number | Number of positions in the filing.                           |
| `prior_quarter`             | string | Quarter used for the comparison.                             |
| `source_document_url`       | string | Link to the SEC filing.                                      |
| `fetch_path`                | string | How the row was read: edgar_xml.                             |
| `source`                    | string | Data source.                                                 |
| `scraped_at`                | string | Collection time (ISO 8601).                                  |
| `actor_version`             | string | Output schema version.                                       |

### How to use 13F Holdings Tracker: Hedge Fund Positions by Quarter

![13F Holdings Tracker: Hedge Fund Positions by Quarter input form](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/institutional-holdings-13f-tracker--input.png)

1. Open the Actor and go to the **Input** tab.
2. Enter **Institution CIK numbers** (for example `1067983`) or **Institution names**, choose how many **holdings per institution** you want, and optionally set **Since quarter**.
3. Optionally set filters and a **Max results** limit.
4. Click **Start**. A default run finishes in under a minute.
5. Open the **Output** tab, then download the dataset or connect it to your tools.

### Input Parameters

| Parameter                   | Type    | Required | Default                   | Description                                                                                                         |
| --------------------------- | ------- | -------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `institutionCik`            | array   | No       | `[]`                      | SEC CIK numbers of the funds to read, one per line (for example 1067983 for Berkshire Hathaway).                    |
| `institutionName`           | array   | No       | `[]`                      | Fund names to look up on EDGAR, for example Bridgewater Associates. The first match that files 13F reports is used. |
| `sinceQuarter`              | string  | No       | —                         | Return every quarter from this one on, for example 2026-Q1. Leave empty for the latest quarter only.                |
| `maxHoldingsPerInstitution` | integer | No       | `25`                      | Largest positions returned per filing. Default is 25 for a quick test; set 0 for every position.                    |
| `includeExited`             | boolean | No       | `true`                    | Also return the biggest positions the fund sold out of completely since the prior quarter (up to 10 per filing).    |
| `deltaMode`                 | boolean | No       | `false`                   | Return and bill only holdings from filings not delivered by an earlier run with the same delta key.                 |
| `deltaStateKey`             | string  | No       | `"default"`               | Name of the tracked stream. Use a different key per watchlist of funds.                                             |
| `proxyConfiguration`        | object  | No       | `{"useApifyProxy":false}` | Optional proxy. SEC EDGAR works without one.                                                                        |

### Output Data

![13F Holdings Tracker: Hedge Fund Positions by Quarter dataset table](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/institutional-holdings-13f-tracker--output.png)

`shares_change_qoq` is shares now minus shares in the previous quarter's filing; `position_change` says new, increased, decreased, unchanged or exited. `pct_of_portfolio` is the position's share of the reported 13F portfolio. `value_usd` is the value the fund reported at quarter end. Options are separate rows with `put_call` set. `ticker` is matched from the issuer name or the CUSIP and is null when it cannot be matched.

![13F Holdings Tracker: Hedge Fund Positions by Quarter field map of one record](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/institutional-holdings-13f-tracker--fields.png)

A real dataset item:

```json
{
    "institution_name": "BERKSHIRE HATHAWAY INC",
    "cik": "1067983",
    "filing_quarter": "2026-Q2",
    "report_date": "2026-06-30",
    "filed_date": "2026-08-14",
    "accession_number": "0001193125-26-352200",
    "ticker": "AAPL",
    "ticker_source": "sec_name_match",
    "issuer_name": "APPLE INC",
    "title_of_class": "COM",
    "cusip": "037833100",
    "put_call": null,
    "shares_held": 227917808,
    "value_usd": 65950296923,
    "shares_change_qoq": 0,
    "shares_change_qoq_pct": 0,
    "position_change": "unchanged",
    "pct_of_portfolio": 22.0383,
    "rank_in_portfolio": 1,
    "investment_discretion": "DFND",
    "portfolio_total_value_usd": 299253556246,
    "positions_in_filing": 29,
    "prior_quarter": "2026-Q1",
    "source_document_url": "https://www.sec.gov/Archives/edgar/data/1067983/000119312526352200/0001193125-26-352200-index.htm",
    "fetch_path": "edgar_xml",
    "source": "sec_edgar",
    "scraped_at": "2026-09-26T02:11:26.315Z",
    "actor_version": "1.0.0"
}
```

### How to read and use the results

1. **Filter position_change = new** for fresh buys and **exited** for complete sales.
2. **Sort by shares_change_qoq** for the biggest adds and cuts.
3. **Use pct_of_portfolio** to see how important a position is to the fund.
4. **Group by ticker across funds** to find crowded holdings.
5. **Remember the lag:** this is what the fund held at quarter end, reported up to 45 days later.
6. **Verify** with source_document_url, which opens the SEC filing.

### Usage Examples

#### Berkshire Hathaway's top holdings and changes

```json
{
    "institutionCik": ["1067983"],
    "maxHoldingsPerInstitution": 25
}
```

#### Several funds by name

```json
{
    "institutionName": ["Bridgewater Associates", "Renaissance Technologies"],
    "maxHoldingsPerInstitution": 50
}
```

#### Every quarter since 2026-Q1 for a watchlist

```json
{
    "institutionCik": ["1067983", "1350694"],
    "sinceQuarter": "2026-Q1",
    "maxHoldingsPerInstitution": 0
}
```

### Tips for Best Results

- Use CIK numbers when you can; names are matched to the first fund that files 13F reports.
- Sort by shares_change_qoq or filter position_change = new to see fresh buys.
- Set holdings to 0 for the full portfolio of a fund.
- Schedule the Actor around each filing deadline (mid February, May, August, November) with delta mode on.
- Default is 5 results for a fast test. Set the max to 0 to return everything available.

### Reliability by mode

| Mode                        | Status | Needs login or key? | Notes                                                            |
| --------------------------- | ------ | ------------------- | ---------------------------------------------------------------- |
| Latest quarter of a fund    | ✅     | No                  | Read from SEC EDGAR.                                             |
| Quarter-over-quarter change | ✅     | No                  | Needs the previous quarter's filing; empty when the fund is new. |
| Fund lookup by name         | 🟡     | No                  | First match that files 13F; use CIK for precision.               |
| Ticker matching             | 🟡     | No                  | Issuer name and CUSIP lookup; null when unknown.                 |
| Amended filings (13F-HR/A)  | ❌     | -                   | Original filing only.                                            |
| Real-time positions         | ❌     | -                   | 13F is quarterly with a 45-day lag.                              |

✅ works as described, 🟡 works with caveats, ❌ not supported.

### Only new records (delta mode)

Turn on **Only new filings (delta mode)** and set a **Delta key**. A scheduled run then returns, and bills, only holdings from filings that earlier runs of that key have not delivered, so you receive each new quarter once.

### Known Limitations

- 13F filings are due 45 days after each quarter ends, so the data is up to about 4.5 months old and never real-time.
- 13F covers long positions in US-listed securities, options and some others; it does not show short positions, most bonds, cash or non-US holdings.
- Confidential-treatment positions can be omitted by the filer and filed later.
- Tickers are matched from issuer names and CUSIPs; bonds, funds and unusual share classes can have a null ticker.
- Filings before 2023 reported values in thousands of dollars; the Actor detects this and converts to dollars.
- Only the original 13F-HR is read, not later amendments.

### Integrations

Run it from the Apify API, on a schedule, or from a webhook. Send results straight to Google Sheets, Make, Zapier, Slack or your own database with Apify's built-in integrations.

### Export Formats

Download the dataset as JSON, CSV, Excel, XML, HTML table or RSS from the **Output** tab or the API.

### Frequently Asked Questions

#### Where does the data come from?

The official SEC EDGAR system: fund filing lists from data.sec.gov and the holdings tables from each Form 13F-HR. It is an official public source, not a scraped website. Requests stay under the SEC's limit of 10 per second.

#### Does it need an API key?

No.

#### Why is the data delayed?

Institutions have 45 days after each quarter to file, so the newest data is up to 45 days after quarter end.

#### What does exited mean?

The position was in the previous quarter's filing and is gone from the current one. The row has zero shares and shows how many shares were sold.

#### How do I see what a hedge fund bought last quarter?

Enter the fund's CIK or name and keep the default; rows with position_change new or increased are the buys.

#### Am I charged for failed results?

No. You are only charged for holdings that are written to the dataset.

#### Do I need an account or login?

No. The Actor reads public SEC filings and needs no account or API key.

#### Am I charged for failed runs or empty results?

You are only charged for results that are actually written to the dataset.

#### Can I run it on a schedule?

Yes. Create a Task with your input and add a schedule in Apify Console. With monitor mode on, each scheduled run returns only what changed since the previous one.

### Changelog

- **2026-09-26:** First release: 13F holdings with quarter-over-quarter change, exited positions, ticker matching and delta mode.

### Enterprise and custom work

Need higher volumes, a custom output schema, dedicated scheduling or a no-breaking-changes commitment for a production pipeline? Open an issue on the Actor page and describe your use case. Bulk terms and custom builds are available.

### Support

Questions or a missing field? Open an issue from the **Issues** tab on this Actor's page and it will be looked at.

### Legal / Responsible Use

This Actor reads public filings from SEC EDGAR. You are responsible for how you use the data. It is not investment advice and is not affiliated with the SEC or any fund.

# Actor input Schema

## `institutionCik` (type: `array`):

SEC CIK numbers of the funds to read, one per line (for example 1067983 for Berkshire Hathaway).

## `institutionName` (type: `array`):

Fund names to look up on EDGAR, for example Bridgewater Associates. The first match that files 13F reports is used.

## `sinceQuarter` (type: `string`):

Return every quarter from this one on, for example 2026-Q1. Leave empty for the latest quarter only.

## `maxHoldingsPerInstitution` (type: `integer`):

Largest positions returned per filing. Default is 25 for a quick test; set 0 for every position.

## `includeExited` (type: `boolean`):

Also return the biggest positions the fund sold out of completely since the prior quarter (up to 10 per filing).

## `deltaMode` (type: `boolean`):

Return and bill only holdings from filings not delivered by an earlier run with the same delta key.

## `deltaStateKey` (type: `string`):

Name of the tracked stream. Use a different key per watchlist of funds.

## `proxyConfiguration` (type: `object`):

Optional proxy. SEC EDGAR works without one.

## Actor input object example

```json
{
  "institutionCik": [
    "1067983"
  ],
  "institutionName": [],
  "maxHoldingsPerInstitution": 25,
  "includeExited": true,
  "deltaMode": false,
  "deltaStateKey": "default",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "institutionCik": [
        "1067983"
    ],
    "maxHoldingsPerInstitution": 25,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrdoe/institutional-holdings-13f-tracker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "institutionCik": ["1067983"],
    "maxHoldingsPerInstitution": 25,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("mrdoe/institutional-holdings-13f-tracker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "institutionCik": [
    "1067983"
  ],
  "maxHoldingsPerInstitution": 25,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call mrdoe/institutional-holdings-13f-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mrdoe/institutional-holdings-13f-tracker"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/7R1zC4gSxdXN2yoKn/builds/8AYShn4PSN8sp1yuM/openapi.json
