Obscura

TRI Facilities

Facilities that report to the EPA's Toxics Release Inventory, with location and industry.

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

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

What one row means

One EPA Toxics Release Inventory (TRI) facility master/reference record from Envirofacts' `tri_facility` table — the geocoded identity of a single reporting facility (name, location, county/FIPS, EPA region, coordinates, parent company) that the annual TRI release-reporting rows (`tri_releases`) join to. It is not an event: it is the current state of a facility's registration data as EPA's API currently returns it.

One row per one row per tri_facility_id, upserted in place on every refresh.

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_facilities: snapshot: available_date = COALESCE(captured_date, (synced_at AT TIME ZONE 'UTC')::date), the capture day — the source exposes no vintage/revision/as-of field for this reference table. Equal to the ingestion day on a live run; the bronze partition is ByYear, so a replay leaves captured_date NULL and the fallback keeps the prior behaviour until the partition becomes ByDay.

Refresh cadence

Obscura refreshes tri_facilities 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 — 24 columns

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

ColumnTypeDescription
tri_facility_idtext · not nullTRI-assigned facility identifier, EPA's stable key for a reporting site (e.g. '00602BXTRHRD115'); primary key, not auto-increment. Also the foreign key that tri_releases.tri_facility_id joins against to attach a release-reporting row to its facility.
facility_nametextFacility's registered name as reported to TRI (e.g. 'BAXTER HEALTHCARE CORP, FENWAL DIV'). Nullable; sourced verbatim from the Envirofacts tri_facility feed, uppercase as EPA provides.
city_nametextCity of the facility's physical location, as reported to TRI. Nullable.
county_nametextCounty (or county-equivalent, e.g. 'AGUADA MUNICIPIO' in Puerto Rico) of the facility's location. Nullable.
state_abbrtextTwo-letter US state/territory postal abbreviation of the facility (e.g. 'PR', 'OH'). Nullable.
state_county_fips_codetextCombined state+county FIPS code for the facility's location (e.g. '72003' for Aguada Municipio, PR), as supplied by EPA; used for geographic joins/aggregation to county level. Nullable, kept as text to preserve leading zeros.
regiontextEPA administrative region number covering the facility (e.g. '2' for the New York/Caribbean region), as reported by Envirofacts. Nullable, stored as text.
zip_codetextUS postal ZIP code of the facility, as reported to TRI; may be 5-digit or ZIP+4 depending on source record (e.g. '00602' vs '006020580'). Nullable, kept as text to preserve leading zeros and +4 suffixes.
latitudedouble precisionFacility's preferred latitude in decimal degrees — EPA's best-available geocode for the site, not necessarily the coordinate reported by the facility itself. Nullable.
longitudedouble precisionFacility's preferred longitude in decimal degrees, paired with latitude for the site's best-available geocoded location. Nullable.
parent_co_nametextParent company name exactly as reported by the facility on its TRI submission (self-reported, unstandardized — may vary in spelling/casing across facilities and years for the same true parent). Nullable.
standardized_parent_companytextEPA-standardized/normalized version of the parent company name, used to roll up facilities under a single canonical corporate parent despite variant self-reported spellings. Nullable — frequently blank even when parent_co_name is populated, since standardization coverage is incomplete in the source.
epa_registry_idtextEPA FRS (Facility Registry Service) Registry ID (raw source key `epa_registry_id`, e.g. '110002085207') — EPA's cross-program facility identifier linking this TRI site to FRS/ECHO/RCRA/CAA and every other EPA program dataset; the strongest cross-dataset join key. Nullable, kept as text.
street_addresstextPhysical street address line (raw source key `street_address`, e.g. '111 COLON ST'); completes the postal address — we otherwise keep only city/county/state/zip/lat-lon. Nullable.
fac_closed_indtextFacility-closed indicator (raw source key `fac_closed_ind`): '1' = closed, '0' = open. Lets consumers exclude shuttered sites. Nullable, stored as the raw source code.
parent_co_db_numtextDun & Bradstreet DUNS number of the self-reported parent company (raw source key `parent_co_db_num`, e.g. '080532250'); joins the parent to any DUNS-keyed corporate dataset. Nullable, text to preserve leading zeros.
foreign_parent_co_nametextForeign parent company name as self-reported (raw source key `foreign_parent_co_name`) — the offshore counterpart to `parent_co_name`. Nullable, usually blank.
standardized_foreign_parent_companytextEPA-standardized/normalized foreign parent company name (raw source key `standardized_foreign_parent_company`) — the counterpart to `standardized_parent_company`. Nullable, usually blank.
foreign_parent_co_db_numtextDUNS number of the foreign parent company (raw source key `foreign_parent_co_db_num`); identifier counterpart to `parent_co_db_num`. Nullable, text to preserve leading zeros.
asgn_federal_indtextFederal-facility indicator (raw source key `asgn_federal_ind`, e.g. 'C') — flags whether the site is a federal facility. Nullable category code.
pref_accuracydouble precisionGeocode accuracy radius in meters for the preferred lat/lon (raw source key `pref_accuracy`, e.g. 11000) — quantifies the precision of the `latitude`/`longitude` we store. Nullable.
bia_codetextBureau of Indian Affairs / tribal-land jurisdiction code (raw source key `bia_code`, mostly null) — geo/jurisdiction attribute for the subset of facilities on tribal land. Nullable.
captured_datedateThe UTC calendar day this facility page was CAPTURED from Envirofacts — `Utc::now().date_naive()` on a live run and `BronzeObject::captured_day()` on a bronze replay. CAVEAT: `tri_facilities` lands bronze under `Partition::ByYear`, which records only the capture YEAR, so `captured_day()` cannot recover a day from an existing object and the replay path leaves this NULL rather than inventing one — availability then falls back to `synced_at::date` exactly as before. The column is in place so the fix takes effect the moment the bronze partition becomes `ByDay`. NULL on every row written before migration 000175.
available_datedateSTORED generated column computed as `COALESCE(captured_date, (synced_at AT TIME ZONE 'UTC')::date)`. Since this reference table has no natural vintage/revision/as-of field in the source, available_date is deliberately the CAPTURE date — the day the row became visible to us — which is the correct availability semantics for a live-capture snapshot dataset. Do not confuse with a true publication date: EPA itself exposes no such field for this table.

Access tri_facilities

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

Create a free account Browse all 95 datasets

Frequently asked questions

What is in the tri_facilities dataset?

Facilities that report to the EPA's Toxics Release Inventory, with location and industry. One EPA Toxics Release Inventory (TRI) facility master/reference record from Envirofacts' `tri_facility` table — the geocoded identity of a single reporting facility (name, location, county/FIPS, EPA region, coordinates, parent company) that the annual TRI release-reporting rows (`tri_releases`) join to. It is not an event: it is the current state of a facility's registration data as EPA's API currently returns it.

How do I avoid look-ahead bias with tri_facilities?

Filter on tri_facilities.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — snapshot: available_date = COALESCE(captured_date, (synced_at AT TIME ZONE 'UTC')::date), the capture day — the source exposes no vintage/revision/as-of field for this reference table. Equal to the ingestion day on a live run; the bronze partition is ByYear, so a replay leaves captured_date NULL and the fallback keeps the prior behaviour until the partition becomes ByDay. 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_facilities?

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

How often is tri_facilities updated?

Obscura refreshes tri_facilities 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 ReleasesToxic-chemical releases by facility and year, from the EPA's Toxics Release Inventory.