Skip to main content
GET
/
institutional-holdings
Get 13F institutional holdings
curl --request GET \
  --url https://api.financialdatasets.ai/institutional-holdings \
  --header 'X-API-KEY: <api-key>'
{
  "ticker": "<string>",
  "filer_cik": "<string>",
  "institutional_holdings": [
    {
      "ticker": "<string>",
      "name_of_issuer": "<string>",
      "cusip": "<string>",
      "report_period": "2023-12-25",
      "filing_date": "2023-12-25",
      "form_type": "13F-HR",
      "accession_number": "<string>",
      "title_of_class": "<string>",
      "put_call": null,
      "shares": 123,
      "value_usd": 123,
      "reported_price": 123,
      "filer_cik": "<string>",
      "filer_name": "<string>",
      "subsidiaries": [
        {
          "row_num": 123,
          "shares": 123,
          "value_usd": 123,
          "shares_principal_amount_type": "SH",
          "investment_discretion": "SOLE",
          "voting_authority_sole": 123,
          "voting_authority_shared": 123,
          "voting_authority_none": 123,
          "other_managers": [
            "<string>"
          ]
        }
      ]
    }
  ]
}

Documentation Index

Fetch the complete documentation index at: https://docs.financialdatasets.ai/llms.txt

Use this file to discover all available pages before exploring further.

Overview

Get the full equity portfolio of any institutional investment manager that files SEC Form 13F (managers overseeing $100M+ in assets). Data comes directly from SEC Form 13F filings, including per-position share counts, market values, voting authority splits, and subsidiary-manager breakdowns. We preserve the full SEC filing fidelity: when a manager splits voting authority across subsidiaries (e.g., Berkshire across National Indemnity / GEICO), each split is exposed in a subsidiaries array on the position. You can use this data to:
  • Track every position held by a specific investment manager
  • Compare position changes quarter-over-quarter
  • Surface concentration, voting structure, and amendment activity
Note: Form 13F filings have a 45-day lag from quarter end and only include long positions in SEC-registered securities. To get started, please create an account and grab your API key at financialdatasets.ai. You will use the API key to authenticate your API requests.

Find an investor’s CIK

Investors are queried by filer_cik, not by name. To discover a CIK, hit the helper endpoint:
Investors
import requests

# free endpoint, no API key required
url = 'https://api.financialdatasets.ai/institutional-holdings/investors/?name=BERK'
response = requests.get(url)

# each item is { "cik": "...", "name": "..." }
for investor in response.json().get('investors'):
    print(investor['cik'], investor['name'])
Pass ?name=PREFIX to filter to filers whose names start with that prefix (case-insensitive). Without name, the endpoint returns the first 100 filers alphabetically. CIKs can change over time. The SEC sometimes renames or restructures filer entities, so an investor’s CIK may not be stable across years. The /investors lookup always returns the active CIK for the entity currently filing under that name, so prefer it over hard-coding CIKs from old documents.

Filtering the Data

filer_cik is required. By default, the response is the filer’s most recent 13F. To see history, add report_period filters:
  • report_period_lte
  • report_period_lt
  • report_period_gte
  • report_period_gt
  • report_period
For example, report_period_gte=2024-01-01&report_period_lte=2025-12-31 returns every position the filer reported across that window. By default, limit is 10 (max 200).

Subsidiaries

When a 13F filer reports the same security across multiple voting-authority splits (e.g., parent + subsidiary advisors), the top-level position aggregates the splits and a subsidiaries array preserves each underlying row. The subsidiaries field is omitted when there is only one underlying row.

Examples

import requests

# add your API key to the headers
headers = {
    "X-API-KEY": "your_api_key_here"
}

# set your query params
filer_cik = '0001067983'    # Berkshire Hathaway's CIK
limit = 100                 # number of positions to return

# create the URL
url = (
    f'https://api.financialdatasets.ai/institutional-holdings/'
    f'?filer_cik={filer_cik}'
    f'&limit={limit}'
)

# make API request
response = requests.get(url, headers=headers)

# parse institutional_holdings from the response
institutional_holdings = response.json().get('institutional_holdings')

Authorizations

X-API-KEY
string
header
required

API key for authentication.

Query Parameters

filer_cik
string

The 10-digit zero-padded SEC CIK of the institutional filer. Mutually exclusive with ticker.

ticker
string

The held security's ticker symbol. Mutually exclusive with filer_cik. Without a report_period filter, returns one position per institutional filer whose most recent 13F currently includes this ticker.

limit
integer
default:10

The maximum number of positions to return (default: 10, max: 200).

Required range: x <= 200
report_period
string<date>

Filter by exact report period date in YYYY-MM-DD format.

report_period_gte
string<date>

Filter by report period greater than or equal to date in YYYY-MM-DD format.

report_period_lte
string<date>

Filter by report period less than or equal to date in YYYY-MM-DD format.

report_period_gt
string<date>

Filter by report period greater than date in YYYY-MM-DD format.

report_period_lt
string<date>

Filter by report period less than date in YYYY-MM-DD format.

Response

Institutional holdings response

Envelope keyed by ticker (ticker mode) or filer_cik (filer mode), with the position list under institutional_holdings.

ticker
string

Echoed back when the request used ?ticker=... mode.

filer_cik
string

Echoed back when the request used ?filer_cik=... mode.

institutional_holdings
object[]