Python function: getInstitutionalHoldings()
| Specification | Value |
|---|
| Delivery Frequency | continuous, daily |
| Data Frequency | quarterly |
| Reporting Lag | Real-time from EDGAR stream (< 1 min); daily backfill safety net |
| Coverage | 14,000+ institutions, 13,800+ securities, SEC Form 13F |
| History | Since 1987-03-31 |
| Availability | Free |
Product Overview
Overview
Institutional Holdings provides structured, real-time data from SEC Form 13F filings — the quarterly disclosure that institutional investment managers exercising discretion over $100 million or more in qualifying assets must file with the SEC. Each filing’s holdings are flattened into per-security rows, enabling queries by ticker, institution, or time period.
The dataset contains 85M+ holdings rows from 14,000+ unique institutions covering 13,800+ securities, with history back to Q1 1987.
Data Pipeline & Latency
Scalar Field ingests 13F filings through two complementary paths:
- Real-time stream: A persistent connection to SEC EDGAR receives filing notifications within seconds of acceptance. Holdings and cover page data are fetched by accession number and written to the database.
- Daily backfill: A safety-net job runs daily, re-processing the last 3 calendar days of filings to catch anything missed by the real-time stream.
- Bulk historical: Full history back to 1987 is loaded from SEC-API’s monthly archives.
Quarterly Filing Volume (recent quarters)
| Quarter | Holdings Rows | Unique Filers |
|---|
| Q1 2024 | 2,119,125 | 7,378 |
| Q2 2024 | 2,122,293 | 7,388 |
| Q3 2024 | 2,408,137 | 7,432 |
| Q4 2024 | 2,560,532 | 8,143 |
| Q1 2025 | 2,584,750 | 8,094 |
| Q2 2025 | 2,579,984 | 8,107 |
| Q3 2025 | 2,586,847 | 8,034 |
| Q4 2025 | 2,920,349 | 8,604 |
Filing volume has grown steadily, with Q4 2025 seeing nearly 2.9M holdings rows from 8,600+ filers.
Timestamp Semantics: ts_recv vs filed_at vs period_of_report
| Timestamp | Meaning | Use Case |
|---|
ts_recv | When Scalar Field’s pipeline first ingested the record (New York time). This is the point-in-time timestamp. | Point-in-time backtesting. Use this as your event timestamp to avoid look-ahead bias. |
filed_at | When the 13F filing was submitted to EDGAR (New York time). | Filing-date analysis. The official SEC submission timestamp. |
period_of_report | The quarter-end date the filing covers (e.g., 2025-12-31 for Q4 2025). | Snapshot analysis. Use to compare holdings across quarters. |
Annual Volume (recent years)
| Year | Holdings Rows |
|---|
| 2020 | 6,886,918 |
| 2021 | 8,324,009 |
| 2022 | 8,319,390 |
| 2023 | 8,368,360 |
| 2024 | 9,210,087 |
| 2025 | 10,671,930 |
Coverage
- Institutions: 14,000+ unique filers (hedge funds, mutual funds, pension funds, insurance companies, bank trust departments, endowments). ~8,600 active filers per quarter in recent periods.
- Securities: 13,800+ unique tickers in recent quarters. Covers U.S. equity and equity-like securities (ETFs, closed-end funds, certain convertible instruments).
- History: Q1 1987 to present, with continuous real-time updates.
- Filing frequency: Quarterly (45 days after quarter-end). Most filings arrive in a concentrated window during the 6th week after quarter-end.
Querying the Data
Basic Usage
from scalarlib import getInstitutionalHoldings
# All funds holding AAPL in recent filings
df = getInstitutionalHoldings(ticker='AAPL', start='2025-01-01', end='2025-12-31')
# Berkshire Hathaway's full portfolio
df = getInstitutionalHoldings(institution_name='berkshire & hathaway', start='2025-01-01', end='2026-02-28')
# Bridgewater OR Citadel holdings of TSLA
df = getInstitutionalHoldings(ticker='TSLA', institution_name='bridgewater | citadel', start='2025-01-01', end='2026-02-28')
# Prefix match for institution names
df = getInstitutionalHoldings(institution_name='bridg:*', start='2025-01-01', end='2025-12-31')
Parameters
| Parameter | Type | Required | Description |
|---|
ticker | str | No | Stock ticker symbol to filter (e.g., 'AAPL'). |
institution_name | str | No | Fund/manager name using PostgreSQL to_tsquery syntax. Supports & (AND), | (OR), ! (NOT), :* (prefix). |
start | str | Yes | Start date (YYYY-MM-DD). |
end | str | Yes | End date (YYYY-MM-DD). |
date_column | str | No | 'filed_at' (default) or 'ts_recv'. |
Column Definitions
Institutional Holdings Schema
| Column | Type | Description |
|---|
ts_recv | datetime | Point-in-time timestamp: when Scalar Field ingested the record (New York time). |
filed_at | datetime | When the 13F filing was submitted to EDGAR (New York time). |
fund_name | string | Name of the institutional investment manager. |
cik | string | SEC Central Index Key — unique identifier for the filing entity. |
ticker | string | Ticker symbol of the held security. |
cusip | string | CUSIP identifier (9-character) for the security. |
name_of_issuer | string | Legal name of the security’s issuer. |
title_of_class | string | Class of security (e.g., COM, CL A, SH BEN INT). |
value | float | Fair market value of the position in thousands of USD (as reported on the 13F). |
shares | float | Number of shares or principal amount held. |
share_type | string | Type of shares: SH (shares) or PRN (principal). |
put_call | string | For options: Put, Call, or null for equity positions. |
investment_discretion | string | SOLE, DEFINED, or SHARED — who has investment authority. |
voting_sole | integer | Number of shares with sole voting authority. |
voting_shared | integer | Number of shares with shared voting authority. |
voting_none | integer | Number of shares with no voting authority. |
period_of_report | date | Quarter-end date the filing covers. |
form_type | string | SEC form type (e.g., 13F-HR, 13F-HR/A for amendments). |
accession_no | string | SEC EDGAR accession number — unique filing identifier. |