Obscura

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.

Category Regulatory Columns 18 Refresh Every weekday Entity key cik Point-in-time available_date

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.

ColumnTypeDescription
filenametext · not nullEDGAR archive path of the submission document (also the join key to edgar_filings and edgar_doc_processed); part of the composite PK.
seqinteger · not nullZero-based ordinal of this position within the filing's `<informationTable>`; second half of the composite PK, assigned by enumeration order at parse time.
cikbigint · not nullCentral Index Key of the institutional manager (the FILER/reporter), not the issuer; copied from the cover page onto every holding row.
available_datedateThe 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_enddateReporting-period end (periodOfReport) the holdings are AS OF; filed up to ~45 days later, so never the availability date.
name_of_issuertextIssuer/company name of the held security as reported by the manager (nameOfIssuer).
title_of_classtextSecurity class/description reported for the position (titleOfClass), e.g. COM, CALL, NOTE.
cusiptextCUSIP of the held security (indexed via ix_edgar_13f_holdings_cusip); the primary security identifier for the position.
valuedouble precisionMarket value of the position in USD as reported (value tag); pre-2023 filings reported this in thousands, so units are not uniform across history.
sharesdouble precisionShare count or principal amount held (sshPrnamt); interpret with sh_prn to know which.
sh_prntextAmount type for shares: 'SH' (shares) or 'PRN' (principal amount) (sshPrnamtType).
put_calltextOption flag for derivative positions: 'Put' or 'Call'; NULL for ordinary long positions (putCall).
investment_discretiontextInvestment discretion category over the position: typically SOLE / SHARED / DFND (investmentDiscretion).
voting_soledouble precisionShares over which the manager has sole voting authority (votingAuthority/Sole).
voting_shareddouble precisionShares over which the manager has shared voting authority (votingAuthority/Shared).
voting_nonedouble precisionShares over which the manager has no voting authority (votingAuthority/None).
other_managertextComma-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_attimestamp with time zone · not nullInternal 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.

Related datasets

CFTC Commitments of TradersThe CFTC's weekly Commitments of Traders report: how commercial, non-commercial and small traders are positioned in each… ECHO Enforcement CasesEnvironmental enforcement actions and penalties from the EPA's ECHO database. ECHO FacilitiesEPA-regulated facilities and their compliance history, from ECHO. EDGAR 13F FilingsMetadata for every 13F report, the quarterly filing where large institutional managers list their U.S. equity holdings. EDGAR 8-K ItemsThe item numbers reported on each 8-K (5.02 officer changes, 2.01 acquisitions, 1.01 material agreements, and so on), so… EDGAR Dilution MetricsShare-issuance headroom and overhang metrics built from companies' XBRL filings: authorized versus outstanding shares, a… EDGAR Filing TextSignals mined from the text of filings, such as mentions of distress, litigation, going-concern doubt and restructuring. EDGAR FilingsThe master index of SEC EDGAR: every filing, with its form type, filer and date.