EDGAR Filing Text
Signals mined from the text of filings, such as mentions of distress, litigation, going-concern doubt and restructuring.
edgar_filing_text — the dataset name to pass to the Obscura API.
What one row means
Text-derived keyword/size metrics extracted from the full prose of one EDGAR filing document (10-K/10-Q/8-K and their /A amendments): character count plus non-overlapping case-insensitive counts of distress/risk/macro signal phrases (going concern, material weakness, litigation, tariff, etc.).
One row per (filename).
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_filing_text: published: available_date = edgar_filings.event_date, joined by filename -> edgar_filings.filename — the SEC EDGAR filing/acceptance date, the day the filing became publicly retrievable.
Refresh cadence
Obscura refreshes edgar_filing_text 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 — 28 columns
The full public column list for edgar_filing_text, with the meaning of every field. The same
schema is served unauthenticated at https://api.obscura.trade/v1/catalog/edgar_filing_text.
| Column | Type | Description |
|---|---|---|
| filename | text · not null | Primary key. EDGAR filing document path/accession; foreign-key join to edgar_filings.filename and the source reference for the scraped submission. |
| cik | bigint | SEC Central Index Key of the filer, copied from the joined edgar_filings row; nullable when the meta lookup misses. |
| form_type | text | SEC form type of the filing (10-K, 10-K/A, 10-Q, 10-Q/A, 8-K, 8-K/A), copied from the joined edgar_filings row; nullable when meta lookup misses. |
| available_date | date | PUBLIC-availability date, sourced via filename->edgar_filings join = edgar_filings.event_date (the SEC EDGAR filing/acceptance date). Nullable when the meta lookup returns None. |
| char_count | bigint · not null | Length in characters of the markup-stripped, whitespace-collapsed prose extracted from the full submission. |
| risk_factor_mentions | integer · not null | Count of the phrase "risk factor" (proxy for risk-section size). |
| going_concern | integer · not null | Count of "going concern" occurrences (distress signal). |
| material_weakness | integer · not null | Count of "material weakness" occurrences (internal-controls distress signal). |
| restatement | integer · not null | Count of "restatement" occurrences. |
| litigation | integer · not null | Combined count of "litigation" + "lawsuit" occurrences. |
| cybersecurity | integer · not null | Combined count of "cybersecurity" + "data breach" + "cyberattack" occurrences. |
| layoff_restructuring | integer · not null | Combined count of "layoff" + "restructuring" + "workforce reduction" occurrences. |
| inflation | integer · not null | Count of "inflation" occurrences (macro signal). |
| tariff | integer · not null | Substring count of "tariff" (also matches "tariffs"); macro/trade signal. |
| supply_chain | integer · not null | Count of "supply chain" occurrences (macro/operations signal). |
| sic_code | integer | Filer SIC industry code, parsed from the bracketed integer in the `STANDARD INDUSTRIAL CLASSIFICATION` header line (e.g. `3571` from `ELECTRONIC COMPUTERS [3571]`). None when absent/0. |
| sic_description | text | Filer SIC industry label, the text before the bracket in the `STANDARD INDUSTRIAL CLASSIFICATION` header line (e.g. `ELECTRONIC COMPUTERS`). |
| state_of_incorporation | text | Legal state/country of incorporation (domicile), raw `STATE OF INCORPORATION` header line (e.g. `CA`). Jurisdiction attribute, distinct from the HQ location. |
| ein | text | Filer federal Employer Identification Number, raw `IRS NUMBER` header line (e.g. `942404110`); entity identifier for cross-dataset joins. Kept as text to preserve leading zeros/format. |
| period_of_report | date | Fiscal period-end the filing covers, raw `CONFORMED PERIOD OF REPORT` header line (YYYYMMDD → date). A natural/as-of date, NOT a public-availability date (never event_date, per the look-ahead rule). |
| accepted_at | timestamp with time zone | Exact SEC acceptance timestamp, raw `<ACCEPTANCE-DATETIME>` header tag (YYYYMMDDHHMMSS, US-Eastern wall clock stored as-is). Sub-day event_time precision vs the day-grain available_date. |
| public_document_count | integer | Number of documents/exhibits bundled in the filing, raw `PUBLIC DOCUMENT COUNT` header line (e.g. `103`); a complexity/size proxy independent of char_count. |
| sec_file_number | text | SEC file/registration number for the filer, raw `SEC FILE NUMBER` header line (e.g. `001-36743`); regulatory identifier. |
| fiscal_year_end | text | Filer fiscal-year-end MMDD, raw `FISCAL YEAR END` header line (e.g. `0928`); kept as text to preserve the leading zero. Useful for period alignment. |
| business_city | text | Filer HQ city, raw `CITY` line inside the `BUSINESS ADDRESS` header block (e.g. `CUPERTINO`). |
| business_state | text | Filer HQ state/province code, raw `STATE` line inside the `BUSINESS ADDRESS` header block (e.g. `CA`). |
| business_zip | text | Filer HQ postal code, raw `ZIP` line inside the `BUSINESS ADDRESS` header block (e.g. `95014`). Kept as text to preserve leading zeros. |
| scraped_at | timestamp with time zone · not null | Internal ingestion timestamp (Utc::now() at upsert; DB default current_timestamp). This dataset's synced_at analogue; excluded from exports. |
Access edgar_filing_text
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_filing_text",
symbols=["NVDA", "AAPL"],
start="2024-01-01",
)
Create a free account Browse all 95 datasets
Frequently asked questions
What is in the edgar_filing_text dataset?
Signals mined from the text of filings, such as mentions of distress, litigation, going-concern doubt and restructuring. Text-derived keyword/size metrics extracted from the full prose of one EDGAR filing document (10-K/10-Q/8-K and their /A amendments): character count plus non-overlapping case-insensitive counts of distress/risk/macro signal phrases (going concern, material weakness, litigation, tariff, etc.).
How do I avoid look-ahead bias with edgar_filing_text?
Filter on edgar_filing_text.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — published: available_date = edgar_filings.event_date, joined by filename -> edgar_filings.filename — the SEC EDGAR filing/acceptance date, the day the filing became publicly retrievable. 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_filing_text?
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_filing_text". The column schema is public at https://api.obscura.trade/v1/catalog/edgar_filing_text.
Can I filter edgar_filing_text by company or symbol?
Yes. edgar_filing_text carries cik, the column the API's symbols filter resolves against.
How often is edgar_filing_text updated?
Obscura refreshes edgar_filing_text 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.