Obscura

ECHO Facilities

EPA-regulated facilities and their compliance history, from ECHO.

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

Category Regulatory Columns 110 Refresh Daily Point-in-time available_date

What one row means

One regulated facility's current geocoded master attributes — name, address, lat/long, active/major-facility flags, overall compliance status, cumulative lifetime penalty total, lifetime inspection count, and NAICS/SIC classification codes — as of EPA ECHO's latest weekly full-refresh of its `ECHO_EXPORTER.csv` bulk export (inside `echo_exporter.zip`), keyed on `REGISTRY_ID`. This is EPA's facility MASTER file: it carries no intrinsic event or reporting-period date of its own — every row is just the facility's current attributes at the moment EPA regenerated the export — unlike the sibling `echo_enforcement_cases` table, whose rows are dated case activities.

One row per (registry_id).

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 echo_facilities: snapshot: available_date = COALESCE(captured_date, synced_at::date) — the calendar day EPA's weekly full-refresh export was CAPTURED (no intrinsic event/period date exists on this master-file snapshot). Identical to the ingestion day on a live run; on a bronze replay it is the day the source was originally contacted, never the replay day.

Refresh cadence

Obscura refreshes echo_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 — 110 columns

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

ColumnTypeDescription
registry_idtext · not nullEPA FRS (Facility Registry Service) Registry ID, the stable facility key from `REGISTRY_ID`. Primary key; the upsert conflict target.
fac_nametextFacility display name (`FAC_NAME`); often an address-derived label rather than a company name, since FRS registers physical sites as well as businesses.
fac_streettextStreet address of the facility (`FAC_STREET`).
fac_citytextCity (`FAC_CITY`).
fac_statetextTwo-letter US state postal abbreviation (`FAC_STATE`).
fac_ziptextZIP code (`FAC_ZIP`), stored as text to preserve leading zeros / ZIP+4 formats.
fac_countytextCounty (`FAC_COUNTY`).
fac_epa_regiontextEPA administrative region number (01-10) with jurisdiction over the facility (`FAC_EPA_REGION`).
fac_latdouble precisionFacility latitude in decimal degrees (`FAC_LAT`), FRS's own geocode.
fac_longdouble precisionFacility longitude in decimal degrees (`FAC_LONG`).
fac_active_flagtext'Y'/blank text flag indicating the facility is currently active in EPA's regulatory universe (`FAC_ACTIVE_FLAG`); blank means not-confirmed-active, not necessarily inactive.
fac_major_flagtext'Y'/blank text flag indicating EPA classifies the facility as a 'major' source vs. minor/synthetic-minor (`FAC_MAJOR_FLAG`).
fac_compliance_statustextCurrent overall compliance status as of the export's generation (`FAC_COMPLIANCE_STATUS`); a snapshot classification, no history retained of prior values.
fac_snc_flgtext'Y'/'N' text flag indicating the facility is currently in Significant Non-Compliance (SNC/HPV) (`FAC_SNC_FLG`).
fac_total_penaltiesdouble precisionCumulative lifetime monetary penalties assessed against the facility, USD (`FAC_TOTAL_PENALTIES`); a running total as of this weekly snapshot, not a single dated penalty.
fac_inspection_countbigintCumulative lifetime count of EPA/state inspections conducted at the facility (`FAC_INSPECTION_COUNT`); a running total as of this weekly snapshot.
fac_naics_codestextNAICS industry classification code(s) for the facility (`FAC_NAICS_CODES`); raw source text, may hold a delimited list.
fac_sic_codestextLegacy SIC classification code(s) for the facility (`FAC_SIC_CODES`); raw source text, may hold a delimited list.
fac_date_last_inspectiondateDate of the facility's most recent inspection/evaluation (`FAC_DATE_LAST_INSPECTION`), parsed `%m/%d/%Y`.
fac_date_last_formal_actiondateDate of the facility's most recent formal enforcement action (`FAC_DATE_LAST_FORMAL_ACTION`).
fac_date_last_informal_actiondateDate of the facility's most recent informal enforcement action (`FAC_DATE_LAST_INFORMAL_ACTION`).
fac_date_last_penaltydateDate of the facility's most recent penalty (`FAC_DATE_LAST_PENALTY`).
fac_date_last_inspection_epadateDate of the most recent EPA-led inspection (`FAC_DATE_LAST_INSPECTION_EPA`).
fac_date_last_inspection_statedateDate of the most recent state-led inspection (`FAC_DATE_LAST_INSPECTION_STATE`).
fac_date_last_formal_act_epadateDate of the most recent EPA-led formal action (`FAC_DATE_LAST_FORMAL_ACT_EPA`).
fac_date_last_formal_act_stdateDate of the most recent state-led formal action (`FAC_DATE_LAST_FORMAL_ACT_ST`).
fac_date_last_informal_act_epadateDate of the most recent EPA-led informal action (`FAC_DATE_LAST_INFORMAL_ACT_EPA`).
fac_date_last_informal_act_stdateDate of the most recent state-led informal action (`FAC_DATE_LAST_INFORMAL_ACT_ST`).
fac_formal_action_countbigintCount of formal enforcement actions in the last 5 years (`FAC_FORMAL_ACTION_COUNT`).
fac_informal_countbigintCount of informal enforcement actions in the last 5 years (`FAC_INFORMAL_COUNT`).
fac_penalty_countbigintCount of penalties in the last 5 years (`FAC_PENALTY_COUNT`).
fac_qtrs_with_ncbigintNumber of quarters in noncompliance over the last 3 years (`FAC_QTRS_WITH_NC`).
fac_programs_with_sncbigintCount of programs in which the facility has a serious/significant violation (`FAC_PROGRAMS_WITH_SNC`).
fac_last_penalty_amtdouble precisionMost-recent single penalty dollar amount, USD (`FAC_LAST_PENALTY_AMT`); distinct from the lifetime fac_total_penalties.
fac_3yr_compliance_historytext12-quarter overall compliance-status time series string (`FAC_3YR_COMPLIANCE_HISTORY`); raw delimited source text.
tri_releases_transfersdouble precisionToxics Release Inventory total releases + transfers, pounds (`TRI_RELEASES_TRANSFERS`).
tri_on_site_releasesdouble precisionTRI on-site releases, pounds (`TRI_ON_SITE_RELEASES`).
tri_off_site_transfersdouble precisionTRI off-site transfers, pounds (`TRI_OFF_SITE_TRANSFERS`).
ghg_co2_releasesdouble precisionGreenhouse-gas CO2-equivalent emissions (`GHG_CO2_RELEASES`); carbon/ESG measure.
air_idstextClean Air Act program IDs (`AIR_IDS`); raw delimited list, join key to air-program datasets.
npdes_idstextNPDES (Clean Water Act) permit IDs (`NPDES_IDS`); raw delimited list.
rcra_idstextRCRA handler IDs (`RCRA_IDS`); raw delimited list.
sdwa_idstextSafe Drinking Water Act system IDs (`SDWA_IDS`); raw delimited list.
tri_idstextToxics Release Inventory facility IDs (`TRI_IDS`); raw delimited list.
ghg_idstextGreenhouse-gas reporting IDs (`GHG_IDS`); raw delimited list.
fec_case_idstextFederal enforcement case IDs (`FEC_CASE_IDS`); raw delimited list.
air_flagtext'Y'/blank flag: facility is in the Clean Air Act universe (`AIR_FLAG`).
npdes_flagtext'Y'/blank flag: facility is an NPDES (Clean Water Act) permittee (`NPDES_FLAG`).
sdwis_flagtext'Y'/blank flag: facility is in the Safe Drinking Water Act universe (`SDWIS_FLAG`).
rcra_flagtext'Y'/blank flag: facility is an RCRA hazardous-waste handler (`RCRA_FLAG`).
tri_flagtext'Y'/blank flag: facility is a TRI reporter (`TRI_FLAG`).
ghg_flagtext'Y'/blank flag: facility is a greenhouse-gas reporter (`GHG_FLAG`).
caa_permit_typestextCAA permit type(s) (`CAA_PERMIT_TYPES`); raw delimited source text.
caa_evaluation_countbigintCAA evaluation/inspection count, last 5 yrs (`CAA_EVALUATION_COUNT`).
caa_informal_countbigintCAA informal action count, last 5 yrs (`CAA_INFORMAL_COUNT`).
caa_formal_action_countbigintCAA formal action count, last 5 yrs (`CAA_FORMAL_ACTION_COUNT`).
caa_date_last_formal_actiondateDate of last CAA formal action (`CAA_DATE_LAST_FORMAL_ACTION`).
caa_penaltiesdouble precisionCAA penalties total, USD (`CAA_PENALTIES`).
caa_last_penalty_datedateDate of last CAA penalty (`CAA_LAST_PENALTY_DATE`).
caa_last_penalty_amtdouble precisionMost-recent CAA penalty amount, USD (`CAA_LAST_PENALTY_AMT`).
caa_qtrs_with_ncbigintCAA quarters in noncompliance (`CAA_QTRS_WITH_NC`).
caa_compliance_statustextCAA current compliance status (`CAA_COMPLIANCE_STATUS`).
caa_hpv_flagtext'Y'/blank High Priority Violator flag under CAA (`CAA_HPV_FLAG`).
caa_3yr_compl_qtrs_historytextCAA 12-quarter compliance-status time series string (`CAA_3YR_COMPL_QTRS_HISTORY`).
cwa_permit_typestextCWA permit type(s) (`CWA_PERMIT_TYPES`); raw delimited source text.
cwa_inspection_countbigintCWA inspection count, last 5 yrs (`CWA_INSPECTION_COUNT`).
cwa_informal_countbigintCWA informal action count, last 5 yrs (`CWA_INFORMAL_COUNT`).
cwa_formal_action_countbigintCWA formal action count, last 5 yrs (`CWA_FORMAL_ACTION_COUNT`).
cwa_date_last_formal_actiondateDate of last CWA formal action (`CWA_DATE_LAST_FORMAL_ACTION`).
cwa_penaltiesdouble precisionCWA penalties total, USD (`CWA_PENALTIES`).
cwa_last_penalty_datedateDate of last CWA penalty (`CWA_LAST_PENALTY_DATE`).
cwa_last_penalty_amtdouble precisionMost-recent CWA penalty amount, USD (`CWA_LAST_PENALTY_AMT`).
cwa_qtrs_with_ncbigintCWA quarters in noncompliance (`CWA_QTRS_WITH_NC`).
cwa_compliance_statustextCWA current compliance status (`CWA_COMPLIANCE_STATUS`).
cwa_snc_flagtext'Y'/blank Significant Non-Compliance flag under CWA (`CWA_SNC_FLAG`).
cwa_13qtrs_compl_historytextCWA 13-quarter compliance-status time series string (`CWA_13QTRS_COMPL_HISTORY`).
cwa_13qtrs_efflnt_exceedancestextCWA 13-quarter effluent-exceedance time series string (`CWA_13QTRS_EFFLNT_EXCEEDANCES`).
cwa_3_yr_qncr_codestextCWA 3-year QNCR (quarterly noncompliance report) code series (`CWA_3_YR_QNCR_CODES`).
rcra_permit_typestextRCRA permit type(s) (`RCRA_PERMIT_TYPES`); raw delimited source text.
rcra_inspection_countbigintRCRA inspection count, last 5 yrs (`RCRA_INSPECTION_COUNT`).
rcra_informal_countbigintRCRA informal action count, last 5 yrs (`RCRA_INFORMAL_COUNT`).
rcra_formal_action_countbigintRCRA formal action count, last 5 yrs (`RCRA_FORMAL_ACTION_COUNT`).
rcra_date_last_formal_actiondateDate of last RCRA formal action (`RCRA_DATE_LAST_FORMAL_ACTION`).
rcra_penaltiesdouble precisionRCRA penalties total, USD (`RCRA_PENALTIES`).
rcra_last_penalty_datedateDate of last RCRA penalty (`RCRA_LAST_PENALTY_DATE`).
rcra_last_penalty_amtdouble precisionMost-recent RCRA penalty amount, USD (`RCRA_LAST_PENALTY_AMT`).
rcra_qtrs_with_ncbigintRCRA quarters in noncompliance (`RCRA_QTRS_WITH_NC`).
rcra_compliance_statustextRCRA current compliance status (`RCRA_COMPLIANCE_STATUS`).
rcra_snc_flagtext'Y'/blank Significant Non-Compliance flag under RCRA (`RCRA_SNC_FLAG`).
rcra_3yr_compl_qtrs_historytextRCRA 12-quarter compliance-status time series string (`RCRA_3YR_COMPL_QTRS_HISTORY`).
sdwa_system_typestextSDWA public-water-system type(s) (`SDWA_SYSTEM_TYPES`); raw delimited source text.
sdwa_informal_countbigintSDWA informal action count (`SDWA_INFORMAL_COUNT`).
sdwa_formal_action_countbigintSDWA formal action count (`SDWA_FORMAL_ACTION_COUNT`).
sdwa_compliance_statustextSDWA current compliance status (`SDWA_COMPLIANCE_STATUS`).
sdwa_snc_flagtext'Y'/blank Significant Non-Compliance flag under SDWA (`SDWA_SNC_FLAG`).
fec_number_of_casesbigintNumber of federal enforcement cases against the facility (`FEC_NUMBER_OF_CASES`).
fec_last_case_datedateDate of the most recent federal enforcement case (`FEC_LAST_CASE_DATE`).
fec_total_penaltiesdouble precisionTotal federal enforcement-case penalties, USD (`FEC_TOTAL_PENALTIES`).
fac_fips_codetext5-digit state+county FIPS geo identifier (`FAC_FIPS_CODE`).
fac_percent_minoritydouble precisionPercent minority population within a 3-mile radius (`FAC_PERCENT_MINORITY`); environmental-justice demographic.
fac_pop_dendouble precisionPopulation density within a 3-mile radius (`FAC_POP_DEN`); environmental-justice demographic.
fac_derived_huctextWatershed Hydrologic Unit Code derived from the facility's coordinates (`FAC_DERIVED_HUC`).
fac_derived_cd113text113th-Congress congressional district derived from coordinates (`FAC_DERIVED_CD113`).
fac_naa_flagtext'Y'/blank flag: facility is in a Clean Air Act non-attainment area (`FAC_NAA_FLAG`).
fac_imp_water_flgtext'Y'/blank flag: facility discharges to an impaired water (`FAC_IMP_WATER_FLG`).
fac_indian_cntry_flgtext'Y'/blank flag: facility is located in Indian country (`FAC_INDIAN_CNTRY_FLG`).
fac_federal_flgtext'Y'/blank flag: facility is a federal facility (`FAC_FEDERAL_FLG`).
fac_federal_agencytextOwning federal agency for a federal facility (`FAC_FEDERAL_AGENCY`).
captured_datedateThe UTC calendar day EPA's `echo_exporter.zip` was CAPTURED from EPA — set from `Utc::now().date_naive()` on a live run and from the bronze object's capture partition (`BronzeObject::captured_day()`) on a replay, so re-parsing an old capture reproduces its original date instead of stamping today. Not a source field: this is our provenance for when the snapshot became knowable, and the basis of `available_date`. NULL on rows written before migration 000175, where `available_date` falls back to `synced_at::date` — the same value for a live capture.
available_datedatePUBLIC-availability date. STORED generated column, `COALESCE(captured_date, (synced_at AT TIME ZONE 'UTC')::date)` — the calendar day this weekly snapshot was captured. There is no natural per-row event/period date to conform instead, since this is a current-state master file, not a dated transaction log.

