SEC Registration Effectiveness Notices
SEC notices that a registration statement has been declared effective - the moment an IPO, a shelf or a fund registration becomes usable. Carries which form went effective (S-1, S-3, N-1A), its 333- file number, the effectiveness time, and any co-registrants on the same registration.
edgar_effectiveness_notices - the dataset name to pass to the Obscura API.
What one row means
One SEC `EFFECT` notice - the announcement that a registration statement (S-1, S-3, S-4, F-1, N-1A, `POS AM`, …) has been **declared effective**, i.e. the moment an IPO, a shelf or a fund registration becomes usable. The notice is generated by SEC itself (every accession is `9999999995-YY-NNNNNN`), so the whole submission is a ~600-byte `primary_doc.xml`. It is one of very few EDGAR families carrying a real clock time: `effective_at` is the measured effectiveness instant, and `occurred_on` is its date part. Both are EARLIER than `available_date` - SEC batch-generates these notices at ~00:15 ET on the following dissemination morning, so the notice for a Friday-16:00 effectiveness first becomes readable on Monday. See `docs/datasets/edgar_effectiveness_notices.md`.
One row per One row per EFFECT notice, keyed by its ACCESSION. One notice = ONE registration statement (one 333-/811-/2- file number) declared effective at one instant - co-registrants sharing that registration are a child list on the same row (co_registrant_ciks), never extra rows. The key is the accession and NOT the archive path because EDGAR indexes one notice under one path PER associated CIK: accession 9999999995-15-001321 (EnPro + 18 guarantor subsidiaries) appears as 19 separate rows of master.20150514.idx, and keying on the path would turn one effectiveness event into 19..
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_effectiveness_notices: filing_join: available_date is the EDGAR DISSEMINATION day, taken from the bronze object's own day partition. It is systematically ONE dissemination day AFTER occurred_on because SEC batch-generates these notices at ~00:15 ET the next morning - MEASURED on the daily indexes for 2015-05-13/14 (39/39), 2019-08-14/15 (11/11) and 2024-04-12/15 (28/28). Dating a row from the effectiveness date instead is a one-day look-ahead on the whole family.
Refresh cadence
Obscura refreshes edgar_effectiveness_notices every 6 hours - 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 - 17 columns
The full public column list for edgar_effectiveness_notices, with the meaning of every field. The same
schema is served unauthenticated at https://api.obscura.trade/v1/catalog/edgar_effectiveness_notices.
| Column | Type | Description |
|---|---|---|
| accession | text · not null | PK. SEC accession number of the notice, always `9999999995-YY-NNNNNN` because EFFECT notices are generated by SEC rather than filed by a registrant. The key is the accession, not the archive path: EDGAR lists one notice under one path per co-registrant CIK. |
| filename | text · not null | The PRIMARY registrant's SEC EDGAR Archives path for this notice (`edgar/data/{cik}/{accession}.txt`), derived from the first `<filer>` in the payload rather than from whichever index row was walked - so it is the same value on every ingestion path. The join key into `edgar_filings`. |
| available_date | date | Public availability date: the EDGAR DISSEMINATION day, recovered from the bronze object's day partition. Systematically one dissemination day after `occurred_on`; this is the point-in-time anchor and the only date a backtest may key on. |
| occurred_on | date | The day the registration actually became effective, from `<finalEffectivenessDispDate>`. The real-world event date - earlier than `available_date`, and NOT a date anything could have been read on. |
| effective_at | timestamp with time zone | The exact effectiveness instant from `<finalEffectivenessDispDate>` + `<finalEffectivenessDispTime>`, e.g. 2024-04-12 16:00:00. US-Eastern wall clock stored under a UTC type, matching `edgar_filing_text.accepted_at`. MEASURED to vary (16:00:00, 16:30:00, 10:00:00 across sampled notices), so it is a real time and not a schema constant. NULL when the notice states a date but no time. |
| accepted_at | timestamp with time zone | When SEC's own system GENERATED the notice (`<ACCEPTANCE-DATETIME>`) - always ~00:15 ET on the dissemination day. Provenance for the next-day mechanism; deliberately not the event time. NULL on a row ingested from the dissemination feed rather than from Archives: the feed's PDS envelope does not carry this stamp (measured absent on all 5,602 members of the 2025-08-29 feed day), so a NULL here is a fact about the envelope and not a decoder gap. |
| filed_as_of | date | SEC's legal filing date for the notice (`FILED AS OF DATE`), which equals `occurred_on` on every sampled notice. Kept for parity with `edgar_filings`; never an availability date - SEC back-dates it. |
| registered_form | text | The form that went effective - `S-1`, `S-3`, `S-4`, `F-1`, `N-1A`, `POS AM`, … From `<form>`, falling back to `<effectiveData><submissionType>` on the post-effective-amendment shape. This is the column that separates an IPO from a shelf from a fund registration. |
| registration_accession | text | Accession of the registration statement being declared effective, from `<effectiveData><accessionNumber>`. Present only on the post-effective-amendment shape; the exact filing-level link back to the document that went effective. |
| securities_act | text | Which statute the effectiveness is under, from `<act>`: `33` (Securities Act) or `40` (Investment Company Act). |
| cik | bigint | Central Index Key of the PRIMARY registrant, from the first `<effectiveData><filer><cik>` with leading zeros stripped. |
| company_name | text | Primary registrant's name as stated in the notice (`<filer><entityName>`). |
| file_number | text | The registration file number, e.g. `333-278013`. The join key BACK to the S-1/S-3 filed months earlier and FORWARD to every 424B* takedown off the same shelf. |
| co_registrant_ciks | jsonb · not null | JSON array of `{cik, name, file_number}` for the co-registrants sharing this registration (guarantor subsidiaries on a `333-NNNNNN-NN` suffix), from the second and subsequent `<filer>` elements. Empty array on a single-registrant notice. |
| co_registrant_count | integer · not null | Number of co-registrants on the notice (0 for a plain one, 60 for the GEO Group sample). A cheap proxy for a guaranteed-debt shelf, and the guard against fanning one effectiveness event into 61. |
| sic_code | integer | Primary registrant's SIC code, from the bracketed integer in the SGML header's `STANDARD INDUSTRIAL CLASSIFICATION:` (or the feed envelope's bare `<ASSIGNED-SIC>`). |
| state_of_incorporation | text | Primary registrant's state/country of incorporation, from the SGML header's `STATE OF INCORPORATION:`. |
Access edgar_effectiveness_notices
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_effectiveness_notices",
symbols=["NVDA", "AAPL"],
start="2024-01-01",
)
Create a free account Browse all 122 datasets
Frequently asked questions
What is in the edgar_effectiveness_notices dataset?
SEC notices that a registration statement has been declared effective - the moment an IPO, a shelf or a fund registration becomes usable. Carries which form went effective (S-1, S-3, N-1A), its 333- file number, the effectiveness time, and any co-registrants on the same registration. One SEC `EFFECT` notice - the announcement that a registration statement (S-1, S-3, S-4, F-1, N-1A, `POS AM`, …) has been **declared effective**, i.e. the moment an IPO, a shelf or a fund registration becomes usable. The notice is generated by SEC itself (every accession is `9999999995-YY-NNNNNN`), so the whole submission is a ~600-byte `primary_doc.xml`. It is one of very few EDGAR families carrying a real clock time: `effective_at` is the measured effectiveness instant, and `occurred_on` is its date part. Both are EARLIER than `available_date` - SEC batch-generates these notices at ~00:15 ET on the following dissemination morning, so the notice for a Friday-16:00 effectiveness first becomes readable on Monday. See `docs/datasets/edgar_effectiveness_notices.md`.
How do I avoid look-ahead bias with edgar_effectiveness_notices?
Filter on edgar_effectiveness_notices.available_date, the day the publisher made the row public. For this dataset that date is derived as follows - filing_join: available_date is the EDGAR DISSEMINATION day, taken from the bronze object's own day partition. It is systematically ONE dissemination day AFTER occurred_on because SEC batch-generates these notices at ~00:15 ET the next morning - MEASURED on the daily indexes for 2015-05-13/14 (39/39), 2019-08-14/15 (11/11) and 2024-04-12/15 (28/28). Dating a row from the effectiveness date instead is a one-day look-ahead on the whole family. 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_effectiveness_notices?
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_effectiveness_notices". The column schema is public at https://api.obscura.trade/v1/catalog/edgar_effectiveness_notices.
Can I filter edgar_effectiveness_notices by company or symbol?
Yes. edgar_effectiveness_notices carries cik, the column the API's symbols filter resolves against.
How often is edgar_effectiveness_notices updated?
Obscura refreshes edgar_effectiveness_notices on a every 6 hours 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.