Get startedDashboard

Manager search

Paid plans

Find an institutional Form 13F filer by name and get the manager_id its holdings are keyed to.

GET/v1/managers
View llms.txt

GET /v1/managers?search=berkshire finds institutional managers that file SEC Form 13F, by a fragment of their name. Each row carries the manager_id you pass to Manager holdings and to the manager_id filter of Institutional holdings.

Search covers the filing era: managers that have filed Form 13F from 2013 onward. On every row id_regime reads filing, manager_id is the firm's SEC CIK and cik is the same number as a 10-digit string. Rows carry no money or share values.

Managers of the historical era have their own ids, 900,000,000 and above, and are not searchable by name. Every holdings row carries its manager_id, and Manager holdings accepts those ids directly. Berkshire Hathaway is 1067983 in search results and 900008350 in the historical era.

Manager search is available on Pro and higher plans. A Free key receives 402.

Parameters

limitintDefault: 1000

Rows per page, up to 5,000.

cursorstrDefault: none

The next_cursor value from the previous page, passed back unchanged.

Response

The body has data, count, next_cursor, warnings and meta at the top level:

response.json
{
  "data": [ ... ],
  "count": 1,
  "next_cursor": null,
  "warnings": ["Search covers managers that have filed Form 13F from 2013 onward. Managers that appear only in earlier quarters are not searchable by name; their holdings are served by id at /v1/managers/{manager_id}/holdings."],
  "meta": { ... }
}

Top-level fields

fieldtypeunitnullabledescription
datalist[object]noThe matching managers. See the row fields below.
countintrowsnoRows on this page.
next_cursorstryesPass as cursor for the next page. Null on the last page. meta.next_cursor holds the same value.
warningslist[str]noAlways one fixed sentence stating that search covers the filing era.
metaobjectnoSee the meta fields below.

Row fields

fieldtypeunitnullabledescription
manager_idintnoThe filer's SEC CIK, as an integer. Pass it to Manager holdings or as manager_id on Institutional holdings.
manager_namestrnoThe manager's latest filed name.
manager_typestryesNull on every search result. The historical era's manager type code, a digit from 1 to 5, appears on historical holdings rows and on a historical manager's manager object.
countrystryesNull on every search result. Historical managers carry a country, such as UNITED STATES, on their manager object.
cikstrnoThe SEC CIK as a 10-digit, zero-padded string, for example 0001067983.
first_quarterstrdatenoThe first quarter end with holdings under this id.
last_quarterstrdatenoThe latest quarter end with holdings under this id.
id_regimestrnoAlways filing on search results.

Meta fields

fieldtypeunitnullabledescription
id_regimeslist[str]noThe id regimes the results come from: ["filing"].
knowledge_timestrUTC timestampyesWhen the newest data in the response became known. See Response metadata.
freshnesslist[object]noOne entry, institutional_filings, with dataset, through and promoted_at.
has_moreboolnotrue when another page follows.
next_cursorstryesPass as cursor for the next page. The same value as the top-level next_cursor. Null on the last page.

Pagination

Rows are ordered by manager_name, ignoring letter case, then by manager_id. A page holds up to limit rows: 1,000 by default, 5,000 at most.

Request the whole result set in one page. A name fragment that matches more than 5,000 managers is too broad: lengthen search instead. When more rows match than limit, meta.has_more is true and next_cursor, at the top level and in meta, carries a token to pass back as cursor with the same parameters. One query can run to 50 pages on Pro, 100 on Max and 200 on Redistribution. Pagination covers cursors in general.

The Python client's managers() returns one page of up to limit rows, 1,000 by default.

Errors

