# EPA ECHO Environmental Compliance & Facility Scraper (`compute-edge/epa-echo-scraper`) Actor

Search and extract EPA-regulated facility data including compliance status, violations, inspections, and penalties from the EPA ECHO database. Covers Clean Water Act, Clean Air Act, and RCRA programs.

- **URL**: https://apify.com/compute-edge/epa-echo-scraper.md
- **Developed by:** [Compute Edge](https://apify.com/compute-edge) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 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.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Environmental Compliance & Facility Scraper

**Extract EPA-regulated facility data** from the ECHO (Enforcement and Compliance History Online) database. Search for facilities by state, city, NAICS code, or environmental program and get compliance status, violations, inspection history, and penalty data for **800,000+ regulated facilities** across the United States.

This Actor wraps the official EPA ECHO REST API to provide structured, easy-to-use environmental compliance data — perfect for **ESG research**, **supply chain risk assessment**, **environmental due diligence**, and **regulatory compliance monitoring**.

### What data can you extract from EPA ECHO?

| Field | Description |
|-------|-------------|
| **facilityName** | Name of the regulated facility |
| **street** | Street address |
| **city** | City |
| **state** | State |
| **zip** | ZIP code |
| **latitude** | GPS latitude |
| **longitude** | GPS longitude |
| **sourceId** | EPA source/facility ID |
| **permitNumber** | Environmental permit number |
| **permitStatus** | Permit status (Effective, Expired, etc.) |
| **epaSystem** | EPA regulatory system |
| **statute** | Environmental statute (CWA, CAA, RCRA) |
| **populationDensity** | Population density around facility |
| **percentPeopleOfColor** | Environmental justice demographic data |
| **facilityUrl** | Direct link to EPA detailed facility report |

### Why Scrape EPA ECHO? Top Use Cases

- **No API key needed** — the EPA ECHO API is completely free and public
- **Three regulatory programs** — Clean Water Act (CWA), Clean Air Act (CAA), and RCRA hazardous waste
- **800,000+ facilities** — comprehensive coverage of EPA-regulated facilities nationwide
- **Environmental justice data** — includes demographic data around each facility
- **Fast and efficient** — direct API calls, no browser rendering needed
- **Structured output** — clean JSON ready for analysis or database import

### How to search EPA ECHO facilities

1. Go to the [EPA ECHO Scraper](https://apify.com/seatsignal/epa-echo-scraper) page on Apify Store
2. Click **Try for free**
3. Enter a **State** code (e.g., `CA`, `NY`, `TX`)
4. Optionally filter by **City**, **Facility Name**, or **NAICS Code**
5. Select an **Environmental Program** (Clean Water Act, Clean Air Act, or RCRA)
6. Set **Max Results** to control output size
7. Click **Start** and wait for results

### Input example

```json
{
    "state": "CA",
    "mediaProgram": "CWA",
    "maxResults": 50
}
````

### Output example

```json
{
    "facilityName": "ACME MANUFACTURING INC",
    "sourceId": "CA0001234",
    "street": "123 INDUSTRIAL BLVD",
    "city": "LOS ANGELES",
    "state": "CA",
    "zip": "90001",
    "latitude": "34.0522",
    "longitude": "-118.2437",
    "permitNumber": "CA0001234",
    "permitStatus": "Effective",
    "epaSystem": "NPDES",
    "statute": "CWA",
    "populationDensity": "7544.32",
    "percentPeopleOfColor": "68.5",
    "facilityUrl": "https://echo.epa.gov/detailed-facility-report?fid=CA0001234"
}
```

### How Much Does It Cost to Scrape EPA ECHO?

This Actor makes direct API calls (no browser), so compute costs are minimal.

| Scenario | Results | Est. Compute | Est. Actor Fee |
|----------|---------|-------------|----------------|
| One state, 100 facilities | 100 | ~$0.01 | ~$0.50 |
| One state, 1,000 facilities | 1,000 | ~$0.05 | ~$5.00 |
| Multiple states | 5,000 | ~$0.20 | ~$25.00 |

Actor pricing: **$0.005 per result** + minimal compute costs.

### Use cases

- **ESG Research** — Identify facilities with environmental violations for ESG scoring
- **Supply Chain Risk** — Screen suppliers for environmental compliance issues
- **Environmental Due Diligence** — Pre-acquisition facility screening
- **Regulatory Monitoring** — Track compliance status changes over time
- **Environmental Justice** — Analyze facility impacts on vulnerable communities
- **Insurance Underwriting** — Assess environmental risk for facility coverage

### Integrations

- **API** — Access results via the [Apify API](https://docs.apify.com/api/v2)
- **Webhooks** — Get notified when a search completes
- **Zapier / Make** — Export to Google Sheets, CRMs, or databases
- **Python / Node.js** — Use the [Apify SDK](https://docs.apify.com/sdk/js)

### FAQ

#### Is it legal to scrape EPA ECHO?

Yes. EPA ECHO is a public database provided by the U.S. Environmental Protection Agency specifically for public access. This Actor uses the official EPA ECHO REST API, which is free and requires no authentication. All data is publicly available government information.

#### How much does it cost to scrape EPA ECHO?

The Actor charges $0.005 per result plus minimal Apify compute costs. A typical run of 100 facilities costs about $0.50 in Actor fees. See the pricing table above for detailed estimates.

#### Can I export EPA ECHO data to Excel or CSV?

Yes. Apify supports exporting data in JSON, CSV, Excel, XML, HTML, and RSS formats. After the Actor run completes, go to the Dataset tab and choose your preferred export format.

#### How often is the EPA ECHO data updated?

You can schedule this Actor to run at any interval — daily, weekly, or monthly. EPA ECHO data is updated regularly by the EPA from state and federal enforcement databases.

#### What environmental programs are covered?

The Actor covers three major EPA regulatory programs: Clean Water Act (CWA), Clean Air Act (CAA), and Resource Conservation and Recovery Act (RCRA) for hazardous waste. These programs cover over 800,000 regulated facilities nationwide.

### Other Scrapers by SeatSignal

- [EPA Toxics Release Inventory (TRI) Scraper](https://apify.com/seatsignal/epa-tri-scraper) — Extract toxic chemical release data from 3.2M+ EPA TRI records
- [EPA Safe Drinking Water (SDWIS) Scraper](https://apify.com/seatsignal/epa-drinking-water-scraper) — Extract drinking water system compliance data for 433K+ water systems
- [OSHA Inspections Scraper](https://apify.com/seatsignal/osha-inspections-scraper) — Extract workplace safety inspection and violation data
- [Energy Star Certified Products Scraper](https://apify.com/seatsignal/energystar-scraper) — Search 290K+ EPA Energy Star certified products
- [MSHA Mine Safety Scraper](https://apify.com/seatsignal/msha-mine-safety-scraper) — Extract mine safety data for 91K+ US mines

### Legal disclaimer

This Actor accesses publicly available data from the EPA ECHO database through the official public API. It does not bypass authentication, access restricted data, or violate any terms of service. The EPA provides this data for public use.

Users are responsible for ensuring their use of the data complies with applicable laws and regulations.

### Support

- **Issues?** Open an issue on the Actor's Apify page
- **Custom needs?** Contact us for enterprise solutions

# Actor input Schema

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

US state abbreviation (e.g., CA, NY, TX).

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

City name (optional).

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

Search by facility name (partial match).

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

Filter by NAICS industry code.

## `mediaProgram` (type: `string`):

Filter by regulatory program.

## `maxResults` (type: `integer`):

Maximum number of facilities to return.

## Actor input object example

```json
{
  "state": "VT",
  "city": "",
  "facilityName": "",
  "naicsCode": "",
  "mediaProgram": "CWA",
  "maxResults": 100
}
```

# 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 = {
    "state": "VT"
};

// Run the Actor and wait for it to finish
const run = await client.actor("compute-edge/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 = { "state": "VT" }

# Run the Actor and wait for it to finish
run = client.actor("compute-edge/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 '{
  "state": "VT"
}' |
apify call compute-edge/epa-echo-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "EPA ECHO Environmental Compliance & Facility Scraper",
        "description": "Search and extract EPA-regulated facility data including compliance status, violations, inspections, and penalties from the EPA ECHO database. Covers Clean Water Act, Clean Air Act, and RCRA programs.",
        "version": "0.1",
        "x-build-id": "IHoNx2bZEXnstJBja"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/compute-edge~epa-echo-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-compute-edge-epa-echo-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/compute-edge~epa-echo-scraper/runs": {
            "post": {
                "operationId": "runs-sync-compute-edge-epa-echo-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/compute-edge~epa-echo-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-compute-edge-epa-echo-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "state"
                ],
                "properties": {
                    "state": {
                        "title": "State",
                        "type": "string",
                        "description": "US state abbreviation (e.g., CA, NY, TX)."
                    },
                    "city": {
                        "title": "City",
                        "type": "string",
                        "description": "City name (optional).",
                        "default": ""
                    },
                    "facilityName": {
                        "title": "Facility Name",
                        "type": "string",
                        "description": "Search by facility name (partial match).",
                        "default": ""
                    },
                    "naicsCode": {
                        "title": "NAICS Code",
                        "type": "string",
                        "description": "Filter by NAICS industry code.",
                        "default": ""
                    },
                    "mediaProgram": {
                        "title": "Environmental Program",
                        "enum": [
                            "CWA",
                            "CAA",
                            "RCRA"
                        ],
                        "type": "string",
                        "description": "Filter by regulatory program.",
                        "default": "CWA"
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of facilities to return.",
                        "default": 100
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
