Form 13F Institutional Holdings API
The Form 13F API enables searching and retrieving the latest and historical portfolio holdings and cover page information disclosed in SEC Form 13F filings by institutional investment managers from 1994 to present.
Portfolio Holdings
The API provides information on current and historical portfolio holdings of SEC-registered funds and investment managers, including issuer name, title of the securities class, CUSIP, CIK and ticker of the holding, value of the position in dollar, the number of shares held, and more.
Cover Page Information
The cover pages of 13F filings include defails about the fund or manager, such as their name, CRD and CIK, gross market value of the porfolio and details about other included managers.
Portfolio holdings from the Form 13F database can be retrieved and searched using various parameters, including name, CIK and CRD of the fund or manager, filing publication date and quarter-year period the filing references (e.g., Q3 2024). All CUSIPs are pre-mapped to their respective ticker symbols and CIKs, enabling searches for 13F filings that disclose positions in specific companies using ticker symbols. The API provides access to the complete historical holdings data for every fund and investment manager registered with the SEC. This data is accessible via a REST API, compatible with Python, C#, Node.js, R, and any other programming language.
1
{
2
"formType": "13F-HR",
3
"periodOfReport": "2024-09-30",
4
"filedAt": "2024-11-12T12:27:58-05:00",
5
"accessionNo": "0000919574-24-006283",
6
// ... more filing attributes
7
"holdings": [
8
{
9
"nameOfIssuer": "ADVANCED MICRO DEVICES INC",
10
"titleOfClass": "COM",
11
"cusip": "007903107",
12
"ticker": "AMD",
13
"cik": "2488",
14
"value": 1565000,
15
"shrsOrPrnAmt": {
16
"sshPrnamt": 18527,
17
"sshPrnamtType": "SH"
18
},
19
"investmentDiscretion": "SOLE",
20
"votingAuthority": {
21
"Sole": 0,
22
"Shared": 0,
23
"None": 18527
24
}
25
},
26
// ... more holdings
27
]
28
}
An example search query to list all funds and managers invested in Tesla is available in the API sandbox here. This example retrieves the most recent 13F-HR filings and portfolio holdings that include Tesla's CUSIP 88160R101, showing which funds bought or sold Tesla securities over time.
Our Python tutorial demonstrates how to extract and analyze the buy and sell activities of institutional investment managers from 13F filings and visualize changes in fund holdings over time.
Use Cases
The Form 13F API and database is used for various purposes in investment research, portfolio management, and financial analysis. Common use cases for real-time monitoring and historical analysis of investment managers' portfolios include:
- Rebalancing of replicated index portfolios that mirror the holdings of top-performing managers.
- Backtesting investment strategies by analyzing historical changes in fund holdings.
- Crowding analysis to identify popular stocks among institutional investors to reduce the risk of overexposure.
- Identifying new investment opportunities by analyzing cross-sectional buy and sell activities of investment managers.
- Monitoring post-IPO institutional investment activities by tracking the number of shares bought or sold by investment managers.
API Endpoints
Institutional Holdings in Form 13F Filings
The Institutional Holdings API returns all holdings data of each Form 13F filing. To find and retrieve 13F holdings data, send an HTTP POST request with the desired search parameters to the following endpoint:
Supported HTTP methods: POST
Request and response content type: JSON
Cover Pages in Form 13F Filings
The Cover Pages API provides access to all cover pages of Form 13F filings. To retrieve 13F cover pages, send an HTTP POST request with the desired search parameters to the following endpoint:
Supported HTTP methods: POST
Request and response content type: JSON
Bulk Download Endpoints
The bulk download endpoints allow retrieving dataset files of Form 13F holdings and cover pages in a structured format. Each file is provided in JSONL (JSON Lines) format, where each line is a standalone JSON object - ideal for large-scale data processing.
There are two types of datasets available for bulk download:
- Holdings Data: Contains portfolio holdings from all 13F filings within a specific year-month period, based on the filing's
filedAtdate. - Cover Pages: Includes cover pages of all 13F filings for a given year and month, based on the filing's
filedAtdate.
In addition, index.json files list all available JSONL files along with their paths, last update timestamps, and file sizes - helpful for programmatic access and identifying when a specific file was last updated. All .jsonl.gz and index.json files are updated once daily between 1:00 AM and 5:00 AM (ET), reflecting all 13F filings published the previous day.
| Endpoint | Description | HTTP Method | Response Format |
|---|---|---|---|
| /bulk/form-13f/holdings/YEAR/YEAR-MONTH.jsonl.gz | Gzip-compressed JSONL file containing all holdings data of all 13F filings for the specified year and month. | GET | jsonl.gz |
| /bulk/form-13f/holdings/index.json | JSON file containing the paths, file update times and file sizes of all jsonl.gz files of all holdings data files. | GET | json |
| /bulk/form-13f/cover-pages/YEAR/YEAR-MONTH.jsonl.gz | Gzip-compressed JSONL file containing all cover pages of 13F filings for the specified year and month. | GET | jsonl.gz |
| /bulk/form-13f/cover-pages/index.json | JSON file containing the paths, file update times and file sizes of all jsonl.gz files of all cover pages data files. | GET | json |
Examples
https://api.sec-api.io/bulk/form-13f/holdings/2024/2024-01.jsonl.gzhttps://api.sec-api.io/bulk/form-13f/holdings/index.json
Authentication
To authenticate API requests, use the API key shown in your user profile. Utilize the API key in one of two ways. Choose the method that best fits your implementation:
- Authorization Header: Include the API key as an
Authorizationheader. For instance, before sending aPOSTrequest tohttps://api.sec-api.io/form-13f/holdings, ensure the header is set as follows:Authorization: YOUR_API_KEY - Query Parameter: Alternatively, append the API key directly to the URL as a query parameter. For example, when making
POSTrequests, use the URLhttps://api.sec-api.io/form-13f/holdings?token=YOUR_API_KEYinstead of the base API endpoint.
Request Parameters
The Holdings and Cover Pages API both accept a JSON payload including the search parameters to specify what holdings or cover pages to retrieve. The structure of the JSON payload is the same for both APIs.
The request payload includes the following fields:
query(string): Specifies the search string written in the Lucene syntax likefield:valueto look for all holdings or cover pages that includevaluein thefield. For example, useperiodOfReport:[2023-01-1 TO 2023-06-30]to find all holdings reported in 13F-HR filings for the first half of 2023. A complete guide on how to use the Lucene syntax is available here.from(string, optional) - Use thefromproperty to specify the starting position of the search results, facilitating pagination. For instance, setfromto 50 to skip the first 50 results. The default is 0, and the maximum allowed value is 10,000, which is also the cap for the maximum number of filings or cover pages returned perquerystring. To retrieve and paginate through all matches in the search universe, incrementfromby the value of thesizeparameter (e.g., 50) until no more results are returned or the 10,000 limit is reached. For example, use0,50,100, and so on. If thequerylocates more than 10,000 matches, consider narrowing the search universe by refining the filter criteria, for example, using a date range filter to iterate over months or years. One such approach would be to search for filings with afiledAtdate range filter, e.g.filedAt:[2021-01-01 TO 2021-01-31](all filings from January 2021), then paginate through the results by incrementingfrom, and once completed, repeat the process for the next month, and so on.size(string, optional) - Determines the number of filings or cover pages returned per request. For instance, setsizeto 10 to retrieve 10 filings per request. The default value is 50, and the maximum allowed value is 50, which is the cap for the maximum number of filings or cover pages returned per request.sort(array, optional) - An array of objects that specify how the returned results are sorted. The default sorting order is descending byfiledAtdatetime field, most recent filing first. The sorting order can be changed to ascending by settingordertoasc. The default sorting order can be overridden by specifying a different sorting field. For example, to sort results byperiodOfReportin ascending order, setsortto[{ "periodOfReport": { "order": "asc" } }].
Default:[{ "filedAt": { "order": "desc" } }]
Request Examples
Form 13F Filings, Cover Pages and Holdings by CIK
Using the CIK search expression, retrieve the 10 most recent Form 13F filings with their associated holding information for Ritholtz Wealth Management with CIK 1633901 (POST /form-13f/holdings) or the cover pages (POST /form-13f/cover-pages) for the same CIK.
Form 13F Filings of Registered Investment Adviser (RIA) by CRD Search
Finding all Form 13F filings of a Registered Investment Adviser (RIA) using its CRD number is a simple two-step process: locate the accession number of the latest 13F filing via a CRD number search with the Cover Pages API, then use the accession number to retrieve the filing metadata and holdings data via the Holdings API.
Demonstrated below is the process to locate the latest 13F filing of Bridgewater Associates with CRD number 105129. First, find the accession number of the latest 13F filing by searching the Cover Pages API with the CRD number in the query parameter, for example crdNumber:105129 for Bridgewater Associates, and sort the results by periodOfReport in descending order to get the most recent filing first.
The response will include the accession number of the latest 13F filing, for example:
1
{
2
"total": { "value": 12, "relation": "eq" },
3
"data": [
4
{
5
"accessionNo": "0001172661-25-004777",
6
"filedAt": "2025-11-13T16:36:48-05:00",
7
"cik": "1350694",
8
// ... more cover page attributes
9
}
10
// ... more cover page objects
11
]
12
}
Use the retrieved accession number to access the filing metadata and holdings data via the Holdings API by searching with the accession number in the query parameter, for example: accessionNo:"0001172661-25-004777".
1
{
2
"total": { "value": 1, "relation": "eq" },
3
"data": [
4
{
5
"accessionNo": "0001172661-25-004777",
6
"linkToHtml": "https://www.sec.gov/Archives/edgar/data/1350694/000117266125004777/0001172661-25-004777-index.htm",
7
"linkToFilingDetails": "https://www.sec.gov/Archives/edgar/data/1350694/000117266125004777/xslForm13F_X02/primary_doc.xml",
8
"documentFormatFiles": [
9
// ... 2 other document objects
10
{
11
"documentUrl": "https://www.sec.gov/Archives/edgar/data/1350694/000117266125004777/xslForm13F_X02/infotable.xml",
12
"type": "INFORMATION TABLE",
13
// ...
14
}
15
],
16
// ... more filing attributes + holdings
17
}
18
]
19
}
The URL to the filing's overview page is located in the linkToHtml attribute of the response object. The cover page URL is located in the linkToFilingDetails attribute, while the URL of the holdings table is found in the third object of the documentFormatFiles array under documentUrl.
Find Portfolios with Specific Holdings by Ticker
Retrieve the 50 most recent 13F filings from any fund with an active position in Tesla, including equities, warrants, options, or notes (POST /form-13f/holdings).
Find Portfolios with Derivative Holdings by Option Type
Retrieve the 50 most recent 13F filings that include details on holdings with at least one Put or Call option (POST /form-13f/holdings).
Find Form 13F Filings by Date Range of Period of Report and CIK of Fund
Use the date range query on the periodOfReport field to locate all four 13F filings submitted by Integrated Wealth Concepts (CIK 1737109) for each quarter, Q1 through Q4, in 2020.
Retrieve all 13F Filings using Pagination and Date Range Query
Fetch all 13F filings and their holding information filed between January 1, 2020, and January 31, 2020, by incrementally increasing the from parameter by 50 for each subsequent request, using the date range query.
Find Amended 13F Filings by Date Match Query
Use the date match query on the periodOfReport field to find all amended 13F-HR filings (13F-HR/A) and their holding information for the fourth quarter of 2020, dated December 31, 2020.
Response Format
The Form 13F API consists of two endpoints: /holdings and /cover-pages. The /holdings endpoint returns the holdings data of each Form 13F filing while the /cover-pages endpoint returns the cover page information of each Form 13F filing in JSON format. Refer to the following sections for detailed information on the response format of each endpoint.
Form 13F - Holdings
The Holdings API returns the holdings data of each Form 13F filing in JSON format. The API response includes two fields: total (object) and data (array of objects). The total object provides metadata about the search results, such as the total number of filings matching the search criteria. The data array contains 13F filings and their holdings data. Each 13F filing includes an array of holding objects, where each array item represents information about one holding in the fund's portfolio. The attributes of each holding include:
nameOfIssuer(string) - Column 1: Name of the issuer of the security either abbreviated or as it appears in the Official List of Section 13F Securities published by the SEC, e.g. MICRON TECHNOLOGY INCtitleOfClass(string) - Column 2: Title of class, e.g. COMcusip(string) - Column 3: Nine-digit CUSIP number of security, e.g. 98850P109ticker(string) - Ticker of security, e.g. TSLAcik(string) - CIK of security, e.g. 1004434. Leading zeros are removed.value(integer) - Column 4: The absolute market value of the position denoted in dollars, e.g. 120,000,000. The value typically represents the value at the close of trading on the last trading day of the quarter. For older filings, the API automatically multiplies the value by 1000, e.g. 120,000 becomes 120,000,000.shrsOrPrnAmt(object) - Column 5: Amount and type of security.sshPrnamt(integer) - Total number of shares of the class of security or the principal amount of such class, e.g. 345,000sshPrnamtType(string) - Security type of the position.SHdenotes shares,PRNdenotes principal amount.
putCall(string, optional) - If the holding represents an option, the type of option. Possible values:Call,Put.investmentDiscretion(string) - Column 6: Holdings are segregated according to the nature of the investment discretion held by the manager. Investment discretion can beSOLE(sole investment discretion),DEFINED(shared-defined investment discretion), orOTHER(shared-other investment discretion).otherManager(string, optional) - Column 7: Other manager. The number assigned to the other manager sharing investment discretion over the holding as defined in the "List of Other Included Managers" section on the cover page of the Form 13F filing. For example,1.votingAuthority(object) - Column 8: Voting authority. The number of shares for which the manager exercises sole, shared, or no voting authority (none).Sole(integer) - Sole, e.g. 345Shared(integer) - Shared, e.g. 345None(integer) - None, e.g. 345
Investment Discretions
Response Example - 13F Holdings
1
{
2
"total": { "value": 281, "relation": "eq" },
3
"data": [
4
{
5
"default filing attributes: id, cik, ticker, etc.": "...",
6
"holdings": [
7
{
8
"nameOfIssuer": "ADVANCED MICRO DEVICES INC",
9
"titleOfClass": "COM",
10
"cusip": "007903107",
11
"ticker": "AMD",
12
"cik": "2488",
13
"value": 1565000,
14
"shrsOrPrnAmt": {
15
"sshPrnamt": 18527,
16
"sshPrnamtType": "SH"
17
},
18
"investmentDiscretion": "SOLE",
19
"votingAuthority": {
20
"Sole": 0,
21
"Shared": 0,
22
"None": 18527
23
}
24
},
25
{
26
"nameOfIssuer": "PFIZER INC",
27
"titleOfClass": "COM",
28
"cusip": "717081103",
29
"ticker": "PFE",
30
"cik": "78003",
31
"value": 348000,
32
"shrsOrPrnAmt": {
33
"sshPrnamt": 9476,
34
"sshPrnamtType": "SH"
35
},
36
"investmentDiscretion": "SOLE",
37
"votingAuthority": {
38
"Sole": 0,
39
"Shared": 0,
40
"None": 9476
41
}
42
},
43
{
44
"nameOfIssuer": "FEDEX CORP",
45
"titleOfClass": "COM",
46
"cusip": "31428X106",
47
"ticker": "FDX",
48
"cik": "1048911",
49
"value": 1428000,
50
"shrsOrPrnAmt": {
51
"sshPrnamt": 5507,
52
"sshPrnamtType": "SH"
53
},
54
"investmentDiscretion": "SOLE",
55
"votingAuthority": {
56
"Sole": 5507,
57
"Shared": 0,
58
"None": 0
59
}
60
}
61
]
62
},
63
// ... more filings
64
]
65
}
Response Example - Single 13F Portfolio of Latest Disclosure
Fund Name:
CIK:
Period of Report:
Filed At:
| Ticker | CIK | Name of Issuer | CUSIP | Title of Class | Market Value (in $ absolute) | Position Size | Position Type | Put/Call | Investment Discretion | Other Manager | Voting Authority - Sole | Voting Authority - Shared | Voting Authority - None |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Form 13F - Cover Pages
The Cover Pages API returns the cover pages of Form 13F filings in JSON format. The API response includes two fields: total (object) and data (array of objects). The total object provides metadata about the search results, such as the total number of cover pages matching the search criteria. The data array contains the cover pages of 13F filings. Each cover page includes the following attributes:
id(string) - Unique identifier of the cover page, e.g., "e8f9f8cf7e111e8608be622357708257".accessionNo(string) - The accession number of the 13F filing, e.g., "0001398344-24-020966".filedAt(string) - Timestamp indicating when the filing was submitted, in ISO 8601 format, e.g., "2024-11-15T16:37:33-05:00".formType(string) - The form type of the filing, e.g., "13F-HR".cik(string) - The Central Index Key (CIK) of the filing manager, e.g., "1698222".crdNumber(string) - The CRD number of the filing manager, e.g., "104557".secFileNumber(string) - SEC file number associated with the filing, e.g., "801-55119".form13FFileNumber(string) - The 13F file number, e.g., "028-17971".periodOfReport(string) - The end of the quarter (reporting period) covered by the filing, in YYYY-MM-DD format, e.g., "2024-09-30" for the third quarter of 2024.isAmendment(boolean) - Indicates whether the filing is an amendment, e.g., false.amendmentInfo(object) - Contains details if the filing is an amendment. Empty if not applicable.amendmentNo(integer) - The amendment number, e.g., "1".amendmentType(string) - The type of amendment. Possible values:RESTATEMENT(amendement is a restatement),NEW HOLDINGS(amendement adds new holdings entries).
filingManager(object) - Information about the filing manager:name(string) - The manager's name, e.g., "Pacific Center for Financial Services".address(object) - The manager's address:street(string) - Street address, e.g., "2000 CROW CANYON PLACE, SUITE 430".city(string) - City, e.g., "SAN RAMON".stateOrCountry(string) - State or country, e.g., "CA".zipCode(integer) - Zip code, e.g., 94583.
reportType(string) - The type of report. Possible values:13F HOLDINGS REPORT,13F NOTICEor13F COMBINATION REPORT. Refer to the Report Type section for more information.otherManagersReportingForThisManager(array of objects) - A list of other managers reporting for this manager. Empty if not applicable.name(string) - The name of the other manager.cik(string) - The CIK of the other manager.crdNumber(string) - The CRD number of the other manager.secFileNumber(string) - The SEC file number of the other manager.form13FFileNumber(string) - The 13F file number of the other manager.
provideInfoForInstruction5(boolean) - Indicates whether additional information is provided for Instruction 5, e.g., false.tableEntryTotal(integer) - Total number of holdings entries, e.g., 521.tableEntryTotalAsReported(integer) - Total number of holdings entries as reported, e.g., 521.tableValueTotal(integer) - Total value of holdings in dollars, e.g., 379715932.tableValueTotalAsReported(integer) - Total value of holdings as reported, in dollars, e.g., 379715932.otherIncludedManagersCount(integer) - Number of other included managers, e.g., 1.otherIncludedManagers(array of objects) - List of other included managers. Each manager contains:sequenceNumber(integer) - Sequence number, e.g., 1.name(string) - Manager's name, e.g., "Pacific Center for Financial Services".cik(string) - Manager's CIK, e.g., "1698222".crdNumber(string) - Manager's CRD number, e.g., "104557".secFileNumber(string) - SEC file number, e.g., "801-55119".form13FFileNumber(string) - 13F file number, e.g., "028-17971".
signature(object) - Information about the filing signature:name(string) - Name of the signatory, e.g., "Stephen F. Schliesser".title(string) - Title of the signatory, e.g., "CEO/President".phone(string) - Contact phone number, e.g., "925-838-7700".signature(string) - Signature, e.g., "/s/ Stephen F. Schliesser".city(string) - City of signature, e.g., "San Ramon".stateOrCountry(string) - State or country of signature, e.g., "CA".signatureDate(string) - Date of signature, in MM-DD-YYYY format, e.g., "11-15-2024".
Types of Report
The reportType attribute indicates the type of 13F report filed by the investment manager. The following three types are available:
13F HOLDINGS REPORT. In this case, the cover page will omit the otherManagersReportingForThisManager value and both the summary on the cover page and holdings information table will be included in the filing.13F NOTICE. In this case, the cover page will include the otherManagersReportingForThisManager property, while both the summary on the cover page and holdings information table will be omitted in the filing.13F COMBINATION REPORT. In this case, the cover page will include the otherManagersReportingForThisManager property, along with both the summary on the cover page and the holdings information table.Response Example - 13F Cover Page
1
{
2
"total": { "value": 481, "relation": "eq" },
3
"data": [
4
{
5
"id": "e8f9f8cf7e111e8608be622357708257",
6
"accessionNo": "0001398344-24-020966",
7
"filedAt": "2024-11-15T16:37:33-05:00",
8
"formType": "13F-HR",
9
"cik": "1698222",
10
"crdNumber": "104557",
11
"secFileNumber": "801-55119",
12
"form13FFileNumber": "028-17971",
13
"periodOfReport": "2024-09-30",
14
"isAmendment": false,
15
"amendmentInfo": {},
16
"filingManager": {
17
"name": "Pacific Center for Financial Services",
18
"address": {
19
"street": "2000 CROW CANYON PLACE, SUITE 430",
20
"city": "SAN RAMON",
21
"stateOrCountry": "CA",
22
"zipCode": 94583
23
}
24
},
25
"reportType": "13F HOLDINGS REPORT",
26
"otherManagersReportingForThisManager": [],
27
"provideInfoForInstruction5": false,
28
"signature": {
29
"name": "Stephen F. Schliesser",
30
"title": "CEO/President",
31
"phone": "925-838-7700",
32
"signature": "/s/ Stephen F. Schliesser",
33
"city": "San Ramon",
34
"stateOrCountry": "CA",
35
"signatureDate": "11-15-2024"
36
},
37
"tableEntryTotal": 521,
38
"tableEntryTotalAsReported": 521,
39
"tableValueTotal": 379715932,
40
"tableValueTotalAsReported": 379715932,
41
"otherIncludedManagersCount": 1,
42
"otherIncludedManagers": [
43
{
44
"sequenceNumber": 1,
45
"name": "Pacific Center for Financial Services",
46
"cik": "1698222",
47
"crdNumber": "104557",
48
"secFileNumber": "801-55119",
49
"form13FFileNumber": "028-17971"
50
}
51
]
52
},
53
// ... more cover pages
54
]
55
}
Response Example - List of Latest 13F Cover Pages
| CIK | Fund Name | Report Period | Total Holdings | Portfolio Value ($) | Instr. 5 Info Provided | Other Reporting Managers | Sub-Advisors | Sub-Advisor Names | Report Type | Filed At | CRD | SEC File # | 13F File # | Accession No. | Fund Address | Signed By | Signer Phone | Signed Date |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Response Structure of Bulk Download Endpoints
/bulk/form-13f/holdings/YEAR/YEAR-MONTH.jsonl.gz
1
{"accessionNo":"0001976157-25-000002","cik":"1976157","companyName":"M1 Capital Management LLC","holdings":[{"nameOfIssuer":"ABBVIE INC","cusip":"00287Y109","titleOfClass":"COM","value":82601295,"shrsOrPrnAmt":{"sshPrnamt":511115,"sshPrnamtType":"SH"},"investmentDiscretion":"SOLE","votingAuthority":{"Sole":0,"Shared":0,"None":0},"ticker":"ABBV","cik":"1551152"},{...}],...}
2
{ ... }
3
{ ... }
/bulk/form-13f/holdings/index.json
1
[
2
{
3
"key": "2025/2025-03.jsonl.gz",
4
"updatedAt": "2025-03-28T09:59:35.000Z",
5
"size": 1093475
6
},
7
{
8
"key": "2025/2025-02.jsonl.gz",
9
"updatedAt": "2025-03-19T14:25:18.000Z",
10
"size": 78523398
11
},
12
// ... more files
13
]
/bulk/form-13f/cover-pages/YEAR/YEAR-MONTH.jsonl.gz
1
{ ... ,"crdNumber": "291645", "filingManager": {...}, "otherManagersReportingForThisManager": [...], "reportType": "13F COMBINATION REPORT", ... }
2
{ ... }
3
{ ... }
/bulk/form-13f/cover-pages/index.json
1
[
2
{
3
"key": "2025/2025-03.jsonl.gz",
4
"updatedAt": "2025-03-28T09:59:35.000Z",
5
"size": 1093475
6
},
7
{
8
"key": "2025/2025-02.jsonl.gz",
9
"updatedAt": "2025-03-19T14:25:18.000Z",
10
"size": 78523398
11
},
12
// ... more files
13
]
FAQ
Common questions about querying the Form 13F Institutional Holdings API, the response shape, and the bulk archives.
How do I look up the most recent portfolio holdings reported by a specific investment manager?
Use the /form-13f/holdings endpoint and filter on the investment manager's SEC identifier so that the filing manager CIK (cik) equals the manager you are researching, for example 1633901 for Ritholtz Wealth Management. To get the latest portfolio first, sort the results in descending order by the filing publication timestamp (filedAt) so the most recently published 13F-HR filing is returned at the top.
Each matching filing carries the full portfolio in the holdings array, where every entry describes one position with its issuer name (holdings.nameOfIssuer), ticker (holdings.ticker), dollar market value (holdings.value), and share count (holdings.shrsOrPrnAmt.sshPrnamt). Taking the first result gives you the manager's current disclosed portfolio.
How can I retrieve a fund's portfolio for a particular quarter, for example the third quarter of 2024?
Use the /form-13f/holdings endpoint and filter on the reporting period field (periodOfReport), which holds the last calendar day of the quarter the filing covers. For the third quarter of 2024 the value of periodOfReport should be 2024-09-30; the first quarter ends 03-31, the second 06-30, and the fourth 12-31. Combine this with the filing manager CIK (cik) of the specific fund you are studying to isolate that fund's report for the quarter.
The returned filing contains the disclosed positions in its holdings array. Note that 13F filings are usually published several weeks after the quarter closes, so the filedAt timestamp will be later than the periodOfReport date.
How do I pull all four quarterly portfolio reports a manager filed during a single year?
Use the /form-13f/holdings endpoint and filter on both the manager's identifier and the reporting period. The filing manager CIK (cik) should equal the manager you are researching, and the reporting period (periodOfReport) should fall within a one-year window, for example between 2020-01-01 and 2020-12-31. This matches the four quarterly 13F-HR filings whose period-end dates are 2020-03-31, 2020-06-30, 2020-09-30, and 2020-12-31.
Sorting the results by periodOfReport in ascending order returns the quarters in chronological order, and each filing's holdings array holds that quarter's disclosed positions.
How do I find which institutional investors hold a particular stock by its ticker symbol?
Use the /form-13f/holdings endpoint and filter on the ticker of the holding (holdings.ticker), for example TSLA for Tesla. Because every CUSIP in the dataset is pre-mapped to its ticker, this matches any 13F-HR filing whose portfolio contains at least one position in that company, including common stock, warrants, options, or notes.
Each matching filing identifies the institutional investor by the filing manager name (filingManager.name) and CIK (cik), and the relevant position appears inside the holdings array with its value (holdings.value) and share count (holdings.shrsOrPrnAmt.sshPrnamt). Sorting by filedAt in descending order surfaces the most recent disclosures first.
How can I find every fund holding a company when I only know its CUSIP and not its ticker?
Use the /form-13f/holdings endpoint and filter on the nine-digit CUSIP of the holding (holdings.cusip), for example 88160R101 for Tesla common stock. The CUSIP appears on every position in the holdings array, so this matches any filing whose portfolio discloses that security even when no ticker is available.
Each matching filing identifies the holder by the filing manager name (filingManager.name) and CIK (cik). Note that a single company can have several CUSIPs for different share classes or security types, so each CUSIP isolates one specific class.
How do I find institutional investors holding a company identified by its SEC company identifier rather than its ticker?
Use the /form-13f/holdings endpoint and filter on the CIK of the security itself (holdings.cik), which is the SEC Central Index Key of the company being held, for example 1318605 for Tesla. This is distinct from the top-level cik field, which identifies the filing manager rather than the issuer.
Matching filings each contain the position in their holdings array alongside the issuer name (holdings.nameOfIssuer), and the holding institution is identified by the filing manager name (filingManager.name) and the top-level cik.
How do I retrieve a single 13F filing and its holdings when I already have its accession number?
Use the /form-13f/holdings endpoint and filter on the accession number (accessionNo), which uniquely identifies one 13F filing, for example 0001172661-25-004777. Searching by this exact value returns that single filing together with its complete holdings array.
The response also carries links to the source documents on EDGAR: the filing overview page in linkToHtml, the cover page document in linkToFilingDetails, and the information table URL inside the documentFormatFiles array under documentUrl.
How can I find all 13F filings submitted within a specific date range?
Use the /form-13f/holdings endpoint and filter on the filing publication timestamp (filedAt), which records when the 13F filing was submitted to the SEC. Set the range so that filedAt falls between your start and end dates, for example between 2020-01-01 and 2020-01-31 to capture all filings published in January 2020.
This is distinct from the reporting period (periodOfReport), which reflects the quarter the filing covers rather than when it was filed. Sorting by filedAt in descending order returns the most recent filings first within the window.
How do I look up an investment adviser's filings using its CRD registration number instead of its CIK?
Use the /form-13f/cover-pages endpoint and filter on the CRD number of the filing manager (crdNumber), the registration number assigned to a Registered Investment Adviser, for example 105129 for Bridgewater Associates. Sorting the cover pages by periodOfReport in descending order puts the most recent filing first.
Each cover page returns the accession number (accessionNo) of the corresponding filing. To then retrieve the full portfolio, take that accession number and query the /form-13f/holdings endpoint by accessionNo, which returns the filing metadata and its holdings array.
How do I get the headline portfolio summary for a fund, such as its total reported portfolio value and number of positions, without pulling every holding?
Use the /form-13f/cover-pages endpoint, which returns the cover page of each 13F filing without the full position list. Filter on the filing manager CIK (cik) of the fund you are researching and sort by filedAt in descending order for the latest filing.
The cover page reports the headline figures directly: the total dollar value of the portfolio is in tableValueTotal, and the number of disclosed positions is in tableEntryTotal. The fields tableValueTotalAsReported and tableEntryTotalAsReported hold the same figures as originally stated by the manager. These values let you read a fund's portfolio size without retrieving every holding.
How can I identify which funds disclose options positions such as puts and calls?
Use the /form-13f/holdings endpoint and filter on the option-type field of the holdings (holdings.putCall), requiring it to be present with any value. This field is only populated when a position represents an option, so matching filings are those that disclose at least one put or call.
Each matching filing is identified by the filing manager name (filingManager.name) and CIK (cik), and the specific option positions appear in the holdings array where holdings.putCall is set to either Put or Call.
How do I separate a fund's put option exposure from its call option exposure in its disclosed positions?
Use the /form-13f/holdings endpoint and read the option-type field on each holding (holdings.putCall). A value of Put marks a put option position and a value of Call marks a call option position; positions in equities and other non-option securities leave this field empty.
To isolate one side of a fund's options book, filter on the filing manager CIK (cik) of the fund and on holdings.putCall being Put for put exposure, or Call for call exposure. Within each matching filing, the relevant positions in the holdings array carry their dollar value (holdings.value) and contract amount (holdings.shrsOrPrnAmt.sshPrnamt).
How do I find filings where a manager exercises no voting authority over a large share of its holdings?
Use the /form-13f/holdings endpoint and read the voting authority breakdown on each holding (holdings.votingAuthority), which splits the share count into holdings.votingAuthority.Sole, holdings.votingAuthority.Shared, and holdings.votingAuthority.None. A position where holdings.votingAuthority.None carries the bulk of the shares while Sole and Shared are zero indicates the manager holds no voting power over it.
After retrieving a manager's filings by filtering on the filing manager CIK (cik), compare these three counts across the entries in the holdings array to gauge how much of the portfolio is held without voting authority.
How do I tell whether a holding is reported as a share count or as a principal amount of debt?
Use the /form-13f/holdings endpoint and read the amount-type field inside each holding's quantity object (holdings.shrsOrPrnAmt.sshPrnamtType). A value of SH means the quantity in holdings.shrsOrPrnAmt.sshPrnamt is a number of shares, while a value of PRN means it is the principal amount of a debt security.
The numeric quantity itself is always in holdings.shrsOrPrnAmt.sshPrnamt, so reading the type alongside it tells you whether a position is equity-style or debt-style. Filtering on holdings.shrsOrPrnAmt.sshPrnamtType being PRN isolates filings that disclose debt holdings.
How do I find only the corrected or restated versions of institutional holdings filings?
Use the /form-13f/holdings endpoint and filter on the form type field (formType) so that it equals 13F-HR/A, the form type used for amendments to a 13F holdings report. Alternatively, filter on the amendment flag (isAmendment) being true, which is set on every corrected or restated filing.
To narrow further to a particular quarter, add a condition on the reporting period (periodOfReport), for example 2020-12-31 for fourth-quarter 2020 amendments. Each amended filing carries its corrected portfolio in the holdings array.
How can I distinguish an amendment that restates a whole portfolio from one that merely adds new positions?
Use the /form-13f/cover-pages endpoint and read the amendment detail object (amendmentInfo), which is populated only on amended filings. The amendment type field (amendmentInfo.amendmentType) holds RESTATEMENT when the amendment replaces the entire portfolio, and NEW HOLDINGS when the amendment only adds further holdings entries to a previously filed report.
The object also carries the amendment sequence in amendmentInfo.amendmentNo. Filter on amendmentInfo.amendmentType being RESTATEMENT or NEW HOLDINGS to isolate one kind of correction.
How do I identify filings where a manager reports no holdings of its own because another manager reports on its behalf?
Use the /form-13f/cover-pages endpoint and filter on the report type field (reportType) so that it equals 13F NOTICE. A notice filing is submitted when all securities under a manager's investment discretion are reported by another manager, so the filing itself omits both the portfolio summary and the holdings table.
On these filings the array of managers reporting on this manager's behalf (otherManagersReportingForThisManager) is populated, with each entry giving the other manager's name (otherManagersReportingForThisManager.name) and CIK (otherManagersReportingForThisManager.cik).
How can I find filings that combine a manager's own holdings with positions reported by other managers?
Use the /form-13f/cover-pages endpoint and filter on the report type field (reportType) so that it equals 13F COMBINATION REPORT. A combination report is filed when only a portion of the securities under a manager's discretion is reported by another manager, so the filing includes both the cover page summary and a holdings table for the remainder.
On these filings the array of managers reporting on this manager's behalf (otherManagersReportingForThisManager) is populated with each other manager's name and CIK, and the manager's own positions can be retrieved from the holdings array of the corresponding filing on the /form-13f/holdings endpoint.
How do I find the related sub-advisors or affiliated managers grouped under a single 13F filing?
Use the /form-13f/cover-pages endpoint and read the array of other included managers (otherIncludedManagers), which lists the affiliated managers or sub-advisors whose positions are aggregated into the filing. Each entry gives that manager's sequence number (otherIncludedManagers.sequenceNumber), name (otherIncludedManagers.name), CIK (otherIncludedManagers.cik), and CRD number (otherIncludedManagers.crdNumber).
The count of these managers is also available directly in otherIncludedManagersCount. Filtering for filings where otherIncludedManagersCount is greater than zero isolates filings that group multiple affiliated managers together.
How do I find filings from investment managers located in a particular state?
Use the /form-13f/cover-pages endpoint and filter on the state or country field within the filing manager's address (filingManager.address.stateOrCountry), for example NY for New York or CA for California. This field holds the two-letter state code, or a country code for managers based outside the United States.
The full address is also available through filingManager.address.street, filingManager.address.city, and filingManager.address.zipCode, and each matching cover page identifies the manager by name in filingManager.name.
How can I search for a fund by its management company name rather than by an identifier?
Use the /form-13f/cover-pages endpoint and filter on the filing manager name field (filingManager.name), which holds the management company's name as stated on the filing, for example Corsair Capital LLC or Navellier & Associates Inc. This lets you locate a fund without first knowing its CIK or CRD number.
Each matching cover page returns the manager's identifiers, including the filing manager CIK (cik) and CRD number (crdNumber), which you can then use for precise follow-up queries on the /form-13f/holdings endpoint.
How do I get the contact details and the name and title of the person who signed a fund's filing?
Use the /form-13f/cover-pages endpoint and read the signature object (signature), which records who signed the 13F filing on behalf of the manager. The signer's name is in signature.name, their role in signature.title, and a contact phone number in signature.phone.
The same object also carries the signature text (signature.signature), the signer's city (signature.city) and state or country (signature.stateOrCountry), and the date the filing was signed (signature.signatureDate).
How do I track how a fund's position in one stock changed across consecutive quarters?
Use the /form-13f/holdings endpoint and filter on both the filing manager CIK (cik) of the fund and the ticker of the holding (holdings.ticker) for the stock you are tracking, for example AMD. Sorting by periodOfReport in ascending order returns the fund's filings in chronological quarterly order.
For each quarter, locate the matching entry in the holdings array and compare its share count (holdings.shrsOrPrnAmt.sshPrnamt) and dollar value (holdings.value) against the prior quarter. A rising share count indicates accumulation, a falling count indicates trimming, and the disappearance of the position indicates a full exit.
How can I measure how crowded a stock is among institutional investors by counting how many funds hold it in a given quarter?
Use the /form-13f/holdings endpoint and filter on the ticker of the holding (holdings.ticker) for the stock you are studying, together with the reporting period (periodOfReport) set to the quarter-end date, for example 2024-09-30 for the third quarter of 2024.
The response carries a total object whose total.value field reports the total number of filings matching the query. Because each 13F-HR filing represents one institutional manager, that count is the number of funds holding the stock in that quarter, which serves as a measure of how crowded the position is.
How do I rank a fund's largest positions by dollar value for its latest portfolio report?
Use the /form-13f/holdings endpoint and filter on the filing manager CIK (cik) of the fund, sorting by filedAt in descending order to retrieve its latest 13F filing first. That filing's portfolio is in the holdings array.
Each holding records its absolute market value in dollars (holdings.value). Ordering the entries in the holdings array by holdings.value in descending order produces the fund's largest positions, with the issuer named in holdings.nameOfIssuer and the size in holdings.shrsOrPrnAmt.sshPrnamt.
How do I download every institutional holdings filing for a whole month in one bulk file instead of querying page by page?
Use the bulk holdings endpoint /bulk/form-13f/holdings/YEAR/YEAR-MONTH.jsonl.gz, substituting the year and month you want, for example /bulk/form-13f/holdings/2024/2024-01.jsonl.gz for January 2024. This returns a gzip-compressed JSONL file containing the holdings data of every 13F filing published that month, grouped by the filing's filedAt date.
Each line in the decompressed file is a standalone JSON object for one filing, carrying its accession number (accessionNo), filing manager CIK (cik), company name (companyName), and full holdings array. This format suits large-scale processing without paging through the search endpoint.
How can I check programmatically which monthly bulk files are available and when each was last refreshed?
Use the bulk index endpoint /bulk/form-13f/holdings/index.json, which returns a JSON array listing every available monthly holdings file. Each entry gives the file path in key, for example 2025/2025-03.jsonl.gz, the timestamp of the file's last update in updatedAt, and the file size in bytes in size.
Reading this index lets a program discover which year-month files exist and detect when a specific file was last refreshed before deciding whether to download it. The bulk files and this index are updated once daily, reflecting filings published the previous day.
How do I page through more than 50 matching filings to retrieve a complete result set?
Use the /form-13f/holdings endpoint with the from and size parameters. The size parameter caps a single response at 50 filings, so to retrieve more, keep size at 50 and increase from by 50 on each subsequent request, requesting positions 0, 50, 100, and so on until no further results are returned.
The from value cannot exceed 10,000, which is also the maximum number of filings reachable for one query. If a query matches more than 10,000 filings, narrow the search universe so each query returns fewer matches, for example by adding a filedAt date-range condition to iterate month by month and paginating within each month separately.
How can I rank the largest institutional managers by total portfolio value for a given reporting quarter?
Use the /form-13f/cover-pages endpoint, which carries each filing’s headline portfolio size without the full position list. Filter on the reporting period (periodOfReport) so it equals the quarter-end date you are studying, for example 2024-09-30 for the third quarter of 2024, and sort the results in descending order by the total dollar value of the portfolio (tableValueTotal). The managers with the largest portfolios then appear at the top.
Each cover page identifies the manager by name (filingManager.name) and by its SEC identifier (cik), and reports the portfolio size in tableValueTotal alongside the number of disclosed positions in tableEntryTotal. Because a single response is capped at 50 cover pages, page through the ranking by increasing the from offset by 50 until you have collected as many of the top managers as you need.
How can I check whether a fund's stated portfolio totals match the figures it actually reported on the filing, to spot reporting discrepancies?
Use the /form-13f/cover-pages endpoint, which exposes each filing's portfolio totals in two parallel forms. The total dollar value carries a normalized figure (tableValueTotal) and the figure exactly as the manager entered it on the filing (tableValueTotalAsReported), and likewise the number of disclosed positions carries a normalized count (tableEntryTotal) and the count as the manager reported it (tableEntryTotalAsReported). To spot a reporting discrepancy, retrieve the cover page for the filing and compare tableValueTotal against tableValueTotalAsReported, and tableEntryTotal against tableEntryTotalAsReported.
When the normalized and as-reported values for a filing disagree, the manager's stated summary does not line up with the figures derived from the holdings information table, which can point to a rounding choice, a unit error, or an omitted position. You can target a specific filing by filtering on its accession number (accessionNo), or scan a manager's history by filtering on the filing manager CIK (cik) and reviewing each returned cover page.
References
For more information about Form 13F filings, visit the SEC websites:
- SEC Form 13F - General Filer Instructions
- SEC Form 13F - Frequently Asked Questions
- SEC Form 13F - XML Technical Specifications
- SEC Adopts Rule to Increase Transparency Into Short Selling and Amendment to CAT NMS Plan for Purposes of Short Sale Data Collection
- Fact Sheet - Final Rules: Enhancing Short Sale Disclosure
Regulations
- § 240.13f-1 Reporting by institutional investment managers of information with respect to accounts over which they exercise investment discretion.
- § 240.13f-2 Reporting by institutional investment managers regarding gross short position and activity information.
- § 249.325 Form 13F, report of institutional investment manager pursuant to section 13(f) of the Securities Exchange Act of 1934.
Research Papers
- Outperforming the Market: Portfolio Strategy Cloning from SEC 13F Filings
- Hedge Fund Replication: A Model Combination Approach
- Can Hedge-Fund Returns Be Replicated: The Linear Case
- How Smart are the Smart Guys? A Unique View from Hedge Fund Stock Holdings
- Best Ideas
- Uncovering Hedge Fund Skill from the Portfolio Holdings They Hide
- Hedge fund replication: putting the pieces together
- Why Do Hedge Funds Avoid Disclosure? Evidence from Confidential 13F Filings.
- Hedge fund crowds and mispricing
- Alpha Cloning: Using quantitative techniques and SEC 13F data for equity portfolio optimization and generation
- Deep Reinforcement Learning & Feature Extraction For Constructing Alpha Generating Equity Portfolios
- Copycat Skills and Disclosure Costs: Evidence from Peer Companies' Digital Footprints
- Do Hedge Funds Strategically Misreport Their Holdings? Evidence from 13F Restatements