# EPA ECHO Violation Monitor: Facility Changes (`getascraper/epa-echo-violation-monitor`) Actor

Monitor official EPA ECHO facility compliance, violation, enforcement, and penalty records by facility ID, state, or EPA region. Return source-linked NEW, CHANGED, and REMOVED events for EHS, due-diligence, and compliance teams.

- **URL**: https://apify.com/getascraper/epa-echo-violation-monitor.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Automation, Other, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.31 / 1,000 facility records

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 Violation Monitor: Facility Changes

<table width="100%" style="display:table;width:100%;border-collapse:collapse"><tr><td style="padding:24px 28px;background:#EEF4FA;border:1px solid #B9CDE1;border-top:4px solid #164E7A;border-radius:12px"><span style="font-size:23px;font-weight:800;color:#102A43;line-height:1.3">Keep official facility compliance changes ready for review.</span><br><span style="font-size:15px;color:#334E68;line-height:1.6">Monitor EPA ECHO records by facility, state, or EPA region, then retain source-linked compliance, enforcement, and penalty details.</span></td></tr></table>

<table width="100%" style="display:table;width:100%;border-collapse:collapse;table-layout:fixed"><tr><td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #B9CDE1;border-radius:10px 0 0 10px;vertical-align:top"><span style="font-size:15px;font-weight:800;color:#164E7A">🏛️ Official source</span><br><span style="font-size:12px;color:#334E68">Keep the ECHO source service beside every result.</span></td><td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #B9CDE1;border-left:none;vertical-align:top"><span style="font-size:15px;font-weight:800;color:#164E7A">🔔 Change events</span><br><span style="font-size:12px;color:#334E68">Separate new, changed, and removed records after a complete run.</span></td><td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #B9CDE1;border-left:none;vertical-align:top"><span style="font-size:15px;font-weight:800;color:#164E7A">⚖️ Enforcement context</span><br><span style="font-size:12px;color:#334E68">Review published status, actions, and penalty totals.</span></td><td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #B9CDE1;border-left:none;border-radius:0 10px 10px 0;vertical-align:top"><span style="font-size:15px;font-weight:800;color:#164E7A">🧭 Focused scopes</span><br><span style="font-size:12px;color:#334E68">Search facility IDs, states, or EPA regions.</span></td></tr></table>

Monitor official EPA ECHO facility compliance, violation, enforcement, and penalty records by facility, state, or EPA region. Keep source-linked changes in a reviewable EHS or due-diligence workflow.

### 🎯 What it does

The Actor reads public ECHO facility records within your selected scope. It can return current records or safe `NEW`, `CHANGED`, and `REMOVED` events after a complete earlier run.

### 👥 Who it is for

- EHS and environmental-compliance teams managing facility watchlists.
- Due-diligence teams reviewing public enforcement information.
- Analysts building a recurring environmental-risk dataset.

### ⚙️ How it works

<table width="100%" style="display:table;width:100%;border-collapse:collapse;table-layout:fixed"><tr><td style="padding:16px 14px;width:33%;background:#EEF4FA;border:1px solid #B9CDE1;border-radius:10px 0 0 10px;vertical-align:top"><span style="font-size:12px;font-weight:800;color:#164E7A;letter-spacing:1px">STEP 1</span><br><span style="font-size:14px;font-weight:700;color:#102A43">Choose a scope</span><br><span style="font-size:12px;color:#334E68">Use facility IDs, states, or EPA regions.</span></td><td style="padding:16px 14px;width:33%;background:#EEF4FA;border:1px solid #B9CDE1;border-left:none;vertical-align:top"><span style="font-size:12px;font-weight:800;color:#164E7A;letter-spacing:1px">STEP 2</span><br><span style="font-size:14px;font-weight:700;color:#102A43">Set the run mode</span><br><span style="font-size:12px;color:#334E68">Choose a full snapshot or changes-only monitoring.</span></td><td style="padding:16px 14px;width:33%;background:#EEF4FA;border:1px solid #B9CDE1;border-left:none;border-radius:0 10px 10px 0;vertical-align:top"><span style="font-size:12px;font-weight:800;color:#164E7A;letter-spacing:1px">STEP 3</span><br><span style="font-size:14px;font-weight:700;color:#102A43">Review source changes</span><br><span style="font-size:12px;color:#334E68">Schedule the same scope to maintain a change feed.</span></td></tr></table>

### 🧾 Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| EPA Registry IDs | Array | Conditional | Public facility IDs. Do not combine with state or region filters. |
| States | Array | Conditional | Two-letter state filters. |
| EPA regions | Array | Conditional | EPA regions 1 through 10. |
| Active facilities only | Boolean | No | Requests the source active-facility filter when available. |
| Output mode | Choice | No | Full snapshot or changes-only output. |
| Maximum facilities | Number | No | Caps source rows. A capped scope does not update saved state. |

