Foreign Private Issuer Reports (Form 6-K)
Form 6-K reports, which a foreign private issuer furnishes to the SEC in place of an 8-K, 10-Q or 10-K. The content is whatever its home regulator or home exchange already required it to publish - a material-change report, an exchange announcement, a monthly revenue statement - which makes this the one SEC filing family that is entirely non-US by construction.
edgar_foreign_reports - the dataset name to pass to the Obscura API.
What one row means
One **Form 6-K** report furnished by a foreign private issuer - the only filing family on EDGAR that is, by definition, entirely non-US. A domestic registrant files 8-K/10-Q/10-K, whose contents are prescribed. A foreign private issuer instead *furnishes* whatever its **home regulator or home exchange** already required it to make public, wrapped in a 6-K cover sheet: a TSX material change report, a Companies House RNS announcement, a Brazilian CVM release, a TWSE monthly revenue statement. The wrapper is standard; the contents are not. # What this table is, and what it deliberately is not **It is the cover sheet, the registrant's declared domicile, and the exhibit inventory.** Those are the parts SEC itself structures, and they are the same on every one of the 281,145 6-Ks filed since 2015. **It is not the report.** Measured over four dissemination days spanning 2015-2024 (511 submissions, 5,617 documents): the exhibits total 957 MB, of which 725 MB is `GRAPHIC` and 233 MB is prose - 527 GB and 128 GB respectively when extrapolated over the corpus. There is no schema to extract it into, either: 7 of those 511 filings carry any XBRL at all (1.4 %), and the rest are HTML or PDF in the home regulator's own format. This dataset follows `edgar_filing_text`'s rule - derive, do not warehouse - so what survives is the manifest, the issuer-written `<DESCRIPTION>` of each exhibit, and the counts. # The two domicile columns are two different facts `state_of_incorporation` is where the issuer is INCORPORATED and is **absent on 29 % of filings** (148/511) - BCE Inc's header states none at all. `business_country_code` is where it OPERATES, present on 510/511, and the two DISAGREE on 94 of the 363 filings that state both. That disagreement is the signal, not noise: a Cayman or BVI holding company running a Chinese operating business is the single most common structure in the family. See `docs/datasets/edgar_foreign_reports.md`.
One row per One row per 6-K or 6-K/A submission, keyed by its ACCESSION. The key is the accession and NOT the archive path because EDGAR indexes a submission under one path PER associated registrant, and a dual-listed structure files ONE 6-K on behalf of BOTH legal entities: measured over four dissemination days spanning 2015-2024, 515 index rows carry 511 distinct submissions, and all four duplicated accessions are dual-listed pairs (Rio Tinto plc / Rio Tinto Ltd, Reed Elsevier PLC / Reed Elsevier NV, UBS AG / UBS Group AG twice). Keying on the path would double-count those issuers' reports. The second registrant is preserved in `co_filers` rather than as a second row, so a per-issuer count is a sum over one column instead of a de-duplication..
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_foreign_reports: filing_join: available_date is the EDGAR DISSEMINATION day, taken from the bronze object's own day partition, never from the header's FILED AS OF DATE (SEC moves that field in both directions across the whole EDGAR corpus). A 6-K carries no embargo - Section 13(a) requires it to be furnished PROMPTLY after the information is made public at home - so the report is typically already public abroad before EDGAR disseminates it, and available_date is the day it became available HERE. period_end is EDGAR's CONFORMED PERIOD OF REPORT, which equals the filing day on 312 of 511 measured submissions and precedes it on 195; it is an as-of date for the report's contents and is never an availability anchor.
Refresh cadence
Obscura refreshes edgar_foreign_reports 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 - 25 columns
The full public column list for edgar_foreign_reports, with the meaning of every field. The same
schema is served unauthenticated at https://api.obscura.trade/v1/catalog/edgar_foreign_reports.
| Column | Type | Description |
|---|---|---|
| accession | text · not null | PK. SEC accession number of the submission, e.g. `0001046179-24-000054`. The key is the accession, not the archive path: EDGAR lists a dual-listed issuer's single 6-K under both registrants' CIK paths. |
| filename | text · not null | The PRIMARY registrant's SEC EDGAR Archives path for this submission (`edgar/data/{cik}/{accession}.txt`), derived from the payload's own first `FILER:` block 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. The point-in-time anchor and the only date a backtest may key on. NOTE that a 6-K's contents were usually public in the issuer's HOME market first - this is the day the report became available on EDGAR, which is what a US-market consumer can act on. |
| period_end | date | EDGAR's `CONFORMED PERIOD OF REPORT` - the as-of date the furnished report describes. Bimodal by nature and stated as such: on an event report (a press release, a material change report) it equals the filing day, on a results report it is the fiscal period end. Measured 312 equal / 195 earlier / 4 absent over 511 submissions. NEVER an availability date. |
| accepted_at | timestamp with time zone | When SEC ACCEPTED the submission (`<ACCEPTANCE-DATETIME>`), US-Eastern wall clock stored under a UTC type. Deliberately NOT the availability date: an after-hours acceptance is disseminated the next morning. NULL on a row ingested from the dissemination feed, whose envelope does not carry this stamp - a fact about the envelope, not a decoder gap. |
| filed_as_of | date | SEC's LEGAL filing date (`FILED AS OF DATE`). Kept for parity with `edgar_filings`; never an availability date - measured in prod, 4.88 % of all EDGAR filings carry a back-dated value here. |
| form_type | text · not null | The submission type exactly as EDGAR states it: `6-K` or `6-K/A`. The family has exactly these two literals - 508 `6-K` and 7 `6-K/A` over the four probed dissemination days, and nothing else. |
| is_amendment | boolean · not null | TRUE when this is an amendment (`6-K/A`) restating an earlier report. Rare - 7 of 515 measured index rows. Derived from `form_type`, and the migration CHECKs the derivation rather than trusting the writer. |
| cik | bigint | Central Index Key of the PRIMARY registrant - the first `FILER:` block in the header, which is also the registrant whose path `filename` names. |
| company_name | text | Primary registrant's name as EDGAR conforms it, e.g. `TAIWAN SEMICONDUCTOR MANUFACTURING CO LTD`. |
| sic_code | integer | The primary registrant's SIC code, read from its own header block. |
| state_of_incorporation | text | Where the issuer is INCORPORATED, as an EDGAR state-or-country code (`X0` United Kingdom, `E9` Cayman Islands, `D5` Brazil, `A1` British Columbia, `L3` Israel, `2M` Germany…). **NULL on 29 % of filings** (148 of 511 measured) because a large minority of foreign registrant records simply do not state it - BCE Inc is one - so a NULL is EDGAR's silence, not a parse failure. 43 distinct codes appeared on four days - 41 of them foreign jurisdictions, plus exactly one US state (`NY`) and EDGAR's `XX` unknown placeholder. |
| business_country_code | text | Where the issuer OPERATES: the EDGAR state-or-country code from its `BUSINESS ADDRESS` block. Present on 510 of 511 measured filings, which makes it the reliable country key when `state_of_incorporation` is absent - but it is a DIFFERENT fact, and the two disagree on 94 of the 363 filings that state both. That disagreement is the offshore-holding-company structure (incorporated Cayman/BVI, operating in China) and must not be collapsed. |
| business_city | text | The issuer's HQ city from its `BUSINESS ADDRESS` block, verbatim and unnormalised (`HSINCHU`, `LONDON WC2N 5JR`, `THE NETHERLANDS`) - foreign registrants routinely put a postcode or a country in the city line. |
| irs_number | text | The issuer's IRS Employer Identification Number as text (leading zeros are significant), or NULL. **Usually NULL: 474 of 511 measured filings state the placeholder `000000000`**, which means "this foreign issuer has no EIN" and is normalised to NULL rather than stored as a nine-zero string that reads like a real identifier. Where present it is normally a `98-` foreign-entity EIN. |
| fiscal_year_end | text | The issuer's fiscal year end as EDGAR's four-digit `MMDD`, e.g. `1231`, `0331`, `0630`. Text, not a date - it names a recurring day, not an instant. Measured: 355 `1231`, 23 `0331`, 21 `0630`, and 89 filings that state none. |
| sec_file_number | text | The registrant's SEC file number, e.g. `001-14700`. Overwhelmingly Exchange Act listing numbers - 459 `001-` and 40 `000-` of 511 - with a handful of `333-` and `033-` Securities Act numbers. |
| co_filers | jsonb · not null | JSON array of the ADDITIONAL registrant blocks after the first, as `[{"cik":…,"name":…,"file_number":…}]`; `[]` on the 98 %+ of submissions with a single filer. Non-empty exactly on the dual-listed structures that make the accession, rather than the path, the row key - and those two entities have DIFFERENT domiciles (Reed Elsevier PLC is `X0`, Reed Elsevier NV is `E1`), which is why the pair is preserved instead of being folded into the scalar columns. |
| document_count | integer | Number of documents in the submission (`PUBLIC DOCUMENT COUNT:`) - the TOTAL, including images. Mean 11.0, median 3, max 395 over 511 measured submissions; it exceeds `jsonb_array_length(exhibits)` because `GRAPHIC` members are counted here and are not inventoried there. |
| exhibits | jsonb · not null | Ordered JSON array of every NON-image document in the submission, as `[{"type":…,"sequence":…,"filename":…,"description":…}]` - the 6-K cover document itself plus its `EX-99.x` exhibits. The `description` is the filer's own `<DESCRIPTION>`, verbatim and untruncated. Mean 2.1 entries, median 2, max 18. `GRAPHIC` members are excluded deliberately: they were 4,533 of 5,617 measured documents and 725 MB of the 957 MB, and their `<DESCRIPTION>` is the literal word `GRAPHIC` or empty. Their count survives in `graphic_count`. |
| graphic_count | integer · not null | How many `GRAPHIC` (image) members the submission carried. A deck/photo-heavy report vs a bare press release, and the reason `document_count` is so much larger than the inventory. 309 of 511 measured submissions carry at least one. |
| has_xbrl | boolean · not null | TRUE when the submission carries XBRL (`EX-100.*` / `EX-101.*` / an `XML` member). **Almost never: 7 of 511 measured filings, 1.4 %.** That number is the whole reason this dataset stores a cover sheet and an inventory instead of facts - there is nothing machine-readable inside a 6-K to extract. Note that `EX-10.1` is a material contract and NOT XBRL; the two are one character apart and the parser tests pin the distinction. |
| primary_description | text | The filer's own `<DESCRIPTION>` for the primary 6-K document, e.g. `REPORT OF FOREIGN PRIVATE ISSUER`, `LIVE FILING`, `6-K`, `POLYMET MINING CORP. 6-K`. Free text, not a controlled vocabulary. |
| lead_exhibit_description | text | The `<DESCRIPTION>` of the FIRST `EX-99.x` exhibit, verbatim and untruncated - often the only machine-visible statement of WHAT was reported, since the report itself is unparsed prose. Genuinely informative on only 29 % of exhibits: 356 of 520 measured `EX-99` descriptions are the bare exhibit label (`EX-99.1`, `EXHIBIT 99.1`) and 15 are empty. NULL when the submission has no `EX-99.x` or its description is empty. NOTE that EDGAR's filing-index WEB PAGE truncates this at 80 characters and the submission text does not - this column holds the full string. |
| report_category | text | **HEURISTIC, NOT AUTHORITATIVE.** A coarse guess at what was reported, keyword-matched against the exhibit `<DESCRIPTION>` strings in sequence order: one of `press_release`, `material_change_report`, `financial_statements`, `mdna`, `annual_report`, `interim_report`, `results`, `shareholder_meeting`, `certification`. **NULL on roughly 70 % of rows** - the description is usually just the exhibit label, and nothing is invented to fill that. SEC assigns no category to a 6-K and this column is not one: it is a filter convenience derived from issuer free text, and any analysis that depends on completeness must read `exhibits` instead. |
Access edgar_foreign_reports
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_foreign_reports",
symbols=["NVDA", "AAPL"],
start="2024-01-01",
)
Create a free account Browse all 122 datasets
Frequently asked questions
What is in the edgar_foreign_reports dataset?
Form 6-K reports, which a foreign private issuer furnishes to the SEC in place of an 8-K, 10-Q or 10-K. The content is whatever its home regulator or home exchange already required it to publish - a material-change report, an exchange announcement, a monthly revenue statement - which makes this the one SEC filing family that is entirely non-US by construction. One **Form 6-K** report furnished by a foreign private issuer - the only filing family on EDGAR that is, by definition, entirely non-US. A domestic registrant files 8-K/10-Q/10-K, whose contents are prescribed. A foreign private issuer instead *furnishes* whatever its **home regulator or home exchange** already required it to make public, wrapped in a 6-K cover sheet: a TSX material change report, a Companies House RNS announcement, a Brazilian CVM release, a TWSE monthly revenue statement. The wrapper is standard; the contents are not. # What this table is, and what it deliberately is not **It is the cover sheet, the registrant's declared domicile, and the exhibit inventory.** Those are the parts SEC itself structures, and they are the same on every one of the 281,145 6-Ks filed since 2015. **It is not the report.** Measured over four dissemination days spanning 2015-2024 (511 submissions, 5,617 documents): the exhibits total 957 MB, of which 725 MB is `GRAPHIC` and 233 MB is prose - 527 GB and 128 GB respectively when extrapolated over the corpus. There is no schema to extract it into, either: 7 of those 511 filings carry any XBRL at all (1.4 %), and the rest are HTML or PDF in the home regulator's own format. This dataset follows `edgar_filing_text`'s rule - derive, do not warehouse - so what survives is the manifest, the issuer-written `<DESCRIPTION>` of each exhibit, and the counts. # The two domicile columns are two different facts `state_of_incorporation` is where the issuer is INCORPORATED and is **absent on 29 % of filings** (148/511) - BCE Inc's header states none at all. `business_country_code` is where it OPERATES, present on 510/511, and the two DISAGREE on 94 of the 363 filings that state both. That disagreement is the signal, not noise: a Cayman or BVI holding company running a Chinese operating business is the single most common structure in the family. See `docs/datasets/edgar_foreign_reports.md`.
How do I avoid look-ahead bias with edgar_foreign_reports?
Filter on edgar_foreign_reports.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, never from the header's FILED AS OF DATE (SEC moves that field in both directions across the whole EDGAR corpus). A 6-K carries no embargo - Section 13(a) requires it to be furnished PROMPTLY after the information is made public at home - so the report is typically already public abroad before EDGAR disseminates it, and available_date is the day it became available HERE. period_end is EDGAR's CONFORMED PERIOD OF REPORT, which equals the filing day on 312 of 511 measured submissions and precedes it on 195; it is an as-of date for the report's contents and is never an availability anchor. 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_foreign_reports?
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_foreign_reports". The column schema is public at https://api.obscura.trade/v1/catalog/edgar_foreign_reports.
Can I filter edgar_foreign_reports by company or symbol?
Yes. edgar_foreign_reports carries cik, the column the API's symbols filter resolves against.
How often is edgar_foreign_reports updated?
Obscura refreshes edgar_foreign_reports 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.