EPA ECHO Scraper - Facilities, Violations & Compliance Leads avatar

EPA ECHO Scraper - Facilities, Violations & Compliance Leads

Pricing

from $5.00 / 1,000 facility / compliance records

Go to Apify Store
EPA ECHO Scraper - Facilities, Violations & Compliance Leads

EPA ECHO Scraper - Facilities, Violations & Compliance Leads

Scrape the official EPA ECHO database: regulated facilities with name, address, NAICS/SIC, Clean Air/Water/RCRA/SDWA compliance status, violations, inspections, enforcement, penalties & toxic releases. Filter by state, industry & noncompliance. B2B compliance leads + monitoring.

Pricing

from $5.00 / 1,000 facility / compliance records

Rating

0.0

(0)

Developer

Scrape Sage

Scrape Sage

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

EPA ECHO Scraper — Facilities, Violations & Environmental Compliance Leads

Extract regulated facilities and their full environmental-compliance history straight from EPA ECHO (Enforcement and Compliance History Online) — the U.S. Environmental Protection Agency's official enforcement database. Every facility comes back as a ready-to-use B2B lead: name, full address, industry (NAICS/SIC), the programs it's regulated under (Clean Air Act, Clean Water Act, RCRA hazardous waste, Safe Drinking Water Act, Toxic Release Inventory, greenhouse gas, Superfund), its compliance status, violations, inspections, formal enforcement actions, penalties and toxic-release totals, plus a derived lead score.

No login, no cookies, no browser, no API key — fast, reliable extraction from EPA's public ECHO web services.

Why this EPA ECHO scraper?

Generic "paste-a-URL" crawlers grab a few visible fields and miss the data that actually matters. This actor queries EPA's facility-search and Detailed Facility Report services directly and ships the richest dataset in the category — firmographics and every compliance, enforcement, penalty and toxic-release signal, in one clean table.

DataThin EPA scrapersThis actor
Facility name, full address, county, EPA region, geopartial
Industry NAICS + SIC (codes + description)
Programs (CAA / NPDES / RCRA / SDWA / TRI / GHG / Superfund / TSCA / RMP)one program only✅ all in one
Overall + per-program compliance status
Significant-noncompliance (SNC) flag + quarters in noncompliance
Inspections (count + dates), informal & formal enforcementpartial
Penalties (count, total $, last amount, per program)
Toxic Release Inventory (lbs released/transferred + multi-year chemical history)
Greenhouse-gas CO₂ totals, impaired-waters flag, demographics
Detailed Facility Report (per-statute summaries, every formal action, all permits)
Derived lead score + lead signals
Only-new / changed monitoring mode

Use cases

  • Environmental-services lead generation — facilities in significant noncompliance, with open violations or recent penalties are in-market buyers for environmental consulting, remediation, compliance/EHS software, air & water permitting, and legal services. Export them with industry, address and lead score and feed your CRM.
  • Regulatory & legal intelligence — track formal enforcement actions, penalties and SNC status across an industry or state for environmental and product-liability law firms.
  • ESG, due diligence & risk — screen a portfolio, supply chain or acquisition target for environmental violations, penalties and toxic-release history.
  • Insurance & underwriting — assess environmental risk by facility, program and enforcement history.
  • Market & competitive research — map every regulated facility in a sector (refineries, power plants, chemical manufacturers, waste handlers) with size (major-facility flag) and compliance posture.
  • Community & journalism — surface the biggest polluters and repeat offenders in a county or watershed.

How to use

  1. Sign up for Apify — the free plan is enough to try this actor.
  2. Open the EPA ECHO Scraper, set a state (and optionally an industry, program or compliance filter), and choose your limit.
  3. Click Start and watch facility records stream into the dataset table.
  4. Export as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the Apify API.

Input

