About the Data

What EPA ECHO is, what Parley normalizes, and how the data stays fresh.

What is EPA ECHO?

EPA ECHO (Enforcement and Compliance History Online) is the U.S. Environmental Protection Agency's public database of environmental compliance information. It tracks regulated facilities across the country — whether they're in compliance, what violations they've had, and what enforcement actions have been taken against them.

The dataset covers 3M+ active facilities regulated under four major environmental statutes. Every facility that holds an air emissions permit, discharges to waterways, handles hazardous waste, or operates a public water system appears in ECHO.

ECHO data is public record. Parley sources it directly from EPA's weekly CSV exports and normalizes it into a developer-friendly format.

The Four Programs

EPA regulates facilities under four major environmental statutes. Each facility may be subject to one or more programs.

CAA

Clean Air Act

Regulates air emissions from stationary sources like power plants, refineries, and factories. Tracks air permits, emissions limits, and compliance with National Ambient Air Quality Standards.

CWA

Clean Water Act

Governs discharges to surface waters through NPDES permits. Covers wastewater treatment plants, industrial dischargers, and stormwater facilities.

RCRA

Resource Conservation and Recovery Act

Regulates hazardous waste from generation to disposal. Tracks waste handlers, treatment/storage/disposal facilities, and corrective actions.

SDWA

Safe Drinking Water Act

Oversees public water systems and sets standards for drinking water quality. Monitors contaminant levels, treatment requirements, and health-based violations.

What Parley Normalizes

Raw EPA data is spread across multiple CSV exports with 130+ columns, inconsistent date formats, program-specific compliance codes, and no geospatial capabilities. Parley transforms all of this into a clean, consistent schema.

Unified compliance status

Every facility gets a normalized status: "in_violation", "no_violation", or "unknown" — regardless of which program flagged it.

Violation severity

Program-specific violation flags (HPV, SNC, FRV) are mapped to three tiers: HIGH, SIGNIFICANT, and MINOR across all programs.

Compliance risk score

A computed 0–100 score based on violation recency, frequency, penalty severity, active violations, and inspection gaps.

See scoring methodology
Geospatial indexing

Latitude and longitude are indexed as PostGIS geography points, enabling radius and bounding-box facility searches.

Cross-program identity

Facilities are unified by FRS ID (Facility Registry Service), so a single facility query returns data across all four programs.

Clean data types

Dates, currency amounts, ZIP codes, and industry codes are all parsed into proper types — no more dollar signs in strings or dates in three different formats.

Data Freshness

Weekly sync — Parley downloads fresh EPA data every week and re-processes all records.
<48 hours behind EPA — Data is typically less than two days behind the EPA's own published records.
Scores recomputed — Compliance risk scores are recalculated on every ingestion run, so they always reflect the latest data.

Every API response includes a last_synced_at timestamp showing when the record was last refreshed from EPA.

Data Limitations

Parley sources data directly from EPA's published records. While we normalize and enrich the data, we inherit certain limitations from the upstream source. We believe in being transparent about what the data can and cannot tell you.

Compliance status may be “unknown”

EPA does not track compliance status for all facilities. Smaller facilities, certain program types, and facilities that have never been inspected may show an “unknown” compliance status. This does not mean the facility is non-compliant — it means EPA has no compliance determination on record.

Penalty dates are approximate

EPA's penalty data does not include a specific penalty assessment date. Parley derives the penalty date from the associated enforcement case's settlement or filing date. This is the closest available approximation but may not reflect the exact date the penalty was assessed.

Violation severity is derived, not explicit

EPA records violations using program-specific codes and flags (HPV, SNC, FRV) that differ across the four environmental programs. Parley maps these to a unified three-tier scale (HIGH, SIGNIFICANT, MINOR) using documented EPA definitions. The original program-specific flags are preserved in the source data.

Some facilities lack coordinates

A small number of facilities in EPA's database do not have latitude/longitude data. These facilities are searchable by name, state, and FRS ID, but will not appear in geospatial (radius or bounding box) queries.

Data reflects EPA's reporting, not ground truth

ECHO data depends on self-reporting by facilities and inspection activity by EPA and state agencies. Facilities that are rarely inspected may appear compliant simply due to lack of oversight. The compliance score accounts for inspection gaps, but the underlying data is only as complete as EPA's records.

Enforcement case status may be missing

Some enforcement cases in EPA's records lack a status or outcome description, particularly older cases or cases still in progress. These will appear without a status badge in API responses.

Parley's compliance scores and data are provided for informational purposes only and do not constitute legal, regulatory, or compliance advice. Always verify critical findings against EPA's official records for regulatory or legal use.

EPA ECHO Direct vs. Parley

You can query EPA ECHO directly, but the developer experience has significant friction. Here's what Parley changes:

FeatureEPA ECHO APIParley
AuthenticationQID-based sessionsAPI key header
Response formatInconsistent XML/JSONConsistent JSON
Schema130+ columns, program-specificUnified normalized schema
Geospatial searchNot availableRadius + bounding box
Compliance scoringNot available0-100 computed score
PaginationComplex QID flowCursor + offset pagination
Webhook alertsNot availableReal-time notifications
Rate limitsUndocumentedTransparent, per-tier limits

Next steps