EPA ECHO Facility Compliance & Enforcement Scraper
Pricing
from $1.75 / 1,000 results
EPA ECHO Facility Compliance & Enforcement Scraper
Scrape US EPA ECHO facility data: compliance status (air, water, hazardous waste), violations, inspections, penalties ($), major-polluter flag, %minority, coordinates and program IDs. For ESG, due diligence and compliance research. Not affiliated with the EPA.
Pricing
from $1.75 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
18 hours ago
Last modified
Categories
Features
Share
🌿 EPA ECHO Scraper — Facility Compliance, Violations & Penalties Data
Extract official US environmental enforcement and compliance records from the EPA Enforcement & Compliance History Online (ECHO) system at scale. Search regulated industrial, commercial, and municipal facilities across the United States by company name, state, city, ZIP code, or industry NAICS/SIC codes to retrieve structured data on inspections, formal enforcement actions, civil penalties in USD, environmental justice metrics (% minority), and multi-statute compliance statuses across Air (CAA), Water (CWA), and Hazardous Waste (RCRA).
Whether conducting ESG risk assessments, corporate M&A due diligence, vendor environmental audits, insurance underwriting, or environmental justice research, this scraper enables seamless bulk data extraction into JSON, CSV, and Excel without API rate-limit bottlenecks or browser overhead.
⚡ At a glance
| Feature | Specification |
|---|---|
| Data Source | US EPA Enforcement & Compliance History Online (ECHO) database |
| Search Modes | Keyword / Company Name, State, City, ZIP, NAICS, SIC industry codes |
| Enforcement Filters | Server-side current violations (onlyWithViolations), Major facilities (onlyMajor) |
| Throughput Speed | ~500 facilities per batch (~10–25s per 1,000 records) |
| Pagination Limit | Unlimited (set maxItems: 0 for complete dataset or 1,000+ results) |
| Default Sample Run | Automatic multi-state sample (~100 items) when run without filters |
| Deduplication | 100% deduplicated across EPA FRS Registry IDs |
| Export Formats | Dataset (JSON, CSV, XML, Excel) & Key-Value Store OUTPUT mirror |
| Proxy Requirement | Standard Datacenter Proxy (fully supported, cost-effective) |
| Execution Architecture | Pure protocol-level HTTP pipeline (sub-second query resolution) |
🔎 Why scrape EPA ECHO data?
The EPA ECHO platform serves as the authoritative federal repository documenting compliance histories for over 800,000 regulated industrial, manufacturing, chemical, utility, and municipal sites across the 50 US states and territories.
While the public web portal is designed for single-facility lookups, extracting enterprise-wide or regional records manually is slow and error-prone. This scraper turns manual searches into an automated, bulk data extraction engine capable of delivering thousands of verified, clean rows directly into your analytical workflows.
Strategic Value & Business Intelligence Applications:
- ESG & Sustainability Benchmarking: Quantify corporate environmental track records using hard government metrics (total penalties paid in USD, active non-compliance quarters, repeat violations) rather than self-reported sustainability claims.
- M&A & Private Equity Due Diligence: Uncover hidden environmental liabilities, pending enforcement actions, and historical fines before completing mergers, acquisitions, or commercial real estate transactions.
- Supply Chain & Counterparty Vetting: Verify supplier compliance with Clean Air and Clean Water regulations across US operational footprints to mitigate vendor disruption risks.
- Credit Rating & Insurance Underwriting: Incorporate regulatory infraction frequencies and major facility designations into commercial underwriting models and actuarial loss risk matrices.
- Environmental Justice & Policy Research: Analyze correlations between industrial pollution enforcement and local community demographics via the demographic % minority metric.
- Academic & Legal Discovery: Extract historical violation logs and formal administrative orders for regulatory impact studies and environmental litigation support.
🏛️ Environmental statutes covered
This scraper extracts official compliance statuses and program identification codes across all major federal environmental regulatory statutes:
- Clean Air Act (CAA): Stationary air pollution source permits, Title V major emitters, synthetic minors, and compliance records under the National Emission Standards for Hazardous Air Pollutants (NESHAP).
- Clean Water Act (CWA): National Pollutant Discharge Elimination System (NPDES) surface water discharge permits, municipal stormwater permits, and industrial effluent violations.
- Resource Conservation and Recovery Act (RCRA): Hazardous waste handlers, Treatment, Storage, and Disposal Facilities (TSDFs), large-quantity generators (LQG), and corrective action statuses.
- Safe Drinking Water Act (SDWA): Public water system regulatory records, maximum contaminant level (MCL) violations, and community water supply monitoring.
- Toxics Release Inventory (TRI): Chemical manufacturing, processing, and environmental release reporting identifiers.
- Greenhouse Gas Reporting Program (GHGRP): Mandatory federal direct greenhouse gas emitter identifiers and reporting links.
✨ Key features
- 🏢 Multi-Statute Compliance Auditing: Captures overall
complianceStatusas well as granular statute-specific flags (airComplianceStatus,waterComplianceStatus,hazWasteComplianceStatus,drinkingWaterComplianceStatus). - 💰 Granular Penalty & Enforcement Tracking: Scrapes cumulative civil penalties (
totalPenaltiesUsd), penalty counts, most recent penalty dates, formal enforcement administrative actions, and inspection counts. - 🎯 High-Precision Server-Side Filtering: Toggle
onlyWithViolationsto isolate active violators oronlyMajorto target major industrial facilities where penalty and program data is richest. - ⚡ Deep Pagination Support (1,000+ Records): Automatically pages through multi-thousand result sets in 500-record batches without truncation or artificial caps.
- 🧼 Standardized Field Normalization: Automatically scrubs missing indicators, standardizes boolean flags, parses monetary strings into pure numeric amounts, and formats geographic coordinates.
- 🔗 Direct Inspection Permalinks: Produces verified links to each facility's complete Detailed Facility Report (
detailedReportUrl) for one-click manual audits. - 🛡️ Zero Browser Overhead: Pure lightweight protocol architecture for rapid execution, minimal memory consumption, and reliable scheduled runs.
📥 Input parameters
The actor accepts flexible input parameters. All filters can be combined to refine searches.
| Parameter | Type | Default | Description |
|---|---|---|---|
searchTerms | array | ["exxon mobil"] | List of company or facility names to search (e.g. ["chevron", "dupont"]). |
states | array | ["TX"] | Two-letter US state postal abbreviations (e.g. ["TX", "CA", "LA"]). |
cities | array | [] | Optional list of specific city names to restrict search. |
zipCodes | array | [] | Optional list of 5-digit US ZIP codes. |
naicsCodes | array | [] | North American Industry Classification System codes (e.g. ["324110"] for petroleum refineries). |
sicCodes | array | [] | Standard Industrial Classification codes (e.g. ["2911"]). |
onlyMajor | boolean | false | When true, restricts results exclusively to federally designated major facilities. |
onlyWithViolations | boolean | false | When true, returns only facilities with current active violations or significant non-compliance. |
maxItems | integer | 0 | Maximum total records to scrape (0 = unlimited up to query total; prefilled to 100 for rapid testing). |
proxyConfiguration | object | { "useApifyProxy": true } | Proxy settings. Standard datacenter proxies operate reliably. |
📊 Data fields & output structure
Every output record contains comprehensive facility identification, geographic data, regulatory statuses, violation metrics, and penalty histories.
🏢 Facility Identity & Location
| Field | Type | Coverage | Description |
|---|---|---|---|
registryId | string | 🟢 High (100%) | EPA Facility Registry Service (FRS) unique identifier |
name | string | 🟢 High (100%) | Official facility or operating company name |
street | string | 🟢 High (>98%) | Physical facility street address |
city | string | 🟢 High (100%) | Municipality or city name |
state | string | 🟢 High (100%) | Two-letter US state code |
zip | string | 🟢 High (>98%) | Standard 5-digit postal ZIP code |
county | string | 🟢 High (>98%) | County name |
epaRegion | string | 🟢 High (100%) | Federal EPA administrative region number (1–10) |
latitude | string | 🟢 High (>98%) | Geographic latitude coordinate |
longitude | string | 🟢 High (>98%) | Geographic longitude coordinate |
📋 Classification & Demographics
| Field | Type | Coverage | Description |
|---|---|---|---|
sicCodes | string | 🟡 Conditional | Associated Standard Industrial Classification codes |
naicsCodes | string | 🟡 Conditional | Associated North American Industry Classification codes |
federalAgency | string | 🟡 Conditional | Operating federal department (if federally owned site) |
inIndianCountry | string | 🟢 High (100%) | Boolean indicator (true/false) of tribal territory location |
majorFacility | string | 🟢 High (100%) | Flag designating major emitter or permit threshold status |
percentMinority | string | 🟢 High (>95%) | Surrounding community demographic minority percentage (EJ screening) |
⚖️ Environmental Compliance & Violations
| Field | Type | Coverage | Description |
|---|---|---|---|
complianceStatus | string | 🟢 High (100%) | Overall compliance status evaluation |
airComplianceStatus | string | 🟡 Conditional | Clean Air Act (CAA) compliance standing |
waterComplianceStatus | string | 🟡 Conditional | Clean Water Act (CWA/NPDES) compliance standing |
hazWasteComplianceStatus | string | 🟡 Conditional | Resource Conservation and Recovery Act (RCRA) standing |
drinkingWaterComplianceStatus | string | 🟡 Conditional | Safe Drinking Water Act (SDWA) standing |
significantViolator | string | 🟢 High (100%) | Significant Non-Complier (SNC) indicator (true/false) |
quartersInNonCompliance | string | 🟢 High (100%) | Total quarterly monitoring periods in non-compliance (past 3 years) |
threeYearComplianceHistory | string | 🟢 High (100%) | 12-quarter chronological compliance code sequence |
🔨 Inspections, Enforcement & Penalties
| Field | Type | Coverage | Description |
|---|---|---|---|
inspectionCount | string | 🟢 High (100%) | Total EPA and state environmental inspections recorded |
lastInspectionDate | string | 🟡 Conditional | Date of most recent formal site inspection |
formalActionCount | string | 🟢 High (100%) | Number of formal administrative and judicial enforcement actions |
lastFormalActionDate | string | 🟡 Conditional | Date of latest formal enforcement action |
totalPenaltiesUsd | string | 🟢 High (100%) | Cumulative civil and administrative penalties assessed in USD |
penaltyCount | string | 🟢 High (100%) | Total count of individual penalty actions |
lastPenaltyDate | string | 🟡 Conditional | Date of latest penalty assessment |
lastPenaltyAmountUsd | string | 🟡 Conditional | Dollar amount of most recent penalty assessment |
🆔 Environmental Program Identifiers
| Field | Type | Coverage | Description |
|---|---|---|---|
airIds | string | 🟡 Conditional | Clean Air Act program permit identifiers |
waterIds | string | 🟡 Conditional | National Pollutant Discharge Elimination System (NPDES) IDs |
hazWasteIds | string | 🟡 Conditional | RCRA hazardous waste permit identifiers |
drinkingWaterIds | string | 🟡 Conditional | SDWA public water system identifiers |
toxicsReleaseIds | string | 🟡 Conditional | Toxics Release Inventory (TRI) program IDs |
greenhouseGasIds | string | 🟡 Conditional | Mandatory Greenhouse Gas Reporting Program IDs |
detailedReportUrl | string | 🟢 High (100%) | Direct URL to complete Detailed Facility Report |
scrapedAt | string | 🟢 High (100%) | ISO 8601 scrape timestamp |
💡 Example output record
{"registryId": "110000456123","name": "BAYTOWN OLEFINS PLANT","street": "3525 DECKER DRIVE","city": "BAYTOWN","state": "TX","zip": "77520","county": "HARRIS","epaRegion": "6","latitude": 29.7561,"longitude": -95.0124,"sicCodes": ["2869"],"naicsCodes": ["325110"],"federalAgency": "","inIndianCountry": false,"majorFacility": true,"complianceStatus": "Significant Violation","airComplianceStatus": "Significant Violation","waterComplianceStatus": "No Violation","hazWasteComplianceStatus": "No Violation","drinkingWaterComplianceStatus": "","significantViolator": true,"quartersInNonCompliance": 8,"threeYearComplianceHistory": "VVVVVVVVVVVV","inspectionCount": 24,"lastInspectionDate": "2024-03-12","formalActionCount": 5,"lastFormalActionDate": "2023-11-18","totalPenaltiesUsd": 2250000,"penaltyCount": 3,"lastPenaltyDate": "2023-11-18","lastPenaltyAmountUsd": 750000,"percentMinority": 68.4,"airIds": ["TX000123456"],"waterIds": ["TXR05A123"],"hazWasteIds": ["TXD000147258"],"drinkingWaterIds": [],"toxicsReleaseIds": ["77520XXNMB3525D"],"greenhouseGasIds": ["1002345"],"detailedReportUrl": "https://echo.epa.gov/detailed-facility-report?fid=110000456123","scrapedAt": "2026-11-10T16:35:00.000Z"}
🎯 Practical input recipes
Recipe 1: Nationwide Corporate Footprint Audit
Audit environmental violations for a major enterprise across all operating sites:
{"searchTerms": ["chevron", "dow chemical"],"maxItems": 500,"onlyMajor": false}
Recipe 2: Active Violators in an Industrial State
Extract all current Significant Non-Compliers in the state of Texas:
{"states": ["TX"],"onlyWithViolations": true,"onlyMajor": true,"maxItems": 1000}
Recipe 3: Chemical Manufacturing Sector Benchmark
Scrape chemical manufacturing facilities (NAICS 325) in the Gulf Coast region:
{"states": ["TX", "LA"],"naicsCodes": ["325"],"maxItems": 1500}
Recipe 4: Local Community & Environmental Justice Audit
Audit industrial operations located in specific ZIP codes:
{"zipCodes": ["77012", "77017", "70079"],"maxItems": 250}
Recipe 5: High-Impact Air Polluter Screening
Extract major facilities with Title V Clean Air Act permits in California:
{"states": ["CA"],"onlyMajor": true,"maxItems": 500}
Recipe 6: Comprehensive Corporate Due Diligence
Audit environmental liabilities for a holding group across all manufacturing subsidiaries:
{"searchTerms": ["general electric", "honeywell"],"onlyMajor": false,"maxItems": 1000}
🚀 How to use & integrate
- Configure Parameters: Specify company name keywords, states, or NAICS industry codes.
- Select Filters: Toggle
onlyWithViolationsif you only need non-compliant sites. - Execute Run: Run via Apify Web Console or trigger asynchronously via API:
curl --request POST \--url "https://api.apify.com/v2/acts/haketa~epa-echo-scraper/runs?token=YOUR_API_TOKEN" \--header 'Content-Type: application/json' \--data '{"states": ["TX"], "onlyWithViolations": true, "maxItems": 200}'
- Consume Dataset:
- Python: Load directly into a Pandas DataFrame using
apify-client. - Node.js: Stream records via Apify SDK.
- No-Code: Export to Google Sheets or trigger downstream workflows via Zapier or Make.
- Python: Load directly into a Pandas DataFrame using
📈 Scalability & pagination guide
- 500-Record Sequential Batches: The scraper automatically queries and paginates through the EPA ECHO database in 500-facility batches. Setting
maxItems: 0instructs the engine to pull every available match. - Deduplication Safeguards: Facility records are deduplicated by their unique FRS Registry ID in memory. Overlapping geographic and keyword queries will never create duplicate rows.
- Fast Default Validation: Running the actor with empty input defaults to a sample search (
TX,CA) capped at 100 records for fast, cost-efficient sanity checking.
💡 Optimization & best practices
- Targeted Due Diligence: When researching an acquisition target or corporate entity, query
searchTermswith the primary trade names and corporate parent names. Leave location filters open to discover all subsidiary facilities across the US. - Isolating High-Risk Facilities: For rapid environmental risk screening, enable both
onlyMajor: trueandonlyWithViolations: true. This narrows the dataset to significant industrial facilities currently experiencing non-compliance issues. - Managing High-Volume Statewide Scrapes: When scraping large manufacturing states like Texas, California, or Ohio without search terms, set
maxItemsaccording to your quota needs (e.g.,1000or5000). - Combining Industry & State Filters: Narrow by NAICS code (e.g.,
325for Chemical Manufacturing) combined with specific states to benchmark regional industrial compliance performance. - Handling Empty Values: Some facilities may not have recorded penalties or specific program IDs if they operate under general permits or have never received formal enforcement actions. Filter on
totalPenaltiesUsd > 0in your downstream analysis for penalty-focused investigations.
❓ Frequently asked questions
Is scraping EPA ECHO legal?
Yes. The EPA ECHO database is an open US federal government public record. This scraper extracts public regulatory information.
Do I need an EPA API key or login?
No. No login, account, or private API keys are required. The scraper handles all protocol requirements out of the box.
How many facilities can I scrape in a single run?
You can scrape anywhere from 10 to 10,000+ facilities. Because pagination is handled in 500-facility chunks, scraping 1,000 facilities typically finishes in under 30 seconds.
Why are some compliance and penalty fields blank?
Federal and state agencies only populate penalty and statutory enforcement histories for regulated facilities that have been inspected or cited. Non-industrial or passive facilities will naturally have fewer enforcement entries.
What is the Registry ID?
The Registry ID is the EPA's Facility Registry Service (FRS) master identifier. It provides a permanent key to cross-reference data across federal environmental databases.
What does the % Minority field represent?
The percentMinority field is the demographic percentage of minority residents living within the surrounding census block or radial zone, used in federal environmental justice screenings.
Can I schedule recurring monitoring runs?
Yes. You can use Apify's built-in Scheduler to run weekly or monthly audits of your target companies or regions and automatically push alerts when new violations or penalties appear.
How does deduplication work?
Every facility scraped is checked against an internal set of unique EPA FRS Registry IDs. If multiple search terms or overlapping geographic queries return the same facility, it is emitted only once, ensuring clean datasets with 0% duplication rate.
What is the difference between major and minor facilities?
Major facilities (onlyMajor: true) are industrial plants and utilities that exceed specific statutory emission or discharge thresholds (e.g., emitting more than 100 tons per year of a criteria air pollutant, or major municipal wastewater plants discharging more than 1 million gallons per day). These facilities undergo stricter compliance monitoring and have the richest compliance histories.
Can I query by multiple states or NAICS codes at the same time?
Yes. The actor accepts arrays for states (e.g., ["TX", "CA", "LA"]) and NAICS codes (e.g., ["324110", "325110"]). The query engine handles multi-value requests efficiently.
How are penalties calculated?
The totalPenaltiesUsd field reflects the cumulative total of all civil and administrative penalties assessed against the facility across all tracked environmental statutes, normalized into clean numerical values.
How can I export the data into a spreadsheet or data warehouse?
From the Apify dataset tab, click "Export" and choose JSON, CSV, or Excel format. Alternatively, connect directly to BigQuery, Snowflake, or PostgreSQL via Apify integrations or webhook notifications upon run completion.
🔗 Related intelligence scrapers
- USAspending Federal Awards Scraper — Extract federal contracts, grants, and procurement awards.
- ProPublica Nonprofit Scraper — Scrape IRS Form 990 filings, executive compensations, and grants.
- Google Maps Business Leads Scraper — Extract business listings with enriched email and social profiles.
- Article Content Extractor — Clean text and metadata extraction from environmental news feeds.
📋 Changelog
v1.2 (2026-11)
- Deep Pagination Unlocked: Fully unlocked continuous multi-page pagination for 1,000+ facilities; removed legacy limits and streamlined 500-facility batch requests.
- Fast Prefill Optimization: Adjusted prefill limits to 100 records for sub-15s sample execution.
- Default Fallback Robustness: Added safe fallback defaults (
TX,CA) ensuring runs with empty input payloads execute reliably with ~100 sample records. - URL Sanitization: Standardized deterministic detailed report URL construction from registry IDs.
v1.1 (2026-10)
- Server-Side Violation Filtering: Upgraded
onlyWithViolationsfilter to utilize server-side parameter flags, eliminating false-positive client-side regex matches. - Key-Value Store Mirroring: Added automatic
OUTPUTmirroring in Key-Value Store for synchronous API integrations.
v1.0 (2026-09)
- Initial release featuring multi-statute compliance parsing, FRS ID mapping, environmental justice metrics, and penalty aggregations.