EPA ECHO Facility Compliance & Violations Scraper avatar

EPA ECHO Facility Compliance & Violations Scraper

Pricing

from $6.15 / 1,000 results

Go to Apify Store
EPA ECHO Facility Compliance & Violations Scraper

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

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

4 days ago

Last modified

Share

EPA ECHO Facility Compliance & Violations Scraper

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

Apify Coverage Output Billing

Table of contents

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.

Capabilityscrapers.lat EPA ECHOOther EPA ECHO scrapers on Apify
Violations, penalties, inspections, formal + informal actionsYes, all includedCheapest ones return facility name/address/ID only, no enforcement data
Per-program compliance breakdown (Air, Water/NPDES, RCRA, SDWA)Yes, from the Detailed Facility ReportRarely, or overall status only
Significant non-compliance and high-priority-violator flagsYesUsually missing
Filter by NAICS or SIC industry codeYesMost support state/city only
Filter by EPA program, region, major, federal, tribal landYesPartial, one or two at most
Compliance-signal filters (violations only, enforcement only, min penalty, inspected/enforced since)YesNot offered
Geographic radius search (lat/lng + miles)YesSome support it, most do not
Direct FRS Registry ID lookupYesSome support it
Environmental-justice demographics (percent minority / low income)YesNot offered
TRI releases and greenhouse-gas reporting flagsYesNot offered
Optional AI compliance summary and regulatory risk scoreYesNot offered
No API key, no user-supplied proxy, no browserYesSome require you to bring your own proxy
No charge on failed or empty runsYesVaries

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

FieldTypeRequiredDefaultDescription
stateenumno(any)Two-letter US state or territory code, for example CA, NY, TX, PR. The most reliable primary filter.
countystringno(empty)County name, for example ALAMEDA, HARRIS. Combine with state.
citystringnoAUSTINCity name, for example HOUSTON. Combine with state.
zipCodestringno(empty)5-digit US ZIP code.
facilityNamestringno(empty)Facility name to match, for example CHEVRON, US STEEL. Partial matches supported.
registryIdstringno(empty)Look up one exact facility by its EPA FRS Registry ID, for example 110033527805.
naicsCodestringno(empty)Industry NAICS code, full or prefix, for example 3254 or 324.
sicCodestringno(empty)Industry SIC code, for example 2911.
programenumno(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.
epaRegionenumno(all)Restrict to one EPA Region (01 to 10).
activeOnlybooleannofalseRestrict to facilities currently flagged active in EPA program systems.
majorOnlybooleannofalseRestrict to facilities classified as major under Clean Air or Clean Water programs.
federalFacilitiesOnlybooleannofalseRestrict to federally owned or operated facilities.
tribalLandOnlybooleannofalseRestrict to facilities in Indian country / tribal land.
latitudestringno(empty)Center-point latitude for a radius search. Provide with longitude and radiusMiles.
longitudestringno(empty)Center-point longitude for a radius search.
radiusMilesintegerno(none)Search radius in miles around the lat/lng point.
onlyWithViolationsbooleannofalseKeep only facilities with a current violation in any program.
onlyWithEnforcementbooleannofalseKeep only facilities with at least one formal enforcement action in the last 5 years.
onlySignificantViolatorsbooleannofalseKeep only facilities flagged as significant non-compliers or high-priority violators.
minPenaltyUsdintegerno(none)Keep only facilities whose total assessed penalties are at least this amount.
inspectedSincestringno(empty)Keep only facilities last inspected on or after this date (YYYY-MM-DD).
enforcedSincestringno(empty)Keep only facilities whose most recent formal enforcement action was on or after this date (YYYY-MM-DD).
withDetailsbooleannotrueEnrich each facility with its Detailed Facility Report (per-program compliance and enforcement actions).
maxFacilitiesintegerno10Maximum facilities to collect.
withSummarybooleannofalsePaid AI add-on. Plain-language summary of the facility's compliance profile. Billed only on usable AI output.
withRiskbooleannofalsePaid 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:

FieldTypeDescription
facilityNamestringFacility name.
address / city / county / state / zipstringFacility mailing address parts.
lat / lngnumberFacility geocoordinates.
registryIdstringEPA FRS registry id (unique per facility).
naics / sicstringIndustry codes (space-separated when multiple).
federalFacilitybooleanWhether the facility is federally owned/operated.
federalAgencyNamestringOwning federal agency when applicable.
complianceStatusstringOverall current compliance status.
inspectionsLast5yrintegerInspections in the last 5 years.
violationsCurrentintegerCount of current violations.
significantNonComplianceFlagbooleanWhether the facility is in significant non-compliance.
programsWithSncintegerNumber of programs with significant non-compliance.
formalActionsLast5yrintegerFormal enforcement actions in the last 5 years.
informalActionsLast5yrintegerInformal actions in the last 5 years.
penaltyCountintegerNumber of penalties assessed.
totalPenaltiesUsdnumberTotal assessed penalties in USD.
lastPenaltyAmountUsdnumberMost recent penalty amount.
lastInspectionDate / lastFormalActionDate / lastPenaltyDate / lastInformalActionDatestringMost recent event dates (YYYY-MM-DD).
daysSinceLastInspectionintegerDays since the last inspection.
epaRegionstringEPA Region (01 to 10).
countyFipsstringCounty FIPS code.
majorFacility / activeFacility / tribalLandbooleanClassification flags.
nonattainmentArea / impairedWaterbooleanEnvironmental-area flags.
currentViolationFlag / currentSignificantViolationFlag / caaHighPriorityViolatorbooleanCurrent-status violation flags.
quartersInNoncomplianceintegerQuarters in non-compliance.
threeYearComplianceHistorystringCompact 12-quarter compliance history string.
programIdsobjectProgram-system ids per statute (RCRA, TRI, etc.).
programsobjectBooleans for each program the facility is regulated under.
complianceByProgramobjectCurrent compliance status per program.
permitTypesobjectPermit type per program.
inspectionsByProgram / formalActionsByProgram / penaltiesByProgramUsdobjectPer-program counts and penalty totals.
ghgCo2ReleasesTonsnumberGreenhouse-gas CO2 releases in tons when reported.
triReleasesTransfersLbsnumberTRI releases/transfers in pounds when reported.
percentMinority / percentPeopleOfColor / percentLowIncomenumberEnvironmental-justice demographics of the surrounding area.
dfrUrlstringLink to the facility's Detailed Facility Report on ECHO.
programSummariesobject[]Per-program compliance summary (with details on).
formalActionsobject[]List of formal enforcement actions with penalties and dates (with details on).
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull 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:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "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 result event. See the pricing tab for the current per-result price.
  • Detail and AI events billed separately. Fetching a Detailed Facility Report bills the details event. withSummary and withRisk bill the ai_summary and ai_risk events, 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 error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on 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.

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.