EPA ECHO Facility Compliance & Violations Scraper
Pricing
from $6.15 / 1,000 results
EPA ECHO Facility Compliance & Violations Scraper
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.
Pricing
from $6.15 / 1,000 results
Rating
5.0
(1)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
4 days ago
Last modified
Categories
Share
EPA ECHO Facility Compliance & Violations Scraper
Here is one real result, with every field the actor returns:
{"facilityName": "LOWES OF CENTRAL AUSTIN 1727","address": "8000 SHOAL CREEK","city": "AUSTIN","county": "TRAVIS","state": "TX","zip": "78757","lat": 30.36323,"lng": -97.73992,"registryId": "110002135118","naics": "444110 323110","sic": "2752","federalFacility": false,"complianceStatus": "No Violation Identified","inspectionsLast5yr": 0,"violationsCurrent": 0,"significantNonComplianceFlag": false,"programsWithSnc": 0,"formalActionsLast5yr": 2,"penaltyCount": 1,"totalPenaltiesUsd": 141730,"lastInspectionDate": null,"lastFormalActionDate": "2022-11-17","lastPenaltyDate": "2022-11-17","programIds": {"RCRA": ["TXD066431743"], "TRI": ["78758HRTGR8000S"]},"dfrUrl": "https://echo.epa.gov/detailed-facility-report?fid=110002135118","epaRegion": "06","countyFips": "48453","federalAgencyName": null,"majorFacility": false,"activeFacility": true,"tribalLand": false,"nonattainmentArea": false,"impairedWater": false,"currentViolationFlag": false,"currentSignificantViolationFlag": false,"caaHighPriorityViolator": false,"quartersInNoncompliance": 0,"threeYearComplianceHistory": "____________","complianceByProgram": {"RCRA": "No Violation Identified"},"permitTypes": {"RCRA": "SQG"},"programs": {"air": false, "water": false, "drinkingWater": false, "hazardousWaste": true, "toxicRelease": false, "greenhouseGas": false},"inspectionsByProgram": null,"formalActionsByProgram": {"RCRA": 1},"penaltiesByProgramUsd": {"RCRA": 0},"informalActionsLast5yr": 0,"lastInformalActionDate": null,"lastPenaltyAmountUsd": 0,"daysSinceLastInspection": null,"ghgCo2ReleasesTons": null,"triReleasesTransfersLbs": null,"percentMinority": 47.838,"percentPeopleOfColor": 47.94,"percentLowIncome": 22.67,"observedAt": "2026-08-10T14:17:04.208Z","error": null,"programSummaries": [{"statute": "RCRA", "currentStatus": "No Violation Identified", "inspections": null, "lastInspection": null, "qtrsInNonCompliance": 0, "qtrsInSignificantNonCompliance": 0, "informalActions": null, "formalActions": 1, "totalPenaltiesUsd": 0}],"formalActions": []}
The most complete EPA ECHO scraper on Apify. This EPA compliance data and environmental violations API returns every field the ECHO facility search and Detailed Facility Report expose, from location, NAICS/SIC, and compliance status to per-program violation and enforcement history, penalties, inspections, release quantities, and demographic context, plus two optional AI add-ons. It gives you 24 filters to target exactly the facilities you need, more input filters and more valid output fields than any other EPA ECHO, environmental compliance, or facility enforcement scraper listed. Pull facility enforcement history, significant non-compliance flags, and regulatory penalties for EPA due diligence, KYB supplier risk, ESG screening, and compliance monitoring.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- How we compare
- Use cases
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor queries EPA's Enforcement and Compliance History Online (ECHO), applies the filters you pass, and writes one normalized record per regulated facility to the run's dataset. Each record carries the facility name and address, geocoordinates, NAICS/SIC industry codes, EPA registry id, overall compliance status, current violations, significant non-compliance flags, formal enforcement actions and penalties over the last five years, inspection history, and environmental-justice demographic context.
With details enabled (the default), each facility is enriched from its Detailed Facility Report (DFR): a per-program compliance breakdown (Clean Air, Clean Water/NPDES, RCRA hazardous waste, Safe Drinking Water) and the list of formal enforcement actions with penalty amounts and dates. Two optional paid AI add-ons produce a plain-language compliance summary and a regulatory risk rating.
How we compare
Several EPA ECHO scrapers exist on Apify. Most are facility locators with a handful of fields and a narrow filter set. This actor returns the fullest compliance and enforcement record and gives you the widest set of filters, so you can pull exactly the non-compliant, high-penalty, or industry-specific facilities you need in one run.
| Capability | scrapers.lat EPA ECHO | Other EPA ECHO scrapers on Apify |
|---|---|---|
| Violations, penalties, inspections, formal + informal actions | Yes, all included | Cheapest ones return facility name/address/ID only, no enforcement data |
| Per-program compliance breakdown (Air, Water/NPDES, RCRA, SDWA) | Yes, from the Detailed Facility Report | Rarely, or overall status only |
| Significant non-compliance and high-priority-violator flags | Yes | Usually missing |
| Filter by NAICS or SIC industry code | Yes | Most support state/city only |
| Filter by EPA program, region, major, federal, tribal land | Yes | Partial, one or two at most |
| Compliance-signal filters (violations only, enforcement only, min penalty, inspected/enforced since) | Yes | Not offered |
| Geographic radius search (lat/lng + miles) | Yes | Some support it, most do not |
| Direct FRS Registry ID lookup | Yes | Some support it |
| Environmental-justice demographics (percent minority / low income) | Yes | Not offered |
| TRI releases and greenhouse-gas reporting flags | Yes | Not offered |
| Optional AI compliance summary and regulatory risk score | Yes | Not offered |
| No API key, no user-supplied proxy, no browser | Yes | Some require you to bring your own proxy |
| No charge on failed or empty runs | Yes | Varies |
Filter breadth and output completeness are the real difference. No other listed EPA ECHO scraper combines NAICS, program, compliance status, geographic radius, and enforcement date range while also returning the full penalty, inspection, and per-program enforcement record.
Use cases
- Environmental due diligence and M&A. Screen a target company's facilities for open violations, significant non-compliance, penalty history, and pending enforcement before a deal closes.
- KYB and supplier / vendor risk. Add EPA compliance status and regulatory penalty history to know-your-business checks on US suppliers, counterparties, and portfolio companies.
- ESG and sustainability screening. Pull Clean Air, Clean Water, and hazardous-waste compliance signals, TRI releases, and greenhouse-gas reporting flags to score environmental risk across a portfolio.
- Compliance monitoring. Track a watchlist of facilities by FRS Registry ID or region and re-run to catch new inspections, formal actions, and penalties.
- Legal and enforcement research. Build case lists of significant violators or high-penalty facilities by state, industry, or program for regulatory, litigation, or expert-witness work.
- Journalism and public-interest research. Map environmental violations and enforcement in a city, county, or ZIP code, cross-referenced with environmental-justice demographics.
- Real-estate environmental risk. Run a radius search around a parcel to find nearby regulated facilities, hazardous-waste sites, and impaired-water or nonattainment-area flags.
Quickstart
Open the actor, paste this into the input, and press Run. It returns up to 10 facilities in Austin, TX with their compliance detail.
{"state": "TX","city": "AUSTIN","withDetails": true,"maxFacilities": 10}
Every input is optional. State is the most reliable primary filter. Add onlyWithViolations, minPenaltyUsd, or naicsCode to focus on non-compliant or industry-specific facilities.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
state | enum | no | (any) | Two-letter US state or territory code, for example CA, NY, TX, PR. The most reliable primary filter. |
county | string | no | (empty) | County name, for example ALAMEDA, HARRIS. Combine with state. |
city | string | no | AUSTIN | City name, for example HOUSTON. Combine with state. |
zipCode | string | no | (empty) | 5-digit US ZIP code. |
facilityName | string | no | (empty) | Facility name to match, for example CHEVRON, US STEEL. Partial matches supported. |
registryId | string | no | (empty) | Look up one exact facility by its EPA FRS Registry ID, for example 110033527805. |
naicsCode | string | no | (empty) | Industry NAICS code, full or prefix, for example 3254 or 324. |
sicCode | string | no | (empty) | Industry SIC code, for example 2911. |
program | enum | no | (all) | Restrict to one EPA program: A Clean Air, W Clean Water (NPDES), R RCRA hazardous waste, S Safe Drinking Water, T Toxics Release Inventory, G Greenhouse Gas, E EPCRA. |
epaRegion | enum | no | (all) | Restrict to one EPA Region (01 to 10). |
activeOnly | boolean | no | false | Restrict to facilities currently flagged active in EPA program systems. |
majorOnly | boolean | no | false | Restrict to facilities classified as major under Clean Air or Clean Water programs. |
federalFacilitiesOnly | boolean | no | false | Restrict to federally owned or operated facilities. |
tribalLandOnly | boolean | no | false | Restrict to facilities in Indian country / tribal land. |
latitude | string | no | (empty) | Center-point latitude for a radius search. Provide with longitude and radiusMiles. |
longitude | string | no | (empty) | Center-point longitude for a radius search. |
radiusMiles | integer | no | (none) | Search radius in miles around the lat/lng point. |
onlyWithViolations | boolean | no | false | Keep only facilities with a current violation in any program. |
onlyWithEnforcement | boolean | no | false | Keep only facilities with at least one formal enforcement action in the last 5 years. |
onlySignificantViolators | boolean | no | false | Keep only facilities flagged as significant non-compliers or high-priority violators. |
minPenaltyUsd | integer | no | (none) | Keep only facilities whose total assessed penalties are at least this amount. |
inspectedSince | string | no | (empty) | Keep only facilities last inspected on or after this date (YYYY-MM-DD). |
enforcedSince | string | no | (empty) | Keep only facilities whose most recent formal enforcement action was on or after this date (YYYY-MM-DD). |
withDetails | boolean | no | true | Enrich each facility with its Detailed Facility Report (per-program compliance and enforcement actions). |
maxFacilities | integer | no | 10 | Maximum facilities to collect. |
withSummary | boolean | no | false | Paid AI add-on. Plain-language summary of the facility's compliance profile. Billed only on usable AI output. |
withRisk | boolean | no | false | Paid AI add-on. Regulatory risk rating (low/medium/high/severe) with a 0 to 100 score. Billed only on usable AI output. |
Filters combine with logical AND.
Output reference
One dataset item per facility. Types: string, number, integer, boolean, object, object[], or null when the source value is absent. Key fields:
| Field | Type | Description |
|---|---|---|
facilityName | string | Facility name. |
address / city / county / state / zip | string | Facility mailing address parts. |
lat / lng | number | Facility geocoordinates. |
registryId | string | EPA FRS registry id (unique per facility). |
naics / sic | string | Industry codes (space-separated when multiple). |
federalFacility | boolean | Whether the facility is federally owned/operated. |
federalAgencyName | string | Owning federal agency when applicable. |
complianceStatus | string | Overall current compliance status. |
inspectionsLast5yr | integer | Inspections in the last 5 years. |
violationsCurrent | integer | Count of current violations. |
significantNonComplianceFlag | boolean | Whether the facility is in significant non-compliance. |
programsWithSnc | integer | Number of programs with significant non-compliance. |
formalActionsLast5yr | integer | Formal enforcement actions in the last 5 years. |
informalActionsLast5yr | integer | Informal actions in the last 5 years. |
penaltyCount | integer | Number of penalties assessed. |
totalPenaltiesUsd | number | Total assessed penalties in USD. |
lastPenaltyAmountUsd | number | Most recent penalty amount. |
lastInspectionDate / lastFormalActionDate / lastPenaltyDate / lastInformalActionDate | string | Most recent event dates (YYYY-MM-DD). |
daysSinceLastInspection | integer | Days since the last inspection. |
epaRegion | string | EPA Region (01 to 10). |
countyFips | string | County FIPS code. |
majorFacility / activeFacility / tribalLand | boolean | Classification flags. |
nonattainmentArea / impairedWater | boolean | Environmental-area flags. |
currentViolationFlag / currentSignificantViolationFlag / caaHighPriorityViolator | boolean | Current-status violation flags. |
quartersInNoncompliance | integer | Quarters in non-compliance. |
threeYearComplianceHistory | string | Compact 12-quarter compliance history string. |
programIds | object | Program-system ids per statute (RCRA, TRI, etc.). |
programs | object | Booleans for each program the facility is regulated under. |
complianceByProgram | object | Current compliance status per program. |
permitTypes | object | Permit type per program. |
inspectionsByProgram / formalActionsByProgram / penaltiesByProgramUsd | object | Per-program counts and penalty totals. |
ghgCo2ReleasesTons | number | Greenhouse-gas CO2 releases in tons when reported. |
triReleasesTransfersLbs | number | TRI releases/transfers in pounds when reported. |
percentMinority / percentPeopleOfColor / percentLowIncome | number | Environmental-justice demographics of the surrounding area. |
dfrUrl | string | Link to the facility's Detailed Facility Report on ECHO. |
programSummaries | object[] | Per-program compliance summary (with details on). |
formalActions | object[] | List of formal enforcement actions with penalties and dates (with details on). |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed run, a single item with a populated error field is written instead. |
Detail fields (programSummaries, formalActions, and the per-program breakdowns) are populated only when withDetails is enabled. AI fields are added only when the matching add-on is on.
Example output record
Real record from a live run (input {"state":"TX","city":"AUSTIN"}), a facility with a large assessed penalty:
{"facilityName": "ABF FREIGHT SYSTEM","address": "8200 BAGBY DR","city": "AUSTIN","county": "TRAVIS","state": "TX","zip": "78724","lat": 30.29007,"lng": -97.63394,"registryId": "110033527805","naics": null,"sic": "4213","inspectionsLast5yr": 0,"violationsCurrent": 0,"significantNonComplianceFlag": false,"formalActionsLast5yr": 1,"penaltyCount": 1,"totalPenaltiesUsd": 535000,"lastFormalActionDate": "2023-09-14","lastPenaltyDate": "2023-09-14","epaRegion": "06","majorFacility": false,"activeFacility": true,"currentViolationFlag": false,"dfrUrl": "https://echo.epa.gov/detailed-facility-report?fid=110033527805","observedAt": "2026-08-10T14:17:02.335Z","error": null}
Run via API and CLI
Start a run and read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~epa-echo-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"state":"CA","onlyWithViolations":true,"minPenaltyUsd":100000,"maxFacilities":50}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~epa-echo-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"state":"TX","naicsCode":"324","onlySignificantViolators":true,"maxFacilities":100}'
Apify CLI:
apify call scrapers_lat/epa-echo-scraper \--input '{"latitude":"29.7604","longitude":"-95.3698","radiusMiles":5}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. Each facility record bills on the
resultevent. See the pricing tab for the current per-result price. - Detail and AI events billed separately. Fetching a Detailed Facility Report bills the
detailsevent.withSummaryandwithRiskbill theai_summaryandai_riskevents, and only when the AI returns usable output. The AI add-ons are off by default and require a paid Apify plan. - No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 records per run. Upgrade for higher
maxFacilities. - Source ceiling. A single ECHO query returns at most a few hundred facilities. For larger pulls, split the work by state, county, or NAICS.
FAQ and troubleshooting
What is EPA ECHO? ECHO (Enforcement and Compliance History Online) is the US EPA's public system that tracks the environmental-compliance and enforcement history of regulated facilities. This actor turns ECHO's facility search and Detailed Facility Report into clean JSON, CSV, or Excel records, so you can query EPA compliance data at scale without the ECHO web interface.
How do I find only facilities with violations or penalties?
Set onlyWithViolations, onlyWithEnforcement, or onlySignificantViolators to true, and optionally minPenaltyUsd to a threshold. Add enforcedSince or inspectedSince to restrict to recent activity.
How do I look up one specific facility?
Pass its EPA FRS Registry ID as registryId. The actor returns that single facility with its full compliance and enforcement detail.
How do I search around a point?
Provide latitude, longitude, and radiusMiles together for a radius search, useful for real-estate or site environmental risk.
Do I need an EPA API key, a proxy, or a browser? No. This actor needs no API key, no user-supplied proxy, and no headless browser. It handles data access internally and returns structured records directly.
How fast is it?
Facility search returns in about a second. With withDetails on, each facility also loads its Detailed Facility Report; detail fetches run in parallel, so a typical run of a few dozen facilities completes in seconds to a couple of minutes depending on maxFacilities.
Can I use this for KYB, ESG, or environmental due diligence? Yes. The record includes compliance status, significant non-compliance flags, penalty totals, inspection and enforcement history, and per-program breakdowns, which are the signals used in supplier risk, ESG screening, and pre-deal environmental due diligence.
What does the per-program breakdown include?
With withDetails on, programSummaries, complianceByProgram, inspectionsByProgram, formalActionsByProgram, and penaltiesByProgramUsd cover Clean Air, Clean Water, RCRA, and Safe Drinking Water where the facility is regulated.
What are the percent-minority and percent-low-income fields? They are EPA environmental-justice demographics for the area around the facility, not the facility itself. They come from EPA's screening data.
Why are some fields null?
Not every program applies to every facility, and EPA does not report every metric for every site. Missing source values are returned as null, never invented.
A run returned 0 records. Why?
The filter combination matched nothing. Loosen filters (start with just state). Zero-result runs are not charged.
Is this an official EPA tool? No. This actor is independent and is not affiliated with the US EPA. It reads only data published through the public ECHO system. Use it in accordance with EPA terms and applicable law.
Related scrapers
- openFDA Food Recall & Enforcement Scraper: US FDA food recalls and enforcement.
- USAspending Federal Award Scraper: US federal prime awards.
- BLM National Mining Claims (MLRS) Scraper: US BLM mining claims with PLSS legal descriptions.
- SEC EDGAR Company Filings Scraper: SEC filings by ticker or CIK.
- Federal Register Document Scraper: US Federal Register documents.
- Grants.gov Opportunity Scraper: US federal grant opportunities.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with the US EPA. Accesses only data publicly available through the EPA ECHO system. Use in accordance with EPA terms of use.
