Skip to main content
Glama

epa-contaminated-site-screener

Screen a property address or coordinates against EPA Superfund, RCRA, TRI, UST, LUST, and Brownfields databases at ASTM E1527-21 search distances to identify nearby contaminated sites for Phase I environmental due diligence.

Instructions

Phase I ESA & Environmental Due Diligence: EPA Database Search. Environmental due diligence by address: an environmental database report over EPA Superfund/NPL, RCRA CORRACTS/TSD/generators, TRI, UST, LUST, Brownfields, NPDES, AIR, TSCA and RMP, scored at ASTM E1527-21 search distances, plus on-site Superfund and AUL boundary checks. No API key. CHOOSE THIS for the ASTM E1527-21 Phase I records search at regulation distances around one or more properties. For a single combined verdict across twenty unrelated layers use site-due-diligence-bundle; for drinking-water quality use epa-drinking-water-quality-screener. Reads live from the official government source. COST AND SIDE EFFECTS: read-only with respect to the government source — it never writes to any external system — but each call starts a metered run on YOUR Apify account, billed $0.01 per result ($10 per 1,000). Lower on paid Apify plans, down to $3.00 per 1,000. Nothing is charged when a run fails. Store page: https://apify.com/malonestar/epa-contaminated-site-screener

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
modeNo"assets" (default) runs a multi-database Phase I ESA-style regulatory-records screen on your addresses/coordinates — one billable row per nearby EPA-listed site (across Superfund, RCRA, TRI, UST, LUST and Brownfields). "inventory" instead dumps the raw list of EPA SEMS/Superfund sites for the states you pick — one billable row per site. Example: "assets".
assetsNoLocations to screen against EPA contaminated-site databases. Each item is EITHER {"address": "...", "label": "..."} (geocoded via the free Census geocoder) OR {"lat": <number>, "lon": <number>, "label": "...", "state": "<2-letter, OPTIONAL>"}. The "state" hint is no longer required with lat/lon — Superfund is now also screened spatially against the EPA FRS SEMS point layers, which need no state. Supplying "state" additionally pulls that state's full Envirofacts SEMS roster for wider non-NPL coverage. One dataset row (one billable check) is produced per site hit found within the radius; assets with no hits return a single "clear" row. If EVERY asset fails input validation the run FAILS and nothing is billed. Example: [{"lat":39.8037,"lon":-104.9986,"state":"CO","label":"Denver industrial parcel (lat/lon input)"},{"address":"5980 Lipan St, Denver, CO 80221","label":"Denver industrial parcel (address input)"}].
statesNo2-letter US state codes (e.g. ["CO", "NJ"]) whose EPA SEMS/Superfund site records to list. Required when Mode = inventory. Ignored in assets mode (state is derived automatically per-asset).
onlyNplNoInventory mode only: when true, keep only sites currently on (or part of) the National Priorities List — the actual Superfund program sites. When false, include all SEMS site statuses. Default false. Applied by default if omitted: false.
astmModeNoAssets mode only. Adds ONE extra "astm_summary" row after each asset's normal rows, scoring this actor's databases against the ASTM E1527-21 Sec. 8.2.1 standard search distances. The refined table splits RCRA into its three real ASTM line items — CORRACTS 1.0 mi, TSD 0.5 mi, LQG/SQG/VSQG generators 0.25 mi — resolved from EPA ECHO, alongside NPL 1.0 mi, SEMS-CERCLIS 0.5 mi, LUST 0.5 mi, UST 0.25 mi and Brownfields 0.5 mi (TRI has no ASTM search distance and is excluded). Results come as flat CSV-safe columns (astm_npl_flag, astm_rcra_corracts_flag, ...) plus a nested object, with an astm_refined_verdict. Automatically widens the underlying fetch to 1 mile; your normal per-hit rows still respect radiusMiles unchanged. Screening aid only — not a substitute for an ASTM E1527-21 Phase I ESA. Default false. Example: true. Applied by default if omitted: false.
programsNoWhich EPA program databases to include. The six defaults: SUPERFUND (NPL/SEMS), RCRA (hazardous-waste handlers, now classified into CORRACTS / TSD / generator), TRI (Toxics Release Inventory), UST (underground storage tanks), LUST (leaking USTs), BROWNFIELD (ACRES/FRS). Four additional opt-in programs come from the SAME EPA ECHO response at no extra upstream call: NPDES (Clean Water Act discharge permits), AIR (Clean Air Act permitted sources), TSCA (incl. PCB handlers), RMP (Risk Management Plan chemical-accident facilities). Leave EMPTY to screen the original six only — that keeps row counts and cost identical to previous versions. Ignored in inventory mode. Example: ["SUPERFUND","RCRA","TRI","UST","LUST","BROWNFIELD","NPDES","AIR","TSCA","RMP"].
maxResultsNoSafety cap on total dataset rows produced across the run: max site hits emitted (assets mode) or max SEMS site rows (inventory mode). Applied by default if omitted: 1000.
radiusMilesNoDistance from each asset within which EPA-listed sites are counted and reported across all selected programs. Accepts fractional miles (0.1-50) so you can screen at the ASTM E1527-21 standard search distances directly: 1.0 mi (NPL / RCRA CORRACTS), 0.5 mi (SEMS-CERCLIS, RCRA TSD, LUST, Brownfields), 0.25 mi (registered UST, RCRA generators). Default 1 mile covers the widest ASTM distance. Example: 1.
onlyWithCoordsNoInventory mode only: when true (default), drop SEMS records with no latitude/longitude. Coordinate coverage varies sharply by state — measured 2026-07: 3% of Texas SEMS records carry coordinates, 16% California, 48% Colorado, 60% New Jersey, 77% New York, while NPL-track records are ~96-100% geocoded everywhere. Set false to see the full raw roster including un-mappable rows. Example: true.
includeBoundariesNoAssets mode only. Runs two extra point-in-polygon queries per asset to answer "is this property ON a Superfund site?" (on_superfund_site, superfund_site_name, superfund_epa_url) and "is it inside a published EPA Superfund institutional-control / activity-and-use-limitation boundary?" (institutional_control_flag, institutional_control_description). These are true boundary intersections, not distance-to-centroid. Note EPA publishes ~2,114 NPL site polygons but only ~165 IC polygons nationally, so a false IC result means "not inside a published federal Superfund IC", NOT "no AUL exists". Adds no dataset rows and no billing. Default true. Example: true.
maxHitsPerProgramNoAssets mode only: cap on the number of nearest site hits reported per program per asset (keeps output and billing bounded near dense industrial areas). The nearest sites are kept. Default 50. Range 1-1000. Example: 10. Applied by default if omitted: 50.
strictDataCompletenessNoAssets mode only. Reserved for callers that must not accept partial coverage. Regardless of this setting, every row already carries programs_screened / programs_failed / data_complete, and an asset whose databases ALL failed is reported as result_type "error" — never as a "clear" result. If every database fails for every asset the run FAILS so nothing is billed. Default false. Applied by default if omitted: false.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv1.1.3
    • changedInput schema / properties / maxHitsPerProgram / description
      Previous value: -"Assets mode only: cap on the number of nearest site hits reported per program per asset (keeps output and billing bounded near dense industrial areas). The nearest sites are kept. Default 50. Range 1-1000. Example: 50."New value: +"Assets mode only: cap on the number of nearest site hits reported per program per asset (keeps output and billing bounded near dense industrial areas). The nearest sites are kept. Default 50. Range 1-1000. Example: 10. Applied by default if omitted: 50."
  2. First observedv1.0.2

