EPA ECHO Facility Violations and Enforcement API
Pricing
from $2.30 / 1,000 facility rows
EPA ECHO Facility Violations and Enforcement API
Find facilities in violation of the Clean Air Act, Clean Water Act or RCRA from the free EPA ECHO web services: address, NAICS, quarters in noncompliance, inspections, enforcement, penalties and a compliance-risk score. No login.
Pricing
from $2.30 / 1,000 facility rows
Rating
0.0
(0)
Developer
Detroit Web Agent - Open Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
EPA ECHO Facility Violations and Enforcement
EPA ECHO facility violations for the states you choose: Clean Air Act, Clean Water Act and hazardous waste (RCRA) facilities with a current violation, with compliance status, quarters in noncompliance, inspections, formal enforcement actions, penalties and a 0-100 compliance-risk score.
Pull regulated facilities that are out of compliance with the Clean Air Act, the Clean Water Act or the hazardous waste law (RCRA) into one clean table. Each row has the facility name and address, state, industry (NAICS), program, current compliance status, quarters in noncompliance, last inspection date, formal enforcement actions, penalties in dollars, the EPA registry ID, a link to the EPA ECHO report and a simple compliance-risk score. Data comes from the free public EPA ECHO web services. No login, no proxy, no personal data: these are facility-level records only.
What is EPA ECHO Facility Violations and Enforcement?
Find facilities in violation of the Clean Air Act, Clean Water Act or RCRA from the free EPA ECHO web services: address, NAICS, quarters in noncompliance, inspections, enforcement, penalties and a compliance-risk score. No login. Run it from the Apify Console, the API or a schedule, and export the results as JSON, CSV, Excel or HTML.
Why use it
- Official source. Data is EPA ECHO, the public compliance database run by the agency.
- Three programs, one table. Air, water and hazardous waste in the same shape, with ISO dates.
- Repeatable. Fixed filters and a fixed score, so runs can be compared month to month.
Output
One row per facility and program:
| Field | Meaning |
|---|---|
facilityName, address, city, state, zip, county | The facility and where it is. |
program, programDetail | CAA, CWA or RCRA, plus program details such as permit type or generator size. |
naicsCode, naicsDescription | Industry code and name when EPA has one. |
complianceStatus, inViolation, significantViolation | Current EPA status and two simple flags. Significant means high priority (air) or significant noncompliance (water, waste). |
quartersInNoncompliance | Quarters in noncompliance out of the last 12. |
lastInspectionDate, inspectionCount | Last inspection (air uses the last compliance evaluation) and how many. |
formalEnforcementActions, lastFormalEnforcementDate | Formal actions on record. The water service gives only the last date, so the count is empty for CWA rows. |
penaltiesUsd, lastPenaltyDate | Penalties recorded in dollars and the latest date. |
complianceRiskScore, riskLevel | 0 to 100 score and high, medium, low or none. |
registryId, sourceId, echoUrl | EPA registry ID, the program permit or site ID and the EPA ECHO facility report link. |
scrapedAt | When the run read the data. |
Sample output
{"facilityName": "ARBOR HILLS LANDFILL, INC.","program": "CAA","city": "NORTHVILLE","state": "MI","naicsCode": "221118 562212","complianceStatus": "High Priority Violation","quartersInNoncompliance": 12,"lastInspectionDate": "2026-09-01","formalEnforcementActions": 3,"penaltiesUsd": 730109,"complianceRiskScore": 100,"riskLevel": "high","registryId": "110015815402","echoUrl": "https://echo.epa.gov/detailed-facility-report?fid=110015815402"}
Input
| Field | What it does |
|---|---|
states | Two-letter state codes, for example MI, OH. Default MI. |
programs | CAA (air), CWA (water permits), RCRA (hazardous waste). Default: all three. |
onlyInViolation | Keep facilities with a current violation or quarters in noncompliance. Default on. |
minRiskScore | Optional 0 to 100 threshold. |
majorOnly | Air and water only: keep major sources and major permits. |
nameContains | Optional text that must appear in the facility name. |
maxItems | Stop after this many rows, highest risk first. Default 100. |
Sample input:
{"states": ["MI", "OH"],"programs": ["CAA", "CWA"],"onlyInViolation": true,"minRiskScore": 50,"maxItems": 200}
Pricing
Pay per event. You pay a small fixed amount per facility row delivered, listed on the Pricing tab, plus a tiny start fee per run. You can set a maximum cost per run in the run options.
What does this Actor do?
It calls the EPA ECHO air, water and hazardous waste facility services for the states you choose, reads every active facility in each program, keeps the ones with a current violation (or all of them if you prefer), scores each one and sorts the highest risk first. The actor reports what EPA publishes. It does not decide whether a facility broke the law, and a violation flag is not a finding of guilt.
Run in 30 seconds
- Open the Actor and press Try for free (a free Apify account is enough).
- Keep the prefilled input (Michigan, all three programs, only facilities in violation) and press Start. A run takes a few minutes because EPA returns whole states at once.
- Open the Output tab. Use the table view or download CSV, Excel or JSON.
Use cases
- Screen suppliers, vendors or acquisition targets for environmental compliance problems before signing.
- Build a regional list of high-risk industrial sites for environmental consultants, insurers or lenders.
- Monitor your state or county each month and flag facilities whose quarters in noncompliance or penalties increased.
- Give journalists and community groups a ranked list of the facilities with the longest violation streaks.
- Feed rows into an n8n, Make or Zapier workflow that opens a due-diligence task when a matching facility scores high.
Compliance-risk score
A fixed rule of thumb, not an EPA rating: 30 points for a current violation, or 55 if it is significant or high priority, plus up to 25 for quarters in noncompliance (12 of 12 gives 25), plus 5 per formal enforcement action (up to 10), plus up to 10 for penalties on a log scale. Capped at 100. The same record always gives the same score.
Limits
- Active facilities only. Closed or inactive permits are skipped.
- Violation data is as reported by EPA and the states, and may be incomplete or later corrected. Do not treat it as legal advice.
- Large states return thousands of facilities per program, so runs take a few minutes.
- Other programs (drinking water, toxics release) are not included.
Related Actors
- Developer Signals tracks public developer activity signals for companies.
- Website Tech Stack detects which technologies a website runs on.
- Sitemap Link Inventory lists every URL a site publishes in its sitemaps.
Found a bug or need a field? Open an issue on the Issues tab with the run URL.
FAQ
How fresh is the data? EPA refreshes ECHO regularly, but state reports can lag by weeks or months. Always check the linked ECHO report for the latest.
Why do I get fewer rows than maxItems? Only facilities that match your states, programs and filters exist. Try more states, all three programs, or turn off "only in violation".
Is this an official EPA product? No. It is an independent tool that reads the public EPA ECHO web services. Check echo.epa.gov for authoritative records.
This Actor vs fortuitous_pirate/epa-echo-facilities: that one is the most-used EPA ECHO actor and also extracts permits, violations, inspections and enforcement actions. Choose this one to pull whole states across all three programs at once, keep only facilities in violation, and get every row scored and sorted highest risk first.
More from DWA Open Data
Browse all 69 data Actors, with live prices and sample output, at open-data-actors.pages.dev.
Feedback: if this Actor was useful, or if it fell short, an honest review on the Reviews tab helps other users decide. Problems or feature requests: please open an Issue and we usually reply within one business day.
Changelog
- 2026-10-22: Initial release.
- 2026-10-25: Documentation updated: README refreshed.
- 2026-10-25: Pricing update announced, effective 2026-10-25: Price cut to stay the lowest on the Store.
- 2026-10-25: Listing refresh: new Store icon, README reorganised (overview, data fields, pricing, FAQ) and changelog tab added. No code change.