> ## Documentation Index
> Fetch the complete documentation index at: https://api.unusualwhales.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> API requests use the base URL https://api.unusualwhales.com and require a bearer token in the `Authorization` header (`Authorization: Bearer <API_KEY>`). Create and manage API tokens at https://unusualwhales.com/dashboard/api.
> For live market data inside an AI tool, use the Unusual Whales MCP server at https://unusualwhales.com/public-api/mcp.
> Instructions for agents using Unusual Whales tools: https://unusualwhales.com/skill.md

# SEC 13F alerts

> Receive a summary of each institution's quarterly 13F report: position changes, bought and sold values and the top holdings by category.

**NOTE:**
This is the documentation for the websocket channel `sec:13f_alerts`.
Websocket access for personal use is only available through the [Advanced plan](https://unusualwhales.com/pricing?product=api).

You can find fully-functional examples that stream data from many channels here:

* Python: [https://github.com/unusual-whales/api-examples/tree/main/examples/ws-multi-channel-multi-output](https://github.com/unusual-whales/api-examples/tree/main/examples/ws-multi-channel-multi-output)
* Javascript: [https://github.com/unusual-whales/api-examples/tree/main/examples/ws-multi-channel-multi-output-nodejs](https://github.com/unusual-whales/api-examples/tree/main/examples/ws-multi-channel-multi-output-nodejs)

Connect to the websocket URI:

`wss://api.unusualwhales.com/socket?token=<YOUR_API_TOKEN>`

then `join` the `sec:13f_alerts` channel.

Each message summarises one institution's 13F report: the number of positions in the
report period and how many of them the institution opened, added to, reduced and closed,
an estimate of the value it bought and sold, and its largest holdings in each of those
categories.

The [`sec:13f_filings`](/docs/websocket/sec-filings/13f-filings) channel carries the filing
itself, with the holdings totalled per security type.

### Delivery characteristics

* **Updates are event driven.** The channel stays silent until a 13F report is processed.
  There is no heartbeat and no fixed schedule.
* **Only the newest report period of an institution is sent.** A 13F report for an earlier
  period, such as a late amendment, produces no message here.
* **The position counts and top holdings cover shares and funds only.** Options, warrants,
  preferred stock and debt are left out of the `stock_*` and `top_ten_*` fields.
  `total_value` covers every security type.
* **A summary can be sent again.** It is rebuilt and sent each time the institution's
  holdings for its newest report period are processed, for example after an amendment. The
  newest message for a `cik` and `report_date` replaces the earlier ones.
* **Bought and sold values are estimates.** A 13F report contains no trade prices. The buy
  and sell prices behind `stock_buy_avg_weighted_prem`, `stock_sell_avg_weighted_prem` and
  the ordering of the added, reduced and closed holdings are estimated from the market
  prices of each ticker during the report period.
* **The channel sends nothing when you join.** Messages sent while you are disconnected are
  not replayed.
* **The channel is global only.** It covers every institution at once. A join on
  `sec:13f_alerts:<TICKER>` is answered with an `{"error": "..."}` frame.

Payload format:

```
[
  "sec:13f_alerts",
  {
    "name": "PARRISH CAPITAL LLC",
    "short_name": "",
    "cik": "0002131053",
    "tags": [],
    "people": [],
    "stock_positions": 88,
    "stock_added_to_positions": 52,
    "stock_reduced_positions": 28,
    "stock_new_positions": 1,
    "stock_closed_positions": 4,
    "stock_buy_avg_weighted_prem": 4577369,
    "stock_sell_avg_weighted_prem": -5934003,
    "top_ten_holdings": ["AAPL", "GOOGL", "PANW", "INTC", "GILD", "MRVL", "META", "GE", "ORCL", "XOM"],
    "report_date": "2026-09-30",
    "ticker": "",
    "top_ten_closed_holdings": ["TEVA", "LIN", "LLY", "BIAF"],
    "top_ten_new_holdings": ["NVDA"],
    "top_ten_added_holdings": ["BIDU", "VFC", "AAP", "AB", "IP", "ALGN", "ORCL", "LHX", "META", "EL"],
    "top_ten_reduced_holdings": ["KO", "PANW", "WMT", "INTC", "HD", "AAPL", "GILD", "TRV", "GE", "GS"],
    "total_value": 102635225,
    "share_value": 101893261,
    "holds_options": false,
    "document_url": "https://www.sec.gov/Archives/edgar/data/0002131053/0002131053-26-000006-index.html"
  }
]
```

### Field reference

Every field is present in every message. A value that is not available is sent as an empty
string, `0`, `false` or an empty array, never as `null`. Dates are strings in `YYYY-MM-DD`
format. Values are in USD, rounded to whole dollars.

Each `top_ten_*` list holds up to ten entries, largest first.

<div className="field-table">
  | Field | Type | Description |
  | - | - | - |
  | `name` | string | Name of the filing institution. |
  | `short_name` | string | Short name of the institution, such as `Vanguard` for `VANGUARD GROUP INC`. |
  | `cik` | string | SEC CIK of the institution. |
  | `tags` | string\[] | Tags associated with the institution, such as `hedge_fund`. |
  | `people` | string\[] | People associated with the institution, such as `Bill Ackman` for `PERSHING SQUARE CAPITAL MANAGEMENT, L.P.`. |
  | `stock_positions` | int | Number of share and fund positions in the report period, including the positions closed in it. Subtract `stock_closed_positions` for the positions still held. |
  | `stock_added_to_positions` | int | Number of positions held before this report whose units increased. |
  | `stock_reduced_positions` | int | Number of positions whose units decreased and that are still held. |
  | `stock_new_positions` | int | Number of positions first reported in this report period. |
  | `stock_closed_positions` | int | Number of positions fully exited in this report period. |
  | `stock_buy_avg_weighted_prem` | int | Estimated value bought in this report period: the estimated buy price times the units added, summed over the positions whose units increased. |
  | `stock_sell_avg_weighted_prem` | int | Estimated value sold in this report period: the estimated sell price times the change in units, summed over the positions whose units decreased. The change in units is negative, so this value is zero or negative. |
  | `top_ten_holdings` | string\[] | Tickers of the largest positions still held, by reported value. |
  | `report_date` | string | End date of the report period. |
  | `ticker` | string | The institution's own ticker, when it is itself a public company with listed options. Empty string otherwise. |
  | `top_ten_closed_holdings` | string\[] | Tickers of the largest positions fully exited in this report period, by estimated sold value. |
  | `top_ten_new_holdings` | string\[] | Tickers of the largest positions first reported in this report period, by reported value. |
  | `top_ten_added_holdings` | string\[] | Tickers of the largest positions added to in this report period, by estimated bought value. |
  | `top_ten_reduced_holdings` | string\[] | Tickers of the largest positions reduced but still held, by estimated sold value. |
  | `total_value` | int | Value of all reported holdings, across every security type. Options are reported at their notional value, so an institution that holds options can show a total far above the value it actually holds. |
  | `share_value` | int | Value of the share holdings only. Same as `share_value` on `sec:13f_filings`. |
  | `holds_options` | boolean | Whether the report lists put or call option holdings. |
  | `document_url` | string | URL of the filing's index page on SEC EDGAR. |
</div>

The payload has the fields of the Kafka message
[`ThirteenFAlert`](/docs/kafka/types/ThirteenFAlert), published to the topic
[`sec-filings`](/docs/kafka/topics/sec-filings) under the key `13_f_alert`.
