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.
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.
| Column | Type | Description |
|---|---|---|
| filename | text · not null | Unique 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/. |
| accession | text | SEC 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. |
| cik | bigint · not null | SEC Central Index Key of the primary filer, parsed from field 1 of the index row. |
| company_name | text · not null | Filer/company display name as it appears in the daily index (field 2), uppercase as SEC provides. |
| form_type | text · not null | SEC form type of the filing (e.g. "144", "424B2", "8-K", "10-K"), from field 3; indexed. |
| available_date | date · not null | The 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_of | date | The 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_on | date | The 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_at | timestamp with time zone · not null | Internal 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.