# EPA ECHO Facility Compliance & Violations Scraper (`scrapers_lat/epa-echo-scraper`) Actor

Scrape US EPA ECHO facility compliance and enforcement records. Extract facility name, address, compliance status, violations, inspections, formal actions and total penalties across all 50 states and US territories. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/scrapers\_lat/epa-echo-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Business, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $6.15 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

[![EPA ECHO Facility Compliance & Violations Scraper](https://scrapers.lat/banners/epa-echo-scraper.png)](https://console.apify.com/actors/SKioxlSEARmV8LkNF/input)

## EPA ECHO Facility Compliance & Violations Scraper

> The most complete EPA ECHO scraper on Apify. Extract 55+ fields per facility from the official ECHO database: compliance status, permits, violations, quarters in noncompliance, inspections, formal enforcement actions, penalties, toxic release and greenhouse gas reporting and environmental justice indicators, across Clean Air, Clean Water, RCRA and Safe Drinking Water programs in all 50 states and US territories.

**📥 [Input](https://apify.com/scrapers_lat/epa-echo-scraper/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/epa-echo-scraper/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/epa-echo-scraper/pricing) · ▶️ [Examples](https://apify.com/scrapers_lat/epa-echo-scraper/examples)**

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify\&logoColor=white)
![Coverage](https://img.shields.io/badge/Coverage-USA%20%2B%20territories-blue)
![Maintained](https://img.shields.io/badge/Maintained-Yes-brightgreen)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-orange)

<table><tr>
<td align="center"><strong>55+ fields</strong><br>per record</td>
<td align="center"><strong>USA + territories</strong><br>coverage</td>
<td align="center"><strong>JSON / CSV / Excel</strong><br>output formats</td>
</tr></table>

<br>

### What you get per facility

Most EPA ECHO scrapers return little more than a name, an address and a compliance flag. This one returns the full compliance and enforcement picture for every facility:

- **Identity and location**: facility name, street, city, county, state, ZIP, county FIPS, latitude and longitude, EPA Region, FRS Registry ID and the program IDs (Air, NPDES, RCRA, SDWA, TRI, GHG).
- **Industry and type**: NAICS and SIC codes, major-facility flag, active flag, federal facility and agency name, tribal land, nonattainment area and impaired water flags.
- **Permits**: permit types held under each program (Clean Air, Clean Water, RCRA, Safe Drinking Water).
- **Compliance**: overall compliance status, per-program compliance status, current violation flag, significant violation flag, Clean Air high-priority violator flag, quarters in noncompliance and a 3-year quarterly compliance history.
- **Inspections and enforcement**: inspections in the last 5 years (total and per program), formal and informal actions (total and per program), penalty count, total penalties, last penalty amount and dates for the last inspection, formal action and penalty.
- **Pollutant reporting**: greenhouse gas CO2 releases and Toxics Release Inventory releases and transfers.
- **Environmental justice**: percent minority, percent people of color and percent low income for the surrounding area.
- **Detailed Facility Report (optional)**: a per-program compliance breakdown and the full list of individual formal enforcement actions with statute, action type, lead agency, penalty amount and date, plus a direct link to the official DFR.

### Who is it for

| Use case | Who benefits |
|---|---|
| Find facilities currently in violation in a state or county | Environmental compliance consultants |
| Rank penalties and enforcement by industry (NAICS/SIC) | Researchers and journalists |
| Screen sites and counterparties for environmental risk | ESG and due-diligence analysts |
| Monitor refineries, plants and dischargers near a location | Community and advocacy groups |
| Build datasets of inspections, violations and penalties | Data teams and legal analysts |

### Frequently Asked Questions

**Which facilities and areas does this cover?**\
It covers facilities tracked in EPA's ECHO database across all 50 US states, DC and the territories (Puerto Rico, Guam, Virgin Islands and more). That includes facilities regulated under the Clean Air Act, Clean Water Act (NPDES), RCRA hazardous waste, the Safe Drinking Water Act and reported to the Toxics Release Inventory.

**How many facilities can I pull in one run?**\
ECHO rejects any single search that would return more rows than its query limit, so a whole large state at once is not allowed. Combine a state with a county, city, ZIP, NAICS or SIC to focus the search. Within a valid search you can collect from a handful up to the full result set using Max Items.

**How do I narrow the search?**\
Use the State, County, City, ZIP Code, Facility Name, NAICS Code and SIC Code filters in any combination, plus toggles for active-only and major facilities. You can also filter by EPA program (Clean Air, Clean Water, RCRA, Safe Drinking Water, TRI, GHG or EPCRA), by EPA Region, to federal facilities or tribal land only, or search within a radius of any latitude and longitude point. When a search returns more facilities than Max Items, the scraper surfaces the facilities with the most enforcement signal (penalties, formal actions, violations, inspections) first.

**Can I pull only the facilities that are actually in trouble?**\
Yes. The compliance signal filters let you keep only facilities with current violations, only facilities with formal enforcement actions, only significant or high-priority violators, only facilities above a minimum total penalty, or only facilities inspected on or after a given date. Combine them to build a focused list of high-risk sites instead of downloading everything.

**How is this different from other EPA ECHO scrapers?**\
Most alternatives return a thin record: name, address and a single compliance flag. This scraper returns 55+ fields per facility, including permits, per-program compliance status, quarters in noncompliance, per-program inspection and enforcement counts, penalty amounts and dates, greenhouse gas and Toxics Release Inventory reporting, environmental justice indicators, and the full list of individual formal enforcement actions from the Detailed Facility Report. It also adds program, region, geographic radius and compliance-signal filters that the thinner scrapers do not offer.

**What is the difference with detail reports on?**\
With "Fetch facility detail report" enabled, each facility is enriched with its Detailed Facility Report: a per-program compliance breakdown and the list of individual formal enforcement actions with penalty amounts and dates. Turn it off for a faster, list-only pull of the headline compliance figures.

**What happens when a facility has no enforcement history?**\
Many facilities are small sites with no inspections, violations or penalties. Those records still come through with their identity and location, with the compliance counters at zero or null. Penalty, violation and inspection fields are only populated where EPA has data.

### Example use cases

Ready-to-run example tasks, each preconfigured for a common scenario. Open one and press run, or use it as a template:

- [EPA Cook County Illinois Facility Compliance Data](https://apify.com/scrapers_lat/epa-echo-scraper/examples/epa-cook-county-illinois-facilities): EPA Cook County Illinois Facility Compliance Data
- [EPA Florida Chemical Manufacturer Compliance Scraper](https://apify.com/scrapers_lat/epa-echo-scraper/examples/epa-florida-chemical-manufacturers): EPA Florida Chemical Manufacturer Compliance Scraper
- [EPA Ohio Electric Power Plant Compliance Scraper](https://apify.com/scrapers_lat/epa-echo-scraper/examples/epa-ohio-electric-power-plants): EPA Ohio Electric Power Plant Compliance Scraper
- [EPA Pennsylvania Active Facility Compliance Scraper](https://apify.com/scrapers_lat/epa-echo-scraper/examples/epa-pennsylvania-active-facilities): EPA Pennsylvania Active Facility Compliance Scraper
- [EPA Louisiana Petroleum Refinery Compliance Scraper](https://apify.com/scrapers_lat/epa-echo-scraper/examples/epa-louisiana-petroleum-refineries): EPA Louisiana Petroleum Refinery Compliance Scraper
- [EPA Michigan Hazardous Waste Facility Scraper](https://apify.com/scrapers_lat/epa-echo-scraper/examples/epa-michigan-hazardous-waste-facilities): EPA Michigan Hazardous Waste Facility Scraper
- [EPA Georgia Food Processing Plant Compliance Scraper](https://apify.com/scrapers_lat/epa-echo-scraper/examples/epa-georgia-food-processing-plants): EPA Georgia Food Processing Plant Compliance Scraper
- [EPA California Semiconductor Plant Compliance Scraper](https://apify.com/scrapers_lat/epa-echo-scraper/examples/epa-echo-scraper-ca-semiconductor): EPA California Semiconductor Plant Compliance Scraper
- [EPA Harris County Texas Facility Compliance Scraper](https://apify.com/scrapers_lat/epa-echo-scraper/examples/epa-echo-scraper-tx-harris-county): EPA Harris County Texas Facility Compliance Scraper
- [EPA New York Paper Manufacturing Compliance Scraper](https://apify.com/scrapers_lat/epa-echo-scraper/examples/epa-echo-scraper-ny-paper-mills): EPA New York Paper Manufacturing Compliance Scraper

### Export, API and AI agents (x402 + MCP)

Export the scraped data to **JSON, CSV or Excel**, pull it as a **dataset** through the Apify **API**, or wire it into your app with **no code**. This web scraper and data extractor also works for bulk data extraction and scheduled runs.

For AI agents: this Actor is available on **x402**, Apify's agentic payment standard built with Coinbase. An AI agent can discover, pay for and run it on its own with a funded wallet and a single HTTP request: no account, no subscription, no API key and no human in the loop. It also runs as an **MCP** tool inside Claude, Cursor and other AI clients out of the box. Learn more about [x402 agentic payments on Apify](https://docs.apify.com/platform/integrations/x402).

### Related scrapers

Need data from the same space? Here are other scrapers we build and maintain:

- [FMCSA Motor Carrier Scraper](https://apify.com/scrapers_lat/fmcsa-carriers-scraper): Extract US motor carrier records from the public FMCSA census: DOT number, legal and DBA names, fleet size and safety data.
- [SEC EDGAR Company Filings Scraper](https://apify.com/scrapers_lat/sec-edgar-filings-scraper): Scrape SEC EDGAR company filings by ticker or CIK. Get form type, filing date and accession numbers.
- [USAspending Federal Award Scraper](https://apify.com/scrapers_lat/usaspending-awards-scraper): Scrape US federal prime awards from USAspending.gov. Get recipient, award amount and awarding agency.
- [openFDA Food Recall Scraper](https://apify.com/scrapers_lat/openfda-food-recalls-scraper): Scrape FDA food recall and enforcement actions from the official openFDA API. Filter by classification and date.
- [ProPublica Nonprofit 990 Scraper](https://apify.com/scrapers_lat/propublica-nonprofits-scraper): Scrape US nonprofit organizations and their IRS Form 990 financials from the ProPublica Nonprofit Explorer.
- [NPPES NPI Provider Scraper](https://apify.com/scrapers_lat/nppes-npi-scraper): Scrape US healthcare provider records from the official NPPES NPI Registry by name, specialty, city or state.

### Why teams choose this scraper

- **You are never charged for empty or failed runs** — you only pay for data you actually receive.
- **Maintained and monitored** — if the source site changes, we fix it fast.
- **Clean, typed output** — one record per result, ready for your CRM, spreadsheet or database.

If this scraper saves you time, a quick ⭐ review on Apify helps other people find it and helps us keep improving it.

### More scrapers at scrapers.lat

This actor is built and maintained by [scrapers.lat](https://scrapers.lat), where we publish scrapers for Latin American and US public platforms: real estate, jobs, e-commerce, company registries and government data. Browse the full catalog, see live sample output for each one, or ask us for a custom scraper at [scrapers.lat](https://scrapers.lat).

# Actor input Schema

## `maxFacilities` (type: `integer`):

Maximum number of facilities to collect. Optional. A single ECHO query returns at most a few hundred thousand rows, so narrow your filters for focused pulls.

## `withDetails` (type: `boolean`):

When enabled, each facility is enriched with its Detailed Facility Report (DFR): a per-program (Clean Air, Clean Water, RCRA, SDWA) compliance breakdown and the list of formal enforcement actions with penalty amounts and dates. Disable for a faster, list-only pull.

## `state` (type: `string`):

Two-letter US state or territory code, for example CA, NY, TX, PR. The most reliable primary filter.

## `county` (type: `string`):

County name, for example ALAMEDA, HARRIS, COOK. Combine with State.

## `city` (type: `string`):

City name, for example BERKELEY, HOUSTON. Combine with State.

## `zipCode` (type: `string`):

5-digit US ZIP code, for example 94704.

## `facilityName` (type: `string`):

Facility name to match, for example CHEVRON, US STEEL. Partial matches are supported.

## `naicsCode` (type: `string`):

Industry NAICS code, full or partial prefix, for example 3254 (pharmaceutical) or 324 (petroleum).

## `sicCode` (type: `string`):

Industry SIC code, for example 2911 (petroleum refining).

## `activeOnly` (type: `boolean`):

Restrict to facilities currently flagged active in EPA program systems.

## `majorOnly` (type: `boolean`):

Restrict to facilities classified as major under Clean Air or Clean Water programs (larger emitters and dischargers).

## `program` (type: `string`):

Restrict to facilities regulated under a single EPA program: Clean Air, Clean Water (NPDES), RCRA hazardous waste, Safe Drinking Water, Toxics Release Inventory, Greenhouse Gas or EPCRA.

## `epaRegion` (type: `string`):

Restrict to a single EPA Region (01 through 10). Optional; usually only needed for multi-state pulls.

## `federalFacilitiesOnly` (type: `boolean`):

Restrict to federally owned or operated facilities (military bases, federal agencies).

## `tribalLandOnly` (type: `boolean`):

Restrict to facilities located in Indian country / tribal land.

## `latitude` (type: `string`):

Center-point latitude for a radius search, for example 29.7604. Provide with Longitude and Radius to find facilities near a point.

## `longitude` (type: `string`):

Center-point longitude for a radius search, for example -95.3698.

## `radiusMiles` (type: `integer`):

Search radius in miles around the Latitude/Longitude point, for example 5.

## `onlyWithViolations` (type: `boolean`):

Keep only facilities flagged with a current violation in any program (Clean Air, Clean Water, RCRA or SDWA).

## `onlyWithEnforcement` (type: `boolean`):

Keep only facilities with at least one formal enforcement action in the last 5 years.

## `onlySignificantViolators` (type: `boolean`):

Keep only facilities currently flagged as significant non-compliers or high-priority violators.

## `minPenaltyUsd` (type: `integer`):

Keep only facilities whose total assessed penalties are at least this amount, for example 100000.

## `inspectedSince` (type: `string`):

Keep only facilities whose last inspection was on or after this date (YYYY-MM-DD), for example 2023-01-01.

## Actor input object example

```json
{
  "maxFacilities": 10,
  "withDetails": true,
  "state": "TX",
  "city": "AUSTIN",
  "activeOnly": false,
  "majorOnly": false,
  "program": "",
  "epaRegion": "",
  "federalFacilitiesOnly": false,
  "tribalLandOnly": false,
  "onlyWithViolations": false,
  "onlyWithEnforcement": false,
  "onlySignificantViolators": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxFacilities": 10,
    "state": "TX",
    "city": "AUSTIN"
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/epa-echo-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "maxFacilities": 10,
    "state": "TX",
    "city": "AUSTIN",
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/epa-echo-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxFacilities": 10,
  "state": "TX",
  "city": "AUSTIN"
}' |
apify call scrapers_lat/epa-echo-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapers_lat/epa-echo-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/SKioxlSEARmV8LkNF/builds/io2vlwCvnxrPUYdIY/openapi.json
