Obscura

TRI Releases

Toxic-chemical releases by facility and year, from the EPA's Toxics Release Inventory.

tri_releases — the dataset name to pass to the Obscura API.

Category Health Columns 44 Refresh Daily Point-in-time available_date

What one row means

One reported chemical-release line from a single EPA Toxics Release Inventory Form R submission (Envirofacts `tri_reporting_form`) — one chemical, at one facility, for one reporting year, as filed on one document.

One row per doc_ctrl_num.

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 tri_releases: generated: available_date = received_date, the date EPA Envirofacts logged/received this Form R submission (a STORED generated column).

Refresh cadence

Obscura refreshes tri_releases daily — 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 — 44 columns

The full public column list for tri_releases, with the meaning of every field. The same schema is served unauthenticated at https://api.obscura.trade/v1/catalog/tri_releases.

ColumnTypeDescription
doc_ctrl_numtext · not nullEPA-assigned document control number for the submitted TRI Reporting Form R (Envirofacts `tri_reporting_form.doc_ctrl_num`). Sole primary key and the ON CONFLICT upsert target; a revised/corrected filing gets a new doc_ctrl_num, so this table can carry multiple rows per facility/chemical/year across revisions.
reporting_yearinteger · not nullThe TRI reporting year the form covers (e.g. 2024) — the calendar year the reported chemical activity occurred in. This is the period the release describes, NOT when the row became public.
tri_facility_idtextEPA TRI Facility ID of the reporting facility. Joins to `tri_facilities.tri_facility_id` for facility name, location, and parent company.
tri_chem_idtextChemical identifier code for the reported substance — either a CAS registry number or an EPA generic TRI chemical-category code.
chemical_nametextHuman-readable name of the reported chemical (CAS name, falling back to the generic name).
form_type_indtextForm-type indicator code: `L` (long Form R) or `S` (short-form, reduced-reporting-eligible).
one_time_release_qtydouble precisionQuantity (in pounds) of the chemical reported as a one-time, non-routine release for the reporting year.
production_ratiodouble precisionFacility-reported production/activity ratio for the chemical versus the prior year.
received_datedateThe actual date EPA Envirofacts logged/received this specific Form R submission — the genuine first-public-availability signal, and the source of the generated `available_date` column below.
prod_ratio_or_activitytextQualifies whether `production_ratio` is a PRODUCTION ratio or an ACTIVITY index (raw source key `prod_ratio_or_activity`, e.g. 'PRODUCTION'/'ACTIVITY') — without it the stored ratio is ambiguous. Nullable.
max_amount_of_chemtextMaximum-amount-on-site range code (raw source key `max_amount_of_chem`) — a coded bucket for the largest quantity of the chemical held at the facility during the reporting year; a distinct inventory-magnitude measure. Nullable.
orig_receiveddateOriginal received date of the FIRST filing in this form's revision chain (raw source key `orig_received` timestamp, leading date component) — an earlier point-in-time than `received_date` (a revision gets a new `doc_ctrl_num`). Nullable.
orig_postmarkdateOriginal postmark date of the first filing (raw source key `orig_postmark` timestamp, leading date component) — the submission-postmark counterpart to `orig_received`. Nullable.
media_typetextEnvironmental-medium code categorizing the release (raw source key `media_type`, e.g. 'W' water / 'A' air / 'L' land); a dimension. Nullable.
active_statustextActive-status flag (raw source key `active_status`, e.g. '1') — whether this form is the active/current version or superseded by a later revision. Nullable.
revision_code_1textFirst revision-reason code explaining why the form was refiled (raw source key `revision_code_1`). Nullable.
revision_code_2textSecond revision-reason code (raw source key `revision_code_2`). Nullable.
trade_secret_indtextTrade-secret indicator (raw source key `trade_secret_ind`) — the chemical identity was withheld as a trade secret, so `tri_chem_id`/`chemical_name` may be masked. Nullable.
sanitized_indtextSanitized indicator (raw source key `sanitized_ind`) — the chemical identity was sanitized/generic-ized, affecting reliability of `tri_chem_id`/`chemical_name`. Nullable.
federal_fac_indtextFederal-facility ownership flag (raw source key `federal_fac_ind`). Nullable.
goco_flagtextGovernment-owned-contractor-operated (GOCO) facility flag (raw source key `goco_flag`). Nullable.
dioxin_distribution_1double precisionDioxin congener mass-distribution percentage #1 (raw source key `dioxin_distribution_1`) — populated only for dioxin / dioxin-like compound filings; null otherwise. Nullable.
dioxin_distribution_2double precisionDioxin congener mass-distribution percentage #2 (raw source key `dioxin_distribution_2`). Nullable.
dioxin_distribution_3double precisionDioxin congener mass-distribution percentage #3 (raw source key `dioxin_distribution_3`). Nullable.
dioxin_distribution_4double precisionDioxin congener mass-distribution percentage #4 (raw source key `dioxin_distribution_4`). Nullable.
dioxin_distribution_5double precisionDioxin congener mass-distribution percentage #5 (raw source key `dioxin_distribution_5`). Nullable.
dioxin_distribution_6double precisionDioxin congener mass-distribution percentage #6 (raw source key `dioxin_distribution_6`). Nullable.
dioxin_distribution_7double precisionDioxin congener mass-distribution percentage #7 (raw source key `dioxin_distribution_7`). Nullable.
dioxin_distribution_8double precisionDioxin congener mass-distribution percentage #8 (raw source key `dioxin_distribution_8`). Nullable.
dioxin_distribution_9double precisionDioxin congener mass-distribution percentage #9 (raw source key `dioxin_distribution_9`). Nullable.
dioxin_distribution_10double precisionDioxin congener mass-distribution percentage #10 (raw source key `dioxin_distribution_10`). Nullable.
dioxin_distribution_11double precisionDioxin congener mass-distribution percentage #11 (raw source key `dioxin_distribution_11`). Nullable.
dioxin_distribution_12double precisionDioxin congener mass-distribution percentage #12 (raw source key `dioxin_distribution_12`). Nullable.
dioxin_distribution_13double precisionDioxin congener mass-distribution percentage #13 (raw source key `dioxin_distribution_13`). Nullable.
dioxin_distribution_14double precisionDioxin congener mass-distribution percentage #14 (raw source key `dioxin_distribution_14`). Nullable.
dioxin_distribution_15double precisionDioxin congener mass-distribution percentage #15 (raw source key `dioxin_distribution_15`). Nullable.
dioxin_distribution_16double precisionDioxin congener mass-distribution percentage #16 (raw source key `dioxin_distribution_16`). Nullable.
dioxin_distribution_17double precisionDioxin congener mass-distribution percentage #17 (raw source key `dioxin_distribution_17`). Nullable.
waste_rock_quantitydouble precisionMetal-mining waste-rock quantity (raw source key `waste_rock_quantity`, pounds) — mining-sector waste-rock measure. Nullable.
waste_rock_managed_piletextWaste-rock managed-in-pile attribute (raw source key `waste_rock_managed_pile`) — metal-mining waste-rock managed-pile indicator/code. Nullable.
mixture_nametextTrade name of the mixture the chemical was reported within (raw source key `mixture_name`). Nullable.
withdrawal_code_1textFirst withdrawal-reason code (raw source key `withdrawal_code_1`) — present when a form is withdrawn; null otherwise. Nullable.
withdrawal_code_2textSecond withdrawal-reason code (raw source key `withdrawal_code_2`). Nullable.
available_datedatePUBLIC-availability date, DB-generated as `received_date` (STORED generated column) — the point-in-time column to filter/join on.

Access tri_releases

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="tri_releases",
    start="2024-01-01",
)

Create a free account Browse all 95 datasets

Frequently asked questions

What is in the tri_releases dataset?

Toxic-chemical releases by facility and year, from the EPA's Toxics Release Inventory. One reported chemical-release line from a single EPA Toxics Release Inventory Form R submission (Envirofacts `tri_reporting_form`) — one chemical, at one facility, for one reporting year, as filed on one document.

How do I avoid look-ahead bias with tri_releases?

Filter on tri_releases.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — generated: available_date = received_date, the date EPA Envirofacts logged/received this Form R submission (a STORED generated column). A query of the form WHERE available_date <= '<as-of date>' never sees a row before it existed.

In what formats can I get tri_releases?

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="tri_releases". The column schema is public at https://api.obscura.trade/v1/catalog/tri_releases.

How often is tri_releases updated?

Obscura refreshes tri_releases on a daily 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.

Related datasets

FDA Drug RecallsDrug recalls and related enforcement reports from the FDA. TRI FacilitiesFacilities that report to the EPA's Toxics Release Inventory, with location and industry.