TDQS

A4.8/5.0
Behavior5/5

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

The description goes beyond annotations by disclosing cost and side effects: 'read-only with respect to the government source — it never writes to any external system — but each call starts a metered run on YOUR Apify account, billed $0.01 per result ($10 per 1,000).' It also notes 'Nothing is charged when a run fails.' This is rich behavioral context that annotations alone do not provide. The annotations say readOnlyHint=false, but the description clarifies it is read-only with respect to the government source while being a metered run on the user's account — this is not a contradiction, it's a nuanced disclosure.

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 long but every sentence earns its place: it covers purpose, usage, alternatives, cost, side effects, and store page. The key 'CHOOSE THIS' guidance is front-loaded after the initial definition. It is dense but not redundant. It loses one point for length — it could be tightened slightly without losing information.

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?

Given the tool's complexity (12 parameters, two modes, multiple EPA programs, ASTM distances, billing model), the description is remarkably complete. It covers cost, failure behavior, mode differences, parameter interactions, and even provides a store page link. There is no output schema, but the description explains what rows are produced (billable rows per site hit, 'clear' rows, astm_summary rows). Nothing critical is missing for an agent to select and invoke this tool correctly.

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 significant meaning beyond the schema: it explains the billing model per row, the difference between assets and inventory modes, the ASTM E1527-21 search distances, and the behavior of the 'state' hint with lat/lon. It also clarifies that 'programs' can be left empty to keep costs identical to previous versions. This is substantial added value over the schema.

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 opens with a specific verb and resource: 'Phase I ESA & Environmental Due Diligence: EPA Database Search' and immediately explains it produces an environmental database report over a list of EPA programs. It also distinguishes itself from siblings by naming site-due-diligence-bundle and epa-drinking-water-quality-screener as alternatives. This is a clear, specific, and well-differentiated purpose.

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 explicitly says 'CHOOSE THIS for the ASTM E1527-21 Phase I records search at regulation distances around one or more properties' and names alternatives: 'For a single combined verdict across twenty unrelated layers use site-due-diligence-bundle; for drinking-water quality use epa-drinking-water-quality-screener.' This gives clear when-to-use and when-not-to-use guidance.

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