Guides

13F Holdings API Python Guide

FinzData's Python client provides access to 13F institutional holdings data for US managers with over $100 million in qualifying securities. You can retrieve a manager's complete portfolio, see who holds a specific stock, and analyze ownership changes quarter by quarter using only the verified API calls described here.

Updated 2026-10-11. Code on this page was run against live FinzData data before publishing.

Finding a Manager by Name

To begin, search for a manager using a partial name match with the managers method. This returns a list of matching managers sorted by size, including their CIK, name, latest filing date, total positions, and value in USD.

The CIK is required to retrieve the manager's full holdings book. For example, searching for 'berkshire' will return Berkshire Hathaway among other matches, allowing you to select the correct CIK for subsequent calls.

This step is essential because 13F filings are identified by CIK, not by ticker or name alone, and multiple entities may share similar names.

import finzdata as yf
# Needs a look-back bundle or the Institutional plan (free keys get HTTP 403)
c = yf.Client()
managers = c.managers(q="berkshire")
print(managers[['cik', 'manager', 'filing_date', 'positions', 'value_usd']].head())

Retrieving a Manager's Full 13F Book

Once you have a manager's CIK, use manager_holdings to get their complete 13F portfolio for a given quarter. The output includes each position's CUSIP, ticker, issuer, asset class, put/call flag, shares, market value, and weight in the portfolio.

By default, the call returns the latest available quarter. You can specify a past quarter using the period parameter (e.g., '2026Q1') if you have the appropriate look-back bundle or institutional license.

Weights are calculated based on the total value of long positions reported in that 13F filing, allowing for portfolio analysis.

Remember that 13F only includes long positions in US exchange-listed stocks, ADRs, and certain options; short positions and non-US holdings are not required to be disclosed.

import finzdata as yf
# Needs a look-back bundle or the Institutional plan (free keys get HTTP 403)
c = yf.Client()
berkshire_holdings = c.manager_holdings(cik="1067983", period="2026Q2")
print(berkshire_holdings[['ticker', 'issuer', 'shares', 'value_usd', 'weight']].head())

Finding All Holders of a Specific Stock

To see which institutions hold a particular stock, use the holders method with the stock's ticker. This returns every manager that reported holding the stock in the specified quarter, along with their position details.

The output includes the manager's CIK, name, ticker, issuer, put/call flag for options, shares, market value, and filing date. Results are limited to 1,000 rows by default but can be sufficient for most analyses.

This is useful for gauging institutional interest, monitoring ownership concentration, or identifying potential buyers or sellers.

Note that only managers with over $100 million in qualifying assets are required to file, so smaller holders are not included.

import finzdata as yf
# Needs a look-back bundle or the Institutional plan (free keys get HTTP 403)
c = yf.Client()
apple_holders = c.holders(ticker="AAPL", period="2026Q2")
print(apple_holders[['manager', 'shares', 'value_usd', 'filing_date']].head())

Tracking Ownership Flows by Quarter

For trend analysis, use institutional_ownership to get time-series data on a stock's holder count, total shares held, and net changes in position. This call returns quarterly snapshots including shares held, changes from the prior quarter, and counts of new, increased, decreased, and closed positions.

On the free plan, this returns only the latest quarter. To access historical trends, you need a look-back bundle or institutional license, which enables multi-quarter retrieval.

This helps answer whether institutions are accumulating or divesting a stock over time, independent of price movements.

Be aware that 13F data is delayed: filings are due within 45 days of quarter end, so Q2 data typically appears in mid-August.

import finzdata as yf
c = yf.Client()
aapl_ownership = c.institutional_ownership(ticker="AAPL")
print(aapl_ownership[['period_end', 'holders', 'shares', 'shares_change', 'new_positions', 'closed_positions']])

Understanding 13F Data Scope and Limits

Form 13F requires institutional investment managers with at least $100 million in qualifying US securities to report their long positions in exchange-listed stocks, stock options, and certain ADRs and ETFs. The data reflects the portfolio as of the last day of the quarter.

Short positions are not required to be reported, so 13F cannot be used to assess bearish sentiment or hedge exposure. Additionally, the 45-day filing lag means the data is never real-time.

Delisted securities are included in FinzData's 13F coverage if they were held during the reporting period and meet the qualification threshold.

Always verify that your use case aligns with what 13F actually discloses: long-only, US-focused, delayed, and limited to large institutional managers.

Questions

Do I need a paid plan to access historical 13F data?

Yes, accessing 13F data beyond the latest quarter requires either a look-back bundle or an institutional license. The free plan provides ownership by stock (institutional_ownership) for the latest quarter; manager books, holder lists and earlier quarters come with a look-back bundle or the Institutional plan.

Can I use 13F data to track short positions?

No, Form 13F only requires disclosure of long positions. Short positions in stocks and options are not reported, so 13F data cannot be used to assess short interest or bearish bets.

How soon after quarter end is 13F data available?

Managers have 45 days after the end of a quarter to file their 13F. For example, Q2 data (ending June 30) is typically available by mid-August. FinzData publishes filings as they are received and processed.

Does the 13F data include ADRs and ETFs?

Yes, 13F filings include exchange-listed ADRs and ETFs that qualify as reportable securities. The data covers US exchange-listed instruments held by managers meeting the $100 million threshold.