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

# 13F Top Managers

> Enumerate any covered quarter's SEC Form 13F Top 1,000 manager set ranked by reportable value — each quarter has its own Top 1,000; quarter-over-quarter roster and rank diffs supported.

<Note icon="sparkles">
  **Available as MCP tool**: `sec_13f_list_top_managers` — call directly from Claude / Cursor / any MCP client. See [MCP Server](/en/integration/mcp-server) for the 60-second setup.
</Note>

<Badge color="green" icon="circle-check">Live</Badge>
 
<Badge color="gray" size="sm">free · ranked list</Badge>

## What it does for your agent

`sec_13f_list_top_managers` enumerates the requested quarter's SEC Form 13F Top 1,000 manager set ranked by 13F reportable value — rank `1` is the institution with the largest reportable value that quarter. Each quarter has its own Top 1,000, so an older quarter's result stays stable when a newer quarter is released. Use it to build a fund pool when an agent doesn't yet know a specific `manager_cik` or `ticker`: derive the Top N (e.g. 30) here, then fan out to `sec_13f_list_manager_holdings` to pull each manager's holdings for consensus / overlap / Q-over-Q rank-diff analyses.

### Two quarter fields — they point to the same quarter

* **`manager_set_period`** — the quarter whose Top 1,000 manager set this response covers. **Equal to the quarter you query** (`year + quarter`); defaults to the most recent covered quarter when you omit both.
* **`ranking_period`** — the quarter the response's ranks and values are computed from. **Equal to `manager_set_period`** — each quarter is served from its own Top 1,000.

Query a different `(year, quarter)` to get that quarter's own roster; rosters change across quarters as managers move in and out, and an older quarter's roster stays stable when a newer quarter is released. Passing a `(year, quarter)` outside the covered range returns 200 OK with an empty `managers` array plus an explanatory `meta.notice`.

## Response

<ResponseField name="data" type="TopManagersResult" required>
  <Expandable title="TopManagersResult fields">
    <ResponseField name="manager_set_period" type="string" nullable>
      Quarter (YYYY-MM-DD) whose Top 1,000 manager set this response covers; equals the quarter you query (or the most recent covered quarter when you omit `year`/`quarter`), and equals `ranking_period`.
    </ResponseField>

    <ResponseField name="ranking_period" type="string" nullable>
      Quarter (YYYY-MM-DD) the ranks and values in this response were computed from; equals `manager_set_period`.
    </ResponseField>

    <ResponseField name="managers" type="TopManager[]" required>
      Managers sorted by `period_rank` ascending.

      <Expandable title="TopManager fields">
        <ResponseField name="manager_cik" type="string" required>SEC CIK.</ResponseField>
        <ResponseField name="manager_name" type="string" required>Canonical manager name.</ResponseField>

        <ResponseField name="aliases" type="string[]" required>
          Known aliases / DBA names (may be empty). Useful for matching natural-language manager mentions to a `manager_cik`.
        </ResponseField>

        <ResponseField name="period_rank" type="integer" required>
          Rank within the covered Top 1,000 manager set for `ranking_period` (`1` = largest reportable value that quarter).
        </ResponseField>

        <ResponseField name="period_reportable_value_usd" type="number" required>
          13F reportable value (USD) for `ranking_period`. **AUM proxy, not true firmwide AUM** — excludes fixed income, options, non-U.S. holdings, shorts.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="meta.creditsUsed" type="number">Always `0` — this endpoint is free.</ResponseField>
<ResponseField name="meta.remainingCredits" type="number">Credits left after this call.</ResponseField>

<ResponseField name="meta.notice" type="string">
  Plain-English coverage note; extended with "has no ranking data" when a `(year, quarter)` outside the covered range is requested.
</ResponseField>

```json title="200 OK · sec_13f_list_top_managers" expandable theme={null}
{
  "data": {
    "manager_set_period": "2025-12-31",
    "ranking_period": "2025-12-31",
    "managers": [
      {
        "manager_cik": "0001364742",
        "manager_name": "BLACKROCK INC.",
        "aliases": ["BLACKROCK", "BLACKROCK FUND ADVISORS"],
        "period_rank": 1,
        "period_reportable_value_usd": 4521893245678
      },
      {
        "manager_cik": "0000102909",
        "manager_name": "VANGUARD GROUP INC",
        "aliases": ["VANGUARD"],
        "period_rank": 2,
        "period_reportable_value_usd": 4123456789012
      }
    ]
  },
  "meta": {
    "creditsUsed": 0,
    "remainingCredits": 999,
    "notice": "13F coverage: Top 1,000 managers for quarter 2025-12-31 (each quarter has its own Top 1,000). Ranking data available for 4 quarters: 2025-03-31 … 2025-12-31. Reportable value is an AUM proxy excluding fixed income, options, non-U.S. holdings, and shorts."
  }
}
```

## Notes