statuserror codewhen it happenshow to fix
400bad_requestsearch is missing or shorter than 2 characters after trimming.Pass at least 2 characters.
400bad_requestsearch is longer than 100 characters.Shorten it.
400bad_requestlimit is not a whole number from 1 to 999,999,999.Pass a limit of 1 or more.
400bad_requestcursor was not issued for this request: it is not a next_cursor value, it has been altered, or it came from another path, a changed parameter or another endpoint.Pass next_cursor unchanged with the same path and parameters, or repeat the request without cursor.
400pagination_limit_reachedThe cursor asks for a page beyond your plan's cap. error reads Pagination limit reached.Lengthen search.
401unauthorizedThe key is missing or invalid.Send X-API-Key. See Authentication.
402upgrade_requiredThe key is on the Free plan.Upgrade to Pro.
429see Rate limitsA quota is exhausted.Wait for the window to reset.

Real bodies:

400.json
{"error":"bad_request","code":"bad_request","status":400,"detail":"search must be at least 2 characters"}
{"error":"bad_request","code":"bad_request","status":400,"detail":"search must be 100 characters or fewer"}
{"error":"bad_request","code":"bad_request","status":400,"detail":"Invalid cursor: not a cursor this API issued, or one from an earlier paging scheme. Repeat the request without cursor to start from the first page."}
{"error":"Pagination limit reached","code":"pagination_limit_reached","status":400,"detail":"Pro tier supports up to 50 pages per query.","message":"Pro tier supports up to 50 pages per query."}
401.json
{"error":"unauthorized","code":"unauthorized","status":401,"detail":"No API key was sent. Pass your key in the X-API-Key header or the ?api_key= query parameter. Get one free at https://xfinlink.com/signup","message":"No API key was sent. Pass your key in the X-API-Key header or the ?api_key= query parameter. Get one free at https://xfinlink.com/signup"}
402.json
{"error":"upgrade_required","code":"upgrade_required","status":402,"detail":"Institutional holdings are available on Pro. https://xfinlink.com/pricing"}

A search with no match returns 200 with an empty data array.

Plan differences

  • Free: 402. A limit or cursor value that is refused returns its 400 first.
  • Pro: full access, 50 pages per query.
  • Max: full access, 100 pages per query.
  • Redistribution: full access, 200 pages per query.

Each answered request counts as one unit against your daily quota. A refused one, such as a Free key's 402 or a 400, does not count. See Plans and limits.

The same request on Free:

Terminal
curl -s -H "X-API-Key: YOUR_API_KEY" "https://api.xfinlink.com/v1/managers?search=berkshire"
free.json
{"error":"upgrade_required","code":"upgrade_required","status":402,"detail":"Institutional holdings are available on Pro. https://xfinlink.com/pricing"}

On Pro it returns 200 with the matching managers.

Edge cases

One firm, several filers

A firm that files through several legal entities appears once per entity, each with its own manager_id and quarter range. search=vanguard returns 12 managers. Vanguard Group Inc's series runs to 2025-12-31, and later quarters are filed by entities such as Vanguard Capital Management and Vanguard Portfolio Management:

