Obscura

EDGAR Filings

The master index of SEC EDGAR: every filing, with its form type, filer and date.

edgar_filings — the dataset name to pass to the Obscura API.

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

What one row means

One entry from the SEC EDGAR dissemination index: a single filing publicly released on a given day, identified by its Archives path. It is a lightweight catalog/index row (metadata only — no document body), one per submitted filing across all form types. The row carries the two dates SEC states about a filing and keeps them apart: `available_date` is the day it went out on the public dissemination feed, and `filed_as_of` is the legal filing date, which SEC back-dates.

One row per one row per filing, keyed by filename (the unique EDGAR Archives path, which embeds the accession number).

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_filings: published: available_date is the day the filing entered SEC's public dissemination feed — the date of the daily dissemination index file the filing first appears in. WHY: SEC states TWO different dates for the same filing and only one of them is a publication date. The submission's legal FILED AS OF DATE (`filed_as_of` here, and the only date the quarterly roll-up index carries) is set by rule and is routinely BACK-DATED: a paper submission is dated to the day the mailroom received it, days or weeks before staff scan and release it, and a transmission-failure adjustment can move it a month. Dating availability from it would tell a backtest the filing existed before anyone could read it. The daily index is titled 'Daily Index of EDGAR Dissemination Feed' and its file for day D lists what SEC actually put out on D, which is what a consumer could first see. Evidence class A — SEC's own two indexes disagree for the same accession, and the filing's own <ACCEPTANCE-DATETIME> header sides with the daily one (docs/availability/edgar_filings.md).

Refresh cadence

Obscura refreshes edgar_filings 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 — 9 columns

The full public column list for edgar_filings, with the meaning of every field. The same schema is served unauthenticated at https://api.obscura.trade/v1/catalog/edgar_filings.

ColumnTypeDescription
filenametext · not nullUnique EDGAR Archives path for the filing (e.g. "edgar/data/320193/0000320193-26-000123.txt"); embeds the accession number and is the stable per-filing natural key. Relative to https://www.sec.gov/Archives/.
accessiontextSEC accession number extracted from `filename` (e.g. "0000320193-26-000123") — the canonical EDGAR filing identifier, and the key every XBRL/frames payload carries as `accn`. A STORED generated column (m20260702_000191) so joining on it is an index lookup rather than a per-row regex over the whole filing index. NOT unique: EDGAR lists one filing under every associated CIK, so a Form 4 appears under both the issuer and the reporting owner.
cikbigint · not nullSEC Central Index Key of the primary filer, parsed from field 1 of the index row.
company_nametext · not nullFiler/company display name as it appears in the daily index (field 2), uppercase as SEC provides.
form_typetext · not nullSEC form type of the filing (e.g. "144", "424B2", "8-K", "10-K"), from field 3; indexed.
available_datedate · not nullThe day the filing entered SEC's public dissemination feed: the date of the daily dissemination index (`master.YYYYMMDD.idx`) the filing first appears in. This is the public-availability date — filter/join on this, and on nothing else, to avoid look-ahead. Indexed. NOT the same as `filed_as_of`, which SEC back-dates.
filed_as_ofdateThe submission's legal FILED AS OF DATE — field 4 of SEC's quarterly roll-up index and the value the filing header calls `FILED AS OF DATE`. It is a REGULATORY date, not a publication date: for a paper submission it is the day SEC received it, which precedes the day staff released it, and a transmission-failure adjustment can set it weeks earlier still. Kept because it is what a filer, a rule deadline and a lawyer mean by "filed"; never use it as an availability date. NULL only for rows landed before the column existed on a source that no longer publishes a roll-up entry for them.
disseminated_ondateThe EARLIEST daily dissemination-index day this filing was ever seen in, and the provenance of `available_date`: when it is set, `available_date` equals it and is a MEASURED publication date; when it is NULL, no daily index ever carried the filing (SEC's feed starts 1994-07-01, and retro-scanned paper filings never rode it) and `available_date` falls back to the legal `filed_as_of`, which is an assumption rather than an observation. Filter on this being NOT NULL for measured-only availability. It is a column of its own because a filing can appear in SEVERAL daily indexes and availability is the FIRST of them. Taking that minimum over `available_date` would be unsound — before the first dissemination write that column still holds the legal date, which is usually EARLIER — so the minimum must be taken over dissemination days only, and this is the column that holds nothing else.
scraped_attimestamp with time zone · not nullInternal ingestion timestamp set to Utc::now() at upsert. Row bookkeeping only — the conformance convention's synced_at analogue; excluded from exports.

Access edgar_filings

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_filings",
    symbols=["NVDA", "AAPL"],
    start="2024-01-01",
)

Create a free account Browse all 95 datasets

Frequently asked questions

What is in the edgar_filings dataset?

The master index of SEC EDGAR: every filing, with its form type, filer and date. One entry from the SEC EDGAR dissemination index: a single filing publicly released on a given day, identified by its Archives path. It is a lightweight catalog/index row (metadata only — no document body), one per submitted filing across all form types. The row carries the two dates SEC states about a filing and keeps them apart: `available_date` is the day it went out on the public dissemination feed, and `filed_as_of` is the legal filing date, which SEC back-dates.

How do I avoid look-ahead bias with edgar_filings?

Filter on edgar_filings.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — published: available_date is the day the filing entered SEC's public dissemination feed — the date of the daily dissemination index file the filing first appears in. WHY: SEC states TWO different dates for the same filing and only one of them is a publication date. The submission's legal FILED AS OF DATE (`filed_as_of` here, and the only date the quarterly roll-up index carries) is set by rule and is routinely BACK-DATED: a paper submission is dated to the day the mailroom received it, days or weeks before staff scan and release it, and a transmission-failure adjustment can move it a month. Dating availability from it would tell a backtest the filing existed before anyone could read it. The daily index is titled 'Daily Index of EDGAR Dissemination Feed' and its file for day D lists what SEC actually put out on D, which is what a consumer could first see. Evidence class A — SEC's own two indexes disagree for the same accession, and the filing's own <ACCEPTANCE-DATETIME> header sides with the daily one (docs/availability/edgar_filings.md). 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_filings?

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_filings". The column schema is public at https://api.obscura.trade/v1/catalog/edgar_filings.

Can I filter edgar_filings by company or symbol?

Yes. edgar_filings carries cik, the column the API's symbols filter resolves against.

How often is edgar_filings updated?

Obscura refreshes edgar_filings 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 13F HoldingsThe line-item positions inside each 13F: which manager held which security, and how much, each quarter. 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.