<Tip>
  **Canonical workflow — Smart Money Consensus pool**:

  1. `sec_13f_list_top_managers?limit=30` — pick the Top 30 fund pool.
  2. Loop each `manager_cik` into `sec_13f_list_manager_holdings` to fetch holdings.
  3. Aggregate client-side to build a consensus / overlap leaderboard.

  Holdings are **not** included in this response — fan-out is required.
</Tip>

<Tip>
  **Typical agent queries**: each quarter has its own Top 1,000 and rankings are computed per quarter — the agent can decide how many times to call the tool and which quarters to compare.

  <Prompt description="Top 30 smart money roster quarter-over-quarter">
    Compare the Top 30 13F smart-money managers between the latest quarter and the prior quarter — who entered, who fell out, and who moved the most in rank?
  </Prompt>

  <Prompt description="Top N fund pool for a specific quarter">
    Give me the top 30 institutions by 13F reportable value for 2025 Q4, ranked descending.
  </Prompt>
</Tip>

<Tip>
  Use `aliases` to match natural-language manager mentions ("BlackRock", "Vanguard") to the canonical `manager_cik` before calling `sec_13f_list_manager_holdings`. Saves a round trip through the `manager_name` resolver.
</Tip>

<Warning>
  **Each quarter has its own Top 1,000 manager set**: passing a different `(year, quarter)` returns that quarter's own roster — managers move in and out across quarters, so a roster diff is meaningful. A manager appears in the response for every quarter it was inside that quarter's Top 1,000, and an older quarter's roster stays stable when a newer quarter is released.
</Warning>

<Warning>
  **Top 1,000 only**, ranked by 13F reportable value (an AUM proxy, **not** true AUM). Excludes fixed income, options, non-U.S. holdings, shorts.
</Warning>

<Warning>
  This is **not** a semantic / keyword search — there is no free-text manager filter. For natural-language manager lookups, call `sec_13f_list_manager_holdings` with `manager_name`.
</Warning>

## Direct invocation

<Accordion title="HTTP / SDK examples" icon="terminal">
  <CodeGroup>
    ```typescript MCP (Claude / Cursor) theme={null}
    // 1) Latest-quarter Top 30 fund pool
    {
      "method": "tools/call",
      "params": {
        "name": "sec_13f_list_top_managers",
        "arguments": { "limit": 30 }
      }
    }

    // 2) Previous-quarter Top 30 — for roster diff
    {
      "method": "tools/call",
      "params": {
        "name": "sec_13f_list_top_managers",
        "arguments": { "limit": 30, "year": 2025, "quarter": 3 }
      }
    }
    ```

    ```python Python (HTTP) theme={null}
    import os, requests

    base = "https://api.llmquantdata.com"
    headers = {"Authorization": f"Bearer {os.environ['LLMQUANT_API_KEY']}"}

    # Latest-quarter Top 30
    latest = requests.get(
        f"{base}/api/filings/13f/managers",
        headers=headers,
        params={"limit": 30},
    ).json()["data"]["managers"]

    # Specific quarter
    prev = requests.get(
        f"{base}/api/filings/13f/managers",
        headers=headers,
        params={"limit": 30, "year": 2025, "quarter": 3},
    ).json()["data"]["managers"]
    ```

    ```bash cURL theme={null}
    # Latest-quarter Top 30
    curl "https://api.llmquantdata.com/api/filings/13f/managers?limit=30" \
      -H "Authorization: Bearer $LLMQUANT_API_KEY"

    # Specific quarter
    curl "https://api.llmquantdata.com/api/filings/13f/managers?limit=30&year=2025&quarter=3" \
      -H "Authorization: Bearer $LLMQUANT_API_KEY"
    ```
  </CodeGroup>
</Accordion>

## Full parameter reference

<Accordion title="sec_13f_list_top_managers — request parameters" icon="sliders">
  <ParamField query="limit" type="integer" default={30}>
    Number of managers to return, sorted by `period_rank` ascending. Default `30`. Range `[1, 1000]`; server clamps out-of-range values.
  </ParamField>

  <ParamField query="year" type="integer">
    Calendar year of the quarter to query (e.g. `2025`). Range `[2013, 2030]`. **Must be paired with `quarter`**; omit both for the most recent quarter the data covers.
  </ParamField>

  <ParamField query="quarter" type="integer">
    Calendar quarter `1-4` (Q1=Jan-Mar, Q4=Oct-Dec). **Must be paired with `year`**.
  </ParamField>
</Accordion>

## Related

<Columns cols={3}>
  <Card title="13F Holdings by Manager" icon="briefcase" href="/en/api/filings/13f-by-manager">
    Forward direction — fetch one fund's full holdings (the natural fan-out from this tool).
  </Card>

  <Card title="13F Holders by Ticker" icon="rotate" href="/en/api/filings/13f-by-ticker">
    Reverse direction — which Top 1000 managers hold a given ticker?
  </Card>

  <Card title="MCP Server setup" icon="plug" href="/en/integration/mcp-server">
    Connect Claude / Cursor / any harness in 60 seconds.
  </Card>
</Columns>
