> ## 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-filings

> SEC EDGAR filings: every filing as a general message plus enriched insider trade and 13F messages

Topic
messages**8**
routing**message key**
encoding**protobuf**

## Messages on this topic

[13\_f\_alert
ThirteenFAlert
A summary of an institution's quarterly 13F report: position counts, bought/sold values and the top holdings by category.
25 fields→](/docs/kafka/types/ThirteenFAlert.md)

[company-reports
Form10K
A periodic company report filed with the SEC, with the financial statements parsed out of the filing's XBRL data. Covers the annual and quarterly reports of domestic and foreign issuers: 10-Q, 10-K, 20-F, 40-F and their amendments.
52 fields→](/docs/kafka/types/Form10K.md)

[form13dg
Form13DG
A beneficial ownership report (Schedule 13D/13G and their amendments): a filer disclosing a stake in an issuer's class of securities, together with the issuer's shares outstanding sourced from its most recent periodic report.
19 fields→](/docs/kafka/types/Form13DG.md)

[form13f
Form13F\_HR
An institution's quarterly 13F holdings report, summarised per security type (shares, funds, options, warrants, preferred stock and debt). Published for every 13F filing (13F-HR, 13F-NT, 13F-CTR and their amendments); the enriched per-institution summary is published separately as ThirteenFAlert.
33 fields→](/docs/kafka/types/Form13F_HR.md)

[form345
Form345
A single transaction row of an insider trade filing (SEC forms 3/4/5/144). One message per row of the filing; same-typed rows are additionally published in aggregated form as InsiderTradeAgg.
31 fields→](/docs/kafka/types/Form345.md)

[form497
Form497
A Securities Act Rule 497 filing: prospectus and summary material published by a fund or securities issuer (forms 497, 497J and 497K).
6 fields→](/docs/kafka/types/Form497.md)

[general
GeneralFiling
A filing published to SEC EDGAR. Insider trades (forms 3/4/5/144) and 13F reports are additionally published as enriched messages under their own keys.
8 fields→](/docs/kafka/types/GeneralFiling.md)

[insider\_trade\_agg
InsiderTradeAgg
aggregation of same-typed rows inside a singular insider trade filing
26 fields→](/docs/kafka/types/InsiderTradeAgg.md)

The message type is determined by the Kafka message key.

## Consume the topic

```python Python theme={null}
from confluent_kafka import Consumer
from unusualwhales.schema_pb2 import Form10K, Form13DG, Form13F_HR, Form345, Form497, GeneralFiling, InsiderTradeAgg, ThirteenFAlert

# The record key selects the message type.
BY_KEY = {
    b"13_f_alert": ThirteenFAlert,
    b"company-reports": Form10K,
    b"form13dg": Form13DG,
    b"form13f": Form13F_HR,
    b"form345": Form345,
    b"form497": Form497,
    b"general": GeneralFiling,
    b"insider_trade_agg": InsiderTradeAgg,
}

# CONFIG comes from the Connecting section of the Kafka overview.
consumer = Consumer(CONFIG | {"group.id": "my-sec-filings-consumer"})
consumer.subscribe(["sec-filings"])

while True:
    msg = consumer.poll(1.0)
    if msg is None or msg.error():
        continue

    message_type = BY_KEY.get(msg.key())
    if message_type is None:
        continue

    event = message_type()
    event.ParseFromString(msg.value())
    print(event)
```