{
"states": ["TX"],
"naicsCodes": ["325"],
"significantNoncomplianceOnly": true,
"includeDetailedReport": true,
"sortBy": "leadScore",
"maxResults": 500
}
  • registryIds — look up specific facilities by EPA FRS Registry ID. Leave empty to search with filters.
  • states / epaRegions / counties / cities / zipCodes — location filters (all optional, combine with AND).
  • facilityNameQuery / streetQuery — text-contains filters on the facility name or street.
  • naicsCodes / sicCodes — industry filters (full code or prefix, e.g. 325 chemicals, 3241 petroleum, 2211 power, 562 waste).
  • programs — keep only facilities under CAA, NPDES, RCRA, SDWA, TRI, GHG, SEMS (Superfund), TSCA or RMP.
  • activeOnly (default true), majorFacilitiesOnly, federalFacilitiesOnly — facility filters.
  • complianceStatus / significantNoncomplianceOnly / currentViolationsOnly — compliance-intent filters.
  • hasPenaltiesOnly / minPenaltyAmount / hasFormalEnforcementOnly / minQuartersInNoncompliance — enforcement filters.
  • inspectionRecencywithin5yr, notWithin5yr (overdue sites) or neverInspected.
  • includeDetailedReport (default false) — enrich each facility with its full Detailed Facility Report (per-statute summaries, every formal action, all permits, TRI chemical history). Billed as detailedReport.
  • maxResults / sortBy / deduplicateResults — output controls. Sort by leadScore (default), penaltiesHigh, recentEnforcement, recentInspection, or source.
  • monitorMode / monitorKey — only return facilities that are new or whose compliance changed since the last run.
  • proxyConfiguration — optional; the ECHO API needs no proxy, so leave it off for the fastest queries.

Output

By default you get one clean, dense table of facilities — every column applies to every row. A facility record:

{
"registryId": "110000468093",
"facilityName": "HF SINCLAIR PARCO REFINING CO LLC",
"fullAddress": "100 E LINCOLN AVE, SINCLAIR, WY, 82334",
"city": "SINCLAIR",
"state": "WY",
"zip": "82334",
"county": "CARBON",
"epaRegion": "08",
"latitude": 41.78,
"longitude": -107.11,
"naicsPrimary": "324110",
"naicsDescription": "Petroleum Refineries",
"sicPrimary": "2911",
"programs": ["Clean Air Act", "RCRA Hazardous Waste", "Toxic Release Inventory", "Greenhouse Gas Reporting", "Risk Management Plan"],
"isMajor": true,
"complianceStatus": "Significant Violation",
"inSignificantNoncompliance": true,
"quartersInNoncompliance": 12,
"inspectionCount": 14,
"lastInspectionDate": "2026-05-06",
"formalActionCount": 4,
"lastFormalActionDate": "2025-11-21",
"penaltyCount": 2,
"totalPenalties": 431500,
"triReleasesTransfers": 425309,
"echoScore": 100,
"dfrUrl": "https://echo.epa.gov/detailed-facility-report?fid=110000468093",
"leadScore": 100,
"leadSignals": ["Significant noncompliance (SNC)", "4 formal enforcement actions", "12 of last 12 quarters in noncompliance", "2 penalties ($431,500)", "Major facility", "425,309 lbs toxic releases/transfers"],
"detailedReport": {
"enforcementSummaries": [{ "statute": "RCRA", "inspections": 7, "currentStatus": "Significant Noncomplier", "quartersInNoncompliance": 12, "totalPenalties": 0 }],
"formalActions": [{ "statute": "CAA", "actionType": "Administrative Order", "leadAgency": "State", "actionDate": "2022-10-04", "penaltyAmount": 110000 }],
"permits": [{ "program": "FRS", "sourceId": "110000468093", "epaRegion": "08" }],
"triChemicals": [{ "chemical": "Ammonia", "poundsByYear": { "2022": 25110, "2023": 28240, "2024": 23110 } }]
},
"scrapedAt": "2026-06-20T12:00:00.000Z"
}