### 📊 Output

| Field | Type | Description |
| --- | --- | --- |
| changeType | String | Relation to the saved baseline. |
| facilityName | String | Published facility name. |
| registryId | String | EPA registry identifier. |
| sourceComplianceStatus | String | Official source compliance status. |
| formalEnforcementActionCount | Number | Published count of formal enforcement actions. |
| totalPenalties | Number | Published total penalty amount. |
| sourceServiceUrl | URL | Official ECHO source service link. |

### 💡 Good to know

- Enter at least one facility ID, state, or EPA region.
- Results are public source records, not a legal finding about a facility.
- Capped runs do not update the saved comparison state.

### 💰 Pricing

This Actor uses pay per result. Empty runs do not create result charges, and there are no subscriptions.

### ⭐ Enjoying EPA ECHO Violation Monitor?

<table width="100%" style="display:table;width:100%;border-collapse:collapse"><tr><td style="padding:20px 24px 14px;background:#EEF4FA;border:1px solid #B9CDE1;border-left:5px solid #164E7A;border-radius:10px 10px 0 0"><span style="font-size:20px;letter-spacing:4px;color:#164E7A">⭐ ⭐ ⭐ ⭐ ⭐</span><br><span style="font-size:17px;font-weight:800;color:#102A43">Keep public facility compliance changes ready for your review queue.</span><br><span style="font-size:14px;color:#334E68">A 5-star rating takes 10 seconds and helps EHS and due-diligence teams find it. Your feedback helps us improve monitoring workflows.</span></td></tr><tr><td style="padding:0;background:#164E7A;border:1px solid #B9CDE1;border-top:none;border-radius:0 0 10px 10px;text-align:center"><a href="https://apify.com/getascraper/epa-echo-violation-monitor/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a></td></tr></table>

### ❓ FAQ

**Does it cover every environmental database?** No. It reads the public EPA ECHO service.

**Can I combine facility IDs and states?** No. Use either explicit facility IDs or location filters.

**Does a change prove a new violation?** No. Review the official source record and its update history.

**Can I schedule it?** Yes. Reuse the same scope to maintain a change feed.

### 🔗 Other actors

- [Building Permit Lead Monitor: Chicago, NYC, Austin](https://apify.com/getascraper/construction-permit-lead-monitor) ↗ - Monitor official city permit activity for project signals.
- [England Planning Application Monitor: API Data](https://apify.com/getascraper/england-planning-application-monitor) ↗ - Track official planning-application records and changes.
- [Multi-state contractor license verifier](https://apify.com/getascraper/multistate-contractor-license-verifier) ↗ - Verify contractor claims against published state records.
- [China Recall Scraper: 中国缺陷产品召回](https://apify.com/getascraper/china-samr-product-recall-scraper) ↗ - Collect official product-recall notices for compliance review.

# Actor input Schema

## `facilityIds` (type: `array`):

Optional public Facility Registry Service identifiers. Remove the prefill to search by state or EPA region instead.

## `states` (type: `array`):

Optional two-letter state filters. Remove the EPA Registry ID prefill before using location filters.

## `epaRegions` (type: `array`):

Optional EPA region numbers, 1 through 10. Remove the EPA Registry ID prefill before using location filters.

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

Request the official service’s active-facility filter when available.

## `mode` (type: `string`):

Changes only emits safe NEW, CHANGED, and REMOVED events. Full emits current official source snapshots.

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

A query above this limit is reported as capped and does not advance state.

## Actor input object example

```json
{
  "facilityIds": [
    "110000340916"
  ],
  "states": [],
  "epaRegions": [],
  "activeOnly": true,
  "mode": "changesOnly",
  "maxFacilities": 5
}
```

# Actor output Schema

## `facilityEvents` (type: `string`):

No description

## `runSummary` (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 = {
    "facilityIds": [
        "110000340916"
    ],
    "states": [],
    "epaRegions": [],
    "activeOnly": true,
    "mode": "changesOnly",
    "maxFacilities": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/epa-echo-violation-monitor").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 = {
    "facilityIds": ["110000340916"],
    "states": [],
    "epaRegions": [],
    "activeOnly": True,
    "mode": "changesOnly",
    "maxFacilities": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/epa-echo-violation-monitor").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 '{
  "facilityIds": [
    "110000340916"
  ],
  "states": [],
  "epaRegions": [],
  "activeOnly": true,
  "mode": "changesOnly",
  "maxFacilities": 5
}' |
apify call getascraper/epa-echo-violation-monitor --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/VWv6sgHDShmUN8xvL/builds/5IaVJjCZhmgCCsGpa/openapi.json