Access echo_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="echo_facilities",
    start="2024-01-01",
)

Create a free account Browse all 95 datasets

Frequently asked questions

What is in the echo_facilities dataset?

EPA-regulated facilities and their compliance history, from ECHO. One regulated facility's current geocoded master attributes — name, address, lat/long, active/major-facility flags, overall compliance status, cumulative lifetime penalty total, lifetime inspection count, and NAICS/SIC classification codes — as of EPA ECHO's latest weekly full-refresh of its `ECHO_EXPORTER.csv` bulk export (inside `echo_exporter.zip`), keyed on `REGISTRY_ID`. This is EPA's facility MASTER file: it carries no intrinsic event or reporting-period date of its own — every row is just the facility's current attributes at the moment EPA regenerated the export — unlike the sibling `echo_enforcement_cases` table, whose rows are dated case activities.

How do I avoid look-ahead bias with echo_facilities?

Filter on echo_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::date) — the calendar day EPA's weekly full-refresh export was CAPTURED (no intrinsic event/period date exists on this master-file snapshot). Identical to the ingestion day on a live run; on a bronze replay it is the day the source was originally contacted, never the replay day. A query of the form WHERE available_date <= '<as-of date>' never sees a row before it existed.

In what formats can I get echo_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="echo_facilities". The column schema is public at https://api.obscura.trade/v1/catalog/echo_facilities.

How often is echo_facilities updated?

Obscura refreshes echo_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

CFTC Commitments of TradersThe CFTC's weekly Commitments of Traders report: how commercial, non-commercial and small traders are positioned in each… ECHO Enforcement CasesEnvironmental enforcement actions and penalties from the EPA's ECHO database. EDGAR 13F FilingsMetadata for every 13F report, the quarterly filing where large institutional managers list their U.S. equity holdings. EDGAR 13F HoldingsThe line-item positions inside each 13F: which manager held which security, and how much, each quarter. EDGAR 8-K ItemsThe item numbers reported on each 8-K (5.02 officer changes, 2.01 acquisitions, 1.01 material agreements, and so on), so… EDGAR Dilution MetricsShare-issuance headroom and overhang metrics built from companies' XBRL filings: authorized versus outstanding shares, a… EDGAR Filing TextSignals mined from the text of filings, such as mentions of distress, litigation, going-concern doubt and restructuring. EDGAR FilingsThe master index of SEC EDGAR: every filing, with its form type, filer and date.