EDGAR 13F Holdings
The line-item positions inside each 13F: which manager held which security, and how much, each quarter.
edgar_13f_holdings — the dataset name to pass to the Obscura API.
What one row means
A single position (one `<infoTable>` entry) from the information table of a 13F-HR institutional-manager holdings filing: one issuer/security line reported by one manager for one quarter.
One row per (filename, seq).
Point-in-time availability
Every Obscura dataset carries available_date: the calendar day the publisher made the row
available, day-of, with no session rounding. It is the one column a backtest filters on, and it means the
same thing on every dataset in the catalog.
For edgar_13f_holdings: published: available_date is recovered via filename -> edgar_filings.event_date (the SEC filing/dissemination date), decoupled from period_end (the calendar-quarter-end the holdings are AS OF).
Known limitation
Backfilling 13F deep history. Dense from 2023; earlier quarters hold a thin sample of filings.
Refresh cadence
Obscura refreshes edgar_13f_holdings every weekday — the most frequent scheduled job that re-collects or re-exports it. This is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when a row became public is recorded per row in available_date.
Schema — 18 columns
The full public column list for edgar_13f_holdings, with the meaning of every field. The same
schema is served unauthenticated at https://api.obscura.trade/v1/catalog/edgar_13f_holdings.
| Column | Type | Description |
|---|---|---|
| filename | text · not null | EDGAR archive path of the submission document (also the join key to edgar_filings and edgar_doc_processed); part of the composite PK. |
| seq | integer · not null | Zero-based ordinal of this position within the filing's `<informationTable>`; second half of the composite PK, assigned by enumeration order at parse time. |
| cik | bigint · not null | Central Index Key of the institutional manager (the FILER/reporter), not the issuer; copied from the cover page onto every holding row. |
| available_date | date | The 13F's SEC filing/dissemination date — when the public could first see it. Recovered from edgar_filings via filename. The point-in-time anchor. |
| period_end | date | Reporting-period end (periodOfReport) the holdings are AS OF; filed up to ~45 days later, so never the availability date. |
| name_of_issuer | text | Issuer/company name of the held security as reported by the manager (nameOfIssuer). |
| title_of_class | text | Security class/description reported for the position (titleOfClass), e.g. COM, CALL, NOTE. |
| cusip | text | CUSIP of the held security (indexed via ix_edgar_13f_holdings_cusip); the primary security identifier for the position. |
| value | double precision | Market value of the position in USD as reported (value tag); pre-2023 filings reported this in thousands, so units are not uniform across history. |
| shares | double precision | Share count or principal amount held (sshPrnamt); interpret with sh_prn to know which. |
| sh_prn | text | Amount type for shares: 'SH' (shares) or 'PRN' (principal amount) (sshPrnamtType). |
| put_call | text | Option flag for derivative positions: 'Put' or 'Call'; NULL for ordinary long positions (putCall). |
| investment_discretion | text | Investment discretion category over the position: typically SOLE / SHARED / DFND (investmentDiscretion). |
| voting_sole | double precision | Shares over which the manager has sole voting authority (votingAuthority/Sole). |
| voting_shared | double precision | Shares over which the manager has shared voting authority (votingAuthority/Shared). |
| voting_none | double precision | Shares over which the manager has no voting authority (votingAuthority/None). |
| other_manager | text | Comma-separated sequence numbers (e.g. `2,4,11`) from `<otherManager>` keying into the cover page's `otherManagers2Info` roster — which OTHER co-filing managers also report this position. The attribution link to avoid double-counting when reconstructing beneficial holdings from a jointly-filed 13F group; NULL when solely the filer's. |
| scraped_at | timestamp with time zone · not null | Internal ingestion timestamp (Utc::now() at upsert); the synced_at-equivalent for this dataset, EXCLUDED from exports and not a source event time. |
Access edgar_13f_holdings
Two delivery paths, one identifier. Both require an Obscura account and an active subscription; the catalog entry and the schema above are public.
import obscura
client = obscura.Client("obs_live_…")
df = client.query(
dataset="edgar_13f_holdings",
symbols=["NVDA", "AAPL"],
start="2024-01-01",
)
Create a free account Browse all 95 datasets
Frequently asked questions
What is in the edgar_13f_holdings dataset?
The line-item positions inside each 13F: which manager held which security, and how much, each quarter. A single position (one `<infoTable>` entry) from the information table of a 13F-HR institutional-manager holdings filing: one issuer/security line reported by one manager for one quarter.
How do I avoid look-ahead bias with edgar_13f_holdings?
Filter on edgar_13f_holdings.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — published: available_date is recovered via filename -> edgar_filings.event_date (the SEC filing/dissemination date), decoupled from period_end (the calendar-quarter-end the holdings are AS OF). A query of the form WHERE available_date <= '<as-of date>' never sees a row before it existed.
In what formats can I get edgar_13f_holdings?
As a Parquet bulk export (POST https://api.obscura.trade/v1/download) or as JSON from the typed query API (POST https://api.obscura.trade/v1/query), both with dataset="edgar_13f_holdings". The column schema is public at https://api.obscura.trade/v1/catalog/edgar_13f_holdings.
Can I filter edgar_13f_holdings by company or symbol?
Yes. edgar_13f_holdings carries cik, the column the API's symbols filter resolves against.
Is edgar_13f_holdings complete?
Not yet, and the limitation is declared rather than hidden: Backfilling 13F deep history. Dense from 2023; earlier quarters hold a thin sample of filings.
How often is edgar_13f_holdings updated?
Obscura refreshes edgar_13f_holdings on a every weekday schedule — that is the most frequent scheduled job that re-collects or re-exports the table. It is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when the publisher makes a row available is described by the availability rule above, and is recorded per row in available_date.