Blog / Institutional holdings
Institutional holdings

13F Search: How to Find Institutional Holdings on EDGAR

Three ways to search Form 13F filings on EDGAR, by manager name, by full text, and by holding, plus how to pull the holdings table as structured JSON rows.

By the SecFeed teamOctober 21, 20266 min read
Key takeaways

A "13F search" usually means one of two different jobs: finding which 13F filings a manager has made, or finding which managers hold a particular stock. EDGAR's own tools handle the first well and the second barely at all, because the holdings themselves sit in a separate XML attachment that neither the company search nor the full text search looks inside.

This guide covers what a Form 13F actually contains, the three ways to search it (by manager, by full text, and by holding), where each one stops working, and how to pull the holdings as structured rows instead.

What a 13F filing is, in search terms

Section 13(f) of the Securities Exchange Act requires institutional investment managers with investment discretion over $100 million or more in certain US equity securities to report their holdings to the SEC every quarter. They do this on Form 13F, filed electronically through EDGAR under Rule 13f-1(a)(1).

A 13F filing has two parts that matter for search:

Most managers file a full holdings report, 13F-HR. A manager that reports no holdings of its own, because another filer already includes its positions, files a 13F-NT notice instead, which has no information table at all.

The $100 million threshold and the 45 day filing deadline both come from Rule 13f-1. A quarter's filings are due 45 days after quarter end, so Q4 holdings (as of December 31) are not public until mid-February, and every quarter's 13F data is already six to seven weeks stale the day it appears. See 13F filing deadlines for the full schedule.

Method 1: search by manager on EDGAR

EDGAR's company search finds filings by the manager's name or CIK, then filtered to form type 13F-HR or 13F-NT. This is the right tool when you already know which fund you want and just need its filing history, cover pages and all.

It is a metadata search: it matches the filer's registered name and CIK, not anything inside the information table. It will not tell you whether that manager holds a given stock, only that it filed a 13F for a given quarter.

Get this data as clean JSON

SecFeed turns SEC filings into structured data with one API call: GET /v1/form-13f/holdings. 125 free calls to start.

Get a free API key →

EDGAR full text search indexes the complete text of filings and exhibits submitted since 2001. For 13F filings, that mostly means the cover page prose and any accompanying exhibits like a list of other included managers, since the information table itself is structured XML data rather than searchable prose.

Full text search is useful for finding a specific manager's cover page by name when you are not sure of its exact CIK, or for finding exhibits that list which other managers a 13F-NT filer relies on. It does not let you search "who holds this CUSIP" across every manager's information table, because that data was never indexed as text in the first place.

Method 3: search the holdings table by CUSIP or manager

To answer "who holds this stock" or "what does this fund hold," you need the parsed information table, not the cover page. On EDGAR this means opening each 13F-HR filing's XML attachment one at a time and reading the rows yourself, which does not scale past a handful of filings.

An API that has already parsed every information table into rows turns this into one query. SecFeed's 13F Holdings API does exactly that: each row is one position, searchable by the issuer's CUSIP (who holds this stock) or by the filer's CIK (what this fund holds), for any quarter since Q2 2013.

A worked example

Here is a direct 13F holdings search by filer CIK, using Berkshire Hathaway's CIK (1067983) and a specific quarter:

curl "https://secfeedapi.com/v1/form-13f/holdings?cik=1067983&period=06-30-2026&size=2" \
  -H "Authorization: Bearer YOUR_API_KEY"

The response is an array of positions, one row per holding:

[
  {
    "accession": "0001193125-26-352200",
    "filer_cik": 1067983,
    "filer": "BERKSHIRE HATHAWAY INC",
    "period": "06-30-2026",
    "filed": "2026-08-14",
    "issuer": "AMERICAN EXPRESS CO",
    "cusip": "025816109",
    "value": 50419898471.0,
    "shares": 149061045.0,
    "sh_prn": "SH",
    "put_call": null,
    "vote_sole": 149061045.0,
    "vote_shared": 0.0,
    "vote_none": 0.0
  }
]

Swap the filter to search the other direction, by stock instead of by fund. Searching by CUSIP (here, Apple's, 037833100) returns every manager that reported a position in that security for a given quarter, which is the search EDGAR's own tools cannot do:

from secfeed import Client

sf = Client("YOUR_API_KEY")
holders = sf.holdings_13f(cusip="037833100", period="06-30-2026")
for row in holders:
    print(row["filer"], row["shares"], row["value"])
If you only have a company name or ticker and need its CUSIP first, /v1/mapping/cusip and /v1/mapping/ticker resolve between them. The reverse works too: any holdings row already carries the issuer name alongside its CUSIP. See CUSIP lookup for the full pattern.

The cover page data, including which other managers a filing includes and the table's total value and entry count, is available separately through /v1/form-13f.

Comparing the three methods

MethodFindsDoes not findBest for
EDGAR company searchA manager's 13F filings by name or CIKWhich stocks a filing holdsLooking up one fund's filing history
EDGAR full text searchCover page text and exhibit mentions since 2001Rows inside the information tableFinding a filer by name when the CIK is unknown
Parsed holdings APIPositions by CUSIP (who holds it) or CIK (what it holds), any quarter since Q2 2013Anything outside the reported Section 13(f) securitiesSearching holdings across managers or quarters

Frequently asked questions

Can I search 13F filings by stock ticker instead of CUSIP?

Not directly on EDGAR, since 13F information tables report CUSIP, not ticker. Resolve the ticker to a CUSIP first with a mapping lookup, then search the holdings table by that CUSIP.

Why doesn't EDGAR full text search return 13F holdings?

Full text search indexes the readable text of a filing and its exhibits. A 13F information table is structured XML, listing issuer, CUSIP and value as data fields rather than prose, so there is no sentence for a text search to match against.

How current is 13F holdings data?

A 13F-HR is due 45 days after the quarter it covers, so any 13F search, on EDGAR or elsewhere, reflects positions as of the prior quarter end, not current holdings. See 13F filing deadlines for the exact schedule by quarter.

What is the difference between 13F-HR and 13F-NT?

A 13F-HR includes the filer's own information table of positions. A 13F-NT is a notice filed by a manager that reports no holdings directly because another filer's 13F-HR already includes its positions; it has no holdings table to search.

Does a 13F search cover every institutional holding?

No. It only covers Section 13(f) securities, mainly US-listed equities and some convertible instruments, held by managers that individually cross the $100 million threshold. Holdings below that line, non-13(f) securities, and most non-US instruments do not appear in any 13F, searchable or not.

Get this data as clean JSON

SecFeed turns SEC filings into structured data with one API call: GET /v1/form-13f/holdings. 125 free calls to start.

Get a free API key →

For information only, not investment advice. Data from public SEC filings; verify important figures on SEC.gov. See our AI Disclosure.