Terminal
curl -s -H "X-API-Key: YOUR_API_KEY" "https://api.xfinlink.com/v1/managers?search=vanguard&limit=1000"
response.json
{
  "data": [
    {"manager_id": 947529, "manager_name": "VANGUARD ADVISERS INC", "manager_type": null, "country": null, "cik": "0000947529", "first_quarter": "2026-03-31", "last_quarter": "2026-06-30", "id_regime": "filing"},
    {"manager_id": 1680208, "manager_name": "VANGUARD ASSET MANAGEMENT, Ltd", "manager_type": null, "country": null, "cik": "0001680208", "first_quarter": "2026-03-31", "last_quarter": "2026-06-30", "id_regime": "filing"},
    {"manager_id": 2100119, "manager_name": "VANGUARD CAPITAL MANAGEMENT LLC", "manager_type": null, "country": null, "cik": "0002100119", "first_quarter": "2026-03-31", "last_quarter": "2026-06-30", "id_regime": "filing"},
    {"manager_id": 1730578, "manager_name": "Vanguard Capital Wealth Advisors", "manager_type": null, "country": null, "cik": "0001730578", "first_quarter": "2017-12-31", "last_quarter": "2026-06-30", "id_regime": "filing"},
    {"manager_id": 933478, "manager_name": "VANGUARD FIDUCIARY TRUST CO", "manager_type": null, "country": null, "cik": "0000933478", "first_quarter": "2026-03-31", "last_quarter": "2026-06-30", "id_regime": "filing"},
    {"manager_id": 1811242, "manager_name": "Vanguard Global Advisers, LLC", "manager_type": null, "country": null, "cik": "0001811242", "first_quarter": "2026-03-31", "last_quarter": "2026-06-30", "id_regime": "filing"},
    {"manager_id": 102909, "manager_name": "VANGUARD GROUP INC", "manager_type": null, "country": null, "cik": "0000102909", "first_quarter": "2013-06-30", "last_quarter": "2025-12-31", "id_regime": "filing"},
    {"manager_id": 1550100, "manager_name": "Vanguard Investments Australia, Ltd.", "manager_type": null, "country": null, "cik": "0001550100", "first_quarter": "2026-03-31", "last_quarter": "2026-06-30", "id_regime": "filing"},
    {"manager_id": 217448, "manager_name": "VANGUARD MARKETING CORPORATION", "manager_type": null, "country": null, "cik": "0000217448", "first_quarter": "2026-03-31", "last_quarter": "2026-06-30", "id_regime": "filing"},
    {"manager_id": 1984256, "manager_name": "Vanguard National Trust Co", "manager_type": null, "country": null, "cik": "0001984256", "first_quarter": "2026-03-31", "last_quarter": "2026-06-30", "id_regime": "filing"},
    {"manager_id": 1767306, "manager_name": "Vanguard Personalized Indexing Management, LLC", "manager_type": null, "country": null, "cik": "0001767306", "first_quarter": "2022-03-31", "last_quarter": "2026-06-30", "id_regime": "filing"},
    {"manager_id": 2100121, "manager_name": "VANGUARD PORTFOLIO MANAGEMENT LLC", "manager_type": null, "country": null, "cik": "0002100121", "first_quarter": "2026-03-31", "last_quarter": "2026-06-30", "id_regime": "filing"}
  ],
  "count": 12,
  "next_cursor": null,
  ...
}

Quarters before the historical edge

first_quarter and last_quarter span the filing-era series, which can start before archive_edge. Holdings requests answer quarters on or before archive_edge from the historical era by default. To read a filing-era manager's own filings for those quarters, pass source=filing to Manager holdings.

Historical managers

A manager that appears only in quarters before 2013 is not in search results. Read its manager_id from a historical holdings row, where manager_id_space reads archive, and pass it to Manager holdings. The manager object there carries id_regime: "historical", manager_type, country and manager_number.

Request examples

Find Berkshire Hathaway's filer id:

request.pycurlprompt
import xfinlink as xfl

xfl.set_api_key("YOUR_API_KEY")

df = xfl.managers("berkshire hathaway")
print(df.to_string(index=False))
curl -s -H "X-API-Key: YOUR_API_KEY" \
  "https://api.xfinlink.com/v1/managers?search=berkshire%20hathaway"
