Skip to main content
Glama
jlucasmcrell

Apify Public Data & Leads

EPA ECHO Facility Compliance Search

epa_facility_search
Read-only

Search US EPA ECHO for regulated facilities by state, name, NAICS code, or program, and retrieve compliance status, inspections, and penalties.

Instructions

Search the official EPA ECHO service for US regulated facilities by state, facility name, NAICS code, or environmental program, and export compliance status, inspection, and penalty data. City, ZIP, and violation-only filtering are available in the underlying Actor, not this MCP tool.

Behavioral Transparency:

  • Execution: Network call executed synchronously in the cloud via Apify Actor 'captainhandsome/epa-echo-facility-search'.

  • Side Effects: Reads public sources and creates a billed Actor run and dataset on your Apify account.

  • Authentication: Requires APIFY_TOKEN environment variable.

  • Latency & Limits: Typical run duration is 10-35 seconds; timeout capped at 120 seconds.

Usage Guidelines:

  • When to use: Use for environmental compliance due diligence, regulatory risk screening of a facility or region, industry-wide (NAICS) violation surveys, or enforcement/penalty history lookups.

  • When NOT to use: Do not use for corporate registry, campaign finance, clinical trial, or FDA drug/device data.

  • Named alternatives: Use 'clinical_trials_search' for medical studies, 'openfda_search' for FDA drug/device data, 'fec_campaign_finance_search' for political funding, or 'french_company_search' for the French corporate registry.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
stateYesTwo-letter US state code to search within (e.g. 'RI', 'CA').
programNoEnvironmental program to filter by: 'A' Clean Air Act, 'W' Clean Water Act, 'S' Safe Drinking Water Act, 'R' RCRA hazardous waste. Defaults to 'A' (Clean Air Act) when omitted.
naics_codeNoIndustry NAICS code to filter by, e.g. '327910'.
max_resultsNoMaximum number of facility records to retrieve. Defaults to 10.
facility_nameNoSubstring to match against the facility name.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
runNo
errorNo
statusYes
resultsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed28 schema fields changedv1.1.0
    • addedInput schema / additionalProperties
      Added value: +false
    • addedOutput schema / properties / error
      Added value: +{
      +  "type": "object"
      +}
    • removedOutput schema / properties / results / description
      Removed value: -"Collection of EPA-regulated facility records with compliance detail."
    • addedOutput schema / properties / results / items / properties / city / title
      Added value: +"City"
    • changedOutput schema / properties / results / items / properties / city / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / results / items / properties / compliance_status / description
      Previous value: -"Overall current compliance status, e.g. 'Violation Identified'."New value: +"Overall current compliance status across all programs."
    • addedOutput schema / properties / results / items / properties / compliance_status / title
      Added value: +"Compliance status"
    • changedOutput schema / properties / results / items / properties / compliance_status / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / results / items / properties / naics_codes / description
      Previous value: -"Space-separated NAICS industry codes for the facility."New value: +"North American Industry Classification System codes reported for the facility."
    • addedOutput schema / properties / results / items / properties / naics_codes / title
      Added value: +"NAICS codes"
    • changedOutput schema / properties / results / items / properties / naics_codes / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • addedOutput schema / properties / results / items / properties / name / title
      Added value: +"Facility name"
    • changedOutput schema / properties / results / items / properties / name / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / results / items / properties / registry_id / description
      Previous value: -"EPA Facility Registry Service ID, the stable key for this facility."New value: +"EPA Facility Registry Service ID. The stable key for this facility across every EPA system."
    • addedOutput schema / properties / results / items / properties / registry_id / title
      Added value: +"Registry ID"
    • changedOutput schema / properties / results / items / properties / registry_id / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • addedOutput schema / properties / results / items / properties / state / title
      Added value: +"State"
    • changedOutput schema / properties / results / items / properties / state / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / results / items / properties / total_penalties / description
      Previous value: -"Total dollar amount of penalties assessed against the facility."New value: +"Total penalties assessed across all programs in the last five years, in US dollars."
    • addedOutput schema / properties / results / items / properties / total_penalties / title
      Added value: +"Total penalties (USD)"
    • changedOutput schema / properties / results / items / properties / total_penalties / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • changedOutput schema / properties / results / items / properties / url / description
      Previous value: -"Direct link to the EPA ECHO detailed facility report."New value: +"Link to the full EPA detailed facility report for this facility."
    • addedOutput schema / properties / results / items / properties / url / title
      Added value: +"Report URL"
    • changedOutput schema / properties / results / items / properties / url / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / results / items / required
      Removed value: -[
      -  "registry_id",
      -  "name"
      -]
    • addedOutput schema / properties / run
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / status
      Added value: +{
      +  "enum": [
      +    "success",
      +    "empty_unverified",
      +    "partial",
      +    "error"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "results"
      -]New value: +[
      +  "results",
      +  "status"
      +]
  2. Addedv1.0.11

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses synchronous network execution, a billed Actor run and dataset creation on the user's Apify account, APIFY_TOKEN authentication, and latency/timeout limits. This is valuable behavioral context that annotations alone do not provide, and it does not contradict the readOnly/destructive hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than average, but it is well-structured with clear section headers and every section serves a distinct purpose. The opening sentence front-loads the core purpose, and the additional sections are informative rather than redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 parameters, an output schema, and external side effects, the description covers execution model, authentication, side effects, latency, exclusions, and alternatives. Nothing an agent needs to decide whether and how to invoke this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds meaning by naming the main search dimensions (state, facility name, NAICS code, environmental program) and explicitly warns that city, ZIP, and violation-only filters are unavailable in this MCP tool, which helps agents avoid invalid usage patterns.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource ('official EPA ECHO service'), a clear verb ('Search'), and the exact output ('compliance status, inspection, and penalty data'). It also explicitly calls out which filters are NOT available in the MCP tool, helping differentiate it from the underlying Actor and from unrelated sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description has dedicated 'When to use' and 'When NOT to use' sections, plus named alternatives for each exclusion. This gives an agent explicit routing guidance and leaves no ambiguity about when to select this tool over siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.