The detailedReport block is present only when includeDetailedReport is on. Switch the dataset view to Facilities, Compliance leads, or Violations & penalties for a focused table.

What to expect (field coverage)

EPA ECHO aggregates many program systems, so some fields are populated only when a facility participates in that program or has that history.

Field groupCoverage
Facility name, address, state, Registry ID, geo, programs✅ ~100%
NAICS / SIC, compliance status, inspection & enforcement counts✅ high (present whenever EPA has the data)
Penalties, formal actions, SNC flagpresent for facilities with enforcement history
TRI releases & chemical historypresent for TRI reporters
Greenhouse-gas CO₂present for GHG reporters

A blank field means EPA doesn't publish that signal for that facility — not that scraping failed. Nothing is dropped, so you always get the richest record available.

Automate & schedule

Run this actor on autopilot and pull results into your own stack:

  • Apify API — start runs, fetch datasets, and manage schedules over REST.
  • apify-client for JavaScript and apify-client for Python — official SDKs.
  • Schedules — run it daily/weekly with monitoring mode to capture newly-cited facilities and fresh enforcement actions as leads.
  • Webhooks — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });
const run = await client.actor('scrapesage/epa-echo-scraper').call({
states: ['TX'],
naicsCodes: ['325'],
significantNoncomplianceOnly: true,
sortBy: 'leadScore',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} facilities`);

Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

  • Make — multi-step automation scenarios.
  • Zapier — push new facility leads straight into your CRM.
  • Slack — get notified when a monitored state or industry gets a new violation or penalty.
  • Google Drive / Sheets — auto-export every run to a spreadsheet.
  • Airbyte — pipe results into your data warehouse.
  • GitHub — trigger runs from commits or releases.

Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the Apify MCP server — ask your assistant to "find every chemical plant in Texas in significant noncompliance, with penalties and a lead score" and let it run the scraper for you.

More scrapers from scrapesage

Build a complete government-data, compliance & B2B lead-gen stack:

Tips

  • Start with a state + industry (e.g. TX + NAICS 325) for a fast, focused list, then layer on compliance filters.
  • Highest-intent leads: set significantNoncomplianceOnly or hasPenaltiesOnly and sort by leadScore — these facilities have an active reason to buy compliance, remediation or legal services.
  • Overdue sites: set inspectionRecency: "notWithin5yr" to find facilities that haven't been inspected recently.
  • Detailed reports: turn on includeDetailedReport to pull per-statute summaries, every formal action and the multi-year toxic-release history (one extra request per facility).
  • Recurring monitoring: combine Schedules with monitorMode to capture only facilities added or changed since the last run.

FAQ

Where does the data come from? From EPA's official ECHO (Enforcement and Compliance History Online) public web services — the same data behind echo.epa.gov, covering facilities regulated under the Clean Air Act, Clean Water Act, RCRA, Safe Drinking Water Act, TRI and more.

Does it need an API key or login? No. ECHO's public services are queried directly — no key, no login, no browser.

How fresh is it? EPA refreshes ECHO regularly (most program data weekly). Run on a Schedule with monitoring mode to capture new violations and enforcement as they post.

Can I export to Google Sheets, CSV, or Excel? Yes — one click in the dataset view, or automatically on every run via the Google Drive integration.

What's the Detailed Facility Report? EPA's deep per-facility report — per-statute compliance summaries, every formal enforcement action (type, agency, date, penalty), all environmental permits, and multi-year Toxic Release Inventory chemical data. Enable includeDetailedReport to attach it.

A field is empty — why? A facility only carries data for the programs it participates in (e.g. no TRI releases if it's not a TRI reporter). Blank means EPA has no value, never that scraping failed.

Is scraping this data legal? This actor collects publicly available U.S. government data. You're responsible for using it in compliance with applicable laws and EPA's terms.

Need help?

Open an issue on the actor's Issues tab, or visit the Apify help center. Feature requests are welcome — this actor is actively maintained.