What is Berkshire Hathaway's institutional manager id for its 13F filings?
stdoutresponse.jsontool result
 manager_id           manager_name manager_type country        cik first_quarter last_quarter id_regime
    1067983 Berkshire Hathaway Inc         None    None 0001067983    2013-06-30   2026-06-30    filing
{
  "data": [
    {
      "manager_id": 1067983,
      "manager_name": "Berkshire Hathaway Inc",
      "manager_type": null,
      "country": null,
      "cik": "0001067983",
      "first_quarter": "2013-06-30",
      "last_quarter": "2026-06-30",
      "id_regime": "filing"
    }
  ],
  "count": 1,
  "next_cursor": null,
  "warnings": [
    "Search covers managers that have filed Form 13F from 2013 onward. Managers that appear only in earlier quarters are not searchable by name; their holdings are served by id at /v1/managers/{manager_id}/holdings."
  ],
  "meta": {
    "id_regimes": [
      "filing"
    ],
    "knowledge_time": "2026-09-26T18:53:54Z",
    "freshness": [
      {
        "dataset": "institutional_filings",
        "through": "2026-06-30",
        "promoted_at": "2026-09-25T15:35:44Z"
      }
    ],
    "has_more": false,
    "next_cursor": null
  }
}
{"tool": "search_managers", "arguments": {"search": "berkshire hathaway"}}
{
  "data": [
    {
      "manager_id": 1067983,
      "manager_name": "Berkshire Hathaway Inc",
      "manager_type": null,
      "country": null,
      "cik": "0001067983",
      "first_quarter": "2013-06-30",
      "last_quarter": "2026-06-30",
      "id_regime": "filing"
    }
  ],
  "count": 1,
  "next_cursor": null,
  "warnings": [
    "Search covers managers that have filed Form 13F from 2013 onward. Managers that appear only in earlier quarters are not searchable by name; their holdings are served by id at /v1/managers/{manager_id}/holdings."
  ],
  "meta": {
    "id_regimes": ["filing"],
    "knowledge_time": "2026-09-26T18:53:54Z",
    "freshness": [
      {"dataset": "institutional_filings", "through": "2026-06-30", "promoted_at": "2026-09-25T15:35:44Z"}
    ],
    "has_more": false,
    "next_cursor": null
  }
}

Was this page helpful?

request.pycurlprompt
import xfinlink as xfl

xfl.set_api_key("YOUR_API_KEY")

df = xfl.managers("berkshire hathaway")
print(df.to_string(index=False))
curl -s -H "X-API-Key: YOUR_API_KEY" \
  "https://api.xfinlink.com/v1/managers?search=berkshire%20hathaway"
What is Berkshire Hathaway's institutional manager id for its 13F filings?
stdoutresponse.jsontool result
 manager_id           manager_name manager_type country        cik first_quarter last_quarter id_regime
    1067983 Berkshire Hathaway Inc         None    None 0001067983    2013-06-30   2026-06-30    filing
{
  "data": [
    {
      "manager_id": 1067983,
      "manager_name": "Berkshire Hathaway Inc",
      "manager_type": null,
      "country": null,
      "cik": "0001067983",
      "first_quarter": "2013-06-30",
      "last_quarter": "2026-06-30",
      "id_regime": "filing"
    }
  ],
  "count": 1,
  "next_cursor": null,
  "warnings": [
    "Search covers managers that have filed Form 13F from 2013 onward. Managers that appear only in earlier quarters are not searchable by name; their holdings are served by id at /v1/managers/{manager_id}/holdings."
  ],
  "meta": {
    "id_regimes": [
      "filing"
    ],
    "knowledge_time": "2026-09-26T18:53:54Z",
    "freshness": [
      {
        "dataset": "institutional_filings",
        "through": "2026-06-30",
        "promoted_at": "2026-09-25T15:35:44Z"
      }
    ],
    "has_more": false,
    "next_cursor": null
  }
}
{"tool": "search_managers", "arguments": {"search": "berkshire hathaway"}}
{
  "data": [
    {
      "manager_id": 1067983,
      "manager_name": "Berkshire Hathaway Inc",
      "manager_type": null,
      "country": null,
      "cik": "0001067983",
      "first_quarter": "2013-06-30",
      "last_quarter": "2026-06-30",
      "id_regime": "filing"
    }
  ],
  "count": 1,
  "next_cursor": null,
  "warnings": [
    "Search covers managers that have filed Form 13F from 2013 onward. Managers that appear only in earlier quarters are not searchable by name; their holdings are served by id at /v1/managers/{manager_id}/holdings."
  ],
  "meta": {
    "id_regimes": ["filing"],
    "knowledge_time": "2026-09-26T18:53:54Z",
    "freshness": [
      {"dataset": "institutional_filings", "through": "2026-06-30", "promoted_at": "2026-09-25T15:35:44Z"}
    ],
    "has_more": false,
    "next_cursor": null
  }
}