EDGAR Form 144
Form 144 notices, filed when an insider intends to sell restricted stock. Usually precedes the completed sale on Form 4.
edgar_form144 — the dataset name to pass to the Obscura API.
What one row means
One proposed-sale line (a single securitiesInformation entry) from an SEC Form 144 "Notice of Proposed Sale of Securities" filing — the leading indicator that an affiliate intends to sell restricted/control stock, pairing with the lagging Form 4 confirmation. Legacy pre-2022 plain-text 144s produce a single stub row (seq 0) carrying only issuer identity from the SEC-HEADER.
One row per (filename, seq) — one EDGAR submission filename plus the zero-based index of the securitiesInformation block within that filing's XML..
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_form144: filing_join: available_date = the filing's EDGAR dissemination date, recovered from edgar_filings via filename — the point-in-time anchor (occurred_on is the affiliate's approximate PLANNED sale date, a separate future-facing field, not the availability basis).
Refresh cadence
Obscura refreshes edgar_form144 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 — 22 columns
The full public column list for edgar_form144, with the meaning of every field. The same
schema is served unauthenticated at https://api.obscura.trade/v1/catalog/edgar_form144.
| Column | Type | Description |
|---|---|---|
| filename | text · not null | EDGAR submission path (sec.gov/Archives/{filename}); identifies the source filing and joins to edgar_filings for the true filing date. |
| seq | integer · not null | Zero-based index of the securitiesInformation block within the filing (0 for legacy stub rows); disambiguates multiple security classes in one 144. |
| cik | bigint · not null | SEC Central Index Key of the issuer whose stock is proposed for sale (parsed from issuerCik, or SEC-HEADER subject/filer CIK for legacy filings). |
| filer_cik | bigint | SEC Central Index Key of the SELLING affiliate (reporting owner) — the first `<cik>` in the filing's headerData filerCredentials block (== SEC-HEADER REPORTING-OWNER CENTRAL INDEX KEY); the canonical person identifier that joins Form 144 intent to Form 4 realized sales. Null on legacy stub rows. |
| issuer_name | text | Name of the issuer company (issuerName, or SEC-HEADER subject/filer name for legacy filings). |
| sec_file_number | text | Issuer's SEC file number (issuerInfo.secFileNumber, e.g. 001-42255) — a cross-dataset issuer/registration identifier. |
| issuer_state | text | Issuer address state-or-country code (issuerInfo.issuerAddress.stateOrCountry), verbatim EDGAR encoding (USPS 2-letter for US states, ISO country otherwise). |
| issuer_city | text | Issuer address city (issuerInfo.issuerAddress.city). |
| issuer_zip | text | Issuer address ZIP / postal code (issuerInfo.issuerAddress.zipCode), verbatim. |
| seller_account | text | Name of the person/trust for whose account the securities are to be sold (nameOfPersonForWhoseAccountTheSecuritiesAreToBeSold) — the selling affiliate. |
| relationship | text | Seller's relationship(s) to the issuer (e.g. Officer, Director, Affiliate), comma-joined from relationshipToIssuer entries. |
| class_title | text | Title of the securities class proposed for sale (securitiesClassTitle), e.g. 'Common Stock'. |
| units_sold | double precision | Number of units the affiliate proposes to sell (noOfUnitsSold). |
| aggregate_market_value | double precision | Aggregate market value of the securities to be sold (aggregateMarketValue), in USD. |
| units_outstanding | double precision | Total number of units of this class outstanding (noOfUnitsOutstanding), as stated on the notice. |
| available_date | date | The filing's SEC dissemination date — when the public could first see it. Recovered from edgar_filings via filename. The point-in-time anchor. |
| occurred_on | date | Approximate PLANNED sale date the affiliate intends to sell on — a future event relative to the filing, not the public-availability date. |
| notice_date | date | Date the affiliate signed the Form 144 notice (noticeSignature.noticeDate) — a distinct event date, typically ~1 day before EDGAR dissemination. No dictionary canonical (occurred_on is taken by the planned sale date). |
| nothing_sold_past_3m | boolean | The affiliate's own "nothing to report" flag for trailing-3-month sales (nothingToReportFlagOnSecuritiesSoldInPast3Months): true = no sales in the past 3 months. The per-sale detail lives in a deferred child table. |
| exchange | text | Name of the securities exchange on which the proposed sale will occur (securitiesExchangeName). |
| broker | text | Name of the broker or market-maker handling the proposed sale (brokerOrMarketmakerDetails.name). |
| scraped_at | timestamp with time zone · not null | Internal ingestion timestamp set to Utc::now() at upsert; provenance/audit only, updated on re-upsert, and excluded from exports. |
Access edgar_form144
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_form144",
symbols=["NVDA", "AAPL"],
start="2024-01-01",
)
Create a free account Browse all 95 datasets
Frequently asked questions
What is in the edgar_form144 dataset?
Form 144 notices, filed when an insider intends to sell restricted stock. Usually precedes the completed sale on Form 4. One proposed-sale line (a single securitiesInformation entry) from an SEC Form 144 "Notice of Proposed Sale of Securities" filing — the leading indicator that an affiliate intends to sell restricted/control stock, pairing with the lagging Form 4 confirmation. Legacy pre-2022 plain-text 144s produce a single stub row (seq 0) carrying only issuer identity from the SEC-HEADER.
How do I avoid look-ahead bias with edgar_form144?
Filter on edgar_form144.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — filing_join: available_date = the filing's EDGAR dissemination date, recovered from edgar_filings via filename — the point-in-time anchor (occurred_on is the affiliate's approximate PLANNED sale date, a separate future-facing field, not the availability basis). 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_form144?
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_form144". The column schema is public at https://api.obscura.trade/v1/catalog/edgar_form144.
Can I filter edgar_form144 by company or symbol?
Yes. edgar_form144 carries cik, the column the API's symbols filter resolves against.
How often is edgar_form144 updated?
Obscura refreshes edgar_form144 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.