Site Due-Diligence Bundle — 20-Layer Fatal-Flaw Scorecard
Pricing
from $55.00 / 1,000 results
Site Due-Diligence Bundle — 20-Layer Fatal-Flaw Scorecard
One call (lat/lon + radius) returns a go/caution/no-go verdict and a 0-100 site score across 20 federal layers: EPA contamination, FEMA flood, NWI wetlands, ESA habitat, NAAQS nonattainment, NRHP historic, karst, landslide, levee, dams, CBRS, tanks, pipelines, seismic.
Pricing
from $55.00 / 1,000 results
Rating
0.0
(0)
Developer
Kyle Maloney
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
21 hours ago
Last modified
Categories
Share
Takes a coordinate and a radius and returns one site-screening scorecard that runs twenty environmental, hazard, regulatory and opportunity checks at once, instead of calling twenty separate actors. Every site comes back as a single row with a go / caution / no-go verdict, a 0–100 site score, a coverage percentage, a rolled-up fatal_flaw_count, a flags list, an opportunities list and a plain-language summary.
Built as a fast environmental site screening API for site selection due diligence, Phase I ESA database review, fatal flaw analysis and land constraint analysis — the pre-screen you run before you pay for the real studies.
What it screens (20 layers)
Layer (layers key) | Source | Result type |
|---|---|---|
epa_contamination | EPA ECHO — RCRA hazardous-waste handlers and TRI reporters within the radius | flag |
flood_risk | FEMA National Risk Index (county) via the FCC block geocoder | flag on high inland/coastal flood risk |
critical_habitat | USFWS ESA Critical Habitat, Final + Proposed | flag (ESA Section 7 consultation) |
protected_lands | USGS PAD-US protected/conservation lands (point-in-polygon) | flag |
seismic_design | USGS ASCE 7-22 seismic design web service (IBC 2024 edition) | flag on high Seismic Design Category / site-specific study |
wildfire_exposure | NIFC WFIGS active perimeters and incidents | flag when in or near an active fire |
karst_terrain | USGS CONUS_Karst compilation (OFR 2014-1156), 7 layers | flag — Elevated or Moderate tier |
landslide_hazard | USGS US Landslide Inventory (polygons + points) | flag |
levee_proximity | USACE National Levee Database Leveed Areas | flag, with an editorial 0–100 levee_risk_score |
impaired_waters_303d | EPA ATTAINS Clean Water Act §303(d) impaired/threatened waters | flag, with listed pollutant causes |
state_tank_spill_registry | EPA UST Finder national baseline + NY DEC, CA GeoTracker, TX TCEQ PST/LPST, FL DEP | flag on any currently open case |
gas_pipeline_proximity | US DOT NTAD Natural Gas Pipelines (EIA) | flag inside the <500ft right-of-way band |
calfire_fhsz | CAL FIRE Fire Hazard Severity Zone, California only | flag on Very High; outside CA → not_applicable |
air_nonattainment (new) | EPA NAAQS nonattainment area lookup — 11 active pollutant/standard layers | flag → New Source Review (NSR) offsets + LAER instead of PSD |
wetlands_nwi (new) | USFWS National Wetlands Inventory — on-parcel + radius buffer | flag → Section 404 permit screening and mitigation |
historic_nrhp (new) | NPS National Register of Historic Places — sites + districts | flag → NHPA Section 106 screening |
cbrs_coastal_barrier (new) | USFWS Coastal Barrier Resources System units | flag → CBRA federal-funding bar / NFIP ineligible |
dam_inundation_exposure (new) | USACE National Inventory of Dams — hazard class + condition | flag on a Poor/Unsatisfactory high-hazard dam nearby |
transmission_grid | HIFLD transmission lines + substations | opportunity (interconnection proximity) |
ira_energy_community | DOE/NETL IRA energy-community layers | opportunity (10% ITC / +10% PTC bonus) |
The scoring model
The bundle does the synthesis instead of handing you twenty independent flags.
Severity tiers. Every flagged layer is classified by what the flag actually means, using the metrics that layer already produces:
| Tier | Weight | What it is | Triggers |
|---|---|---|---|
| A | −35 | Legal or physical prohibition. On its own, enough to kill a site. | federal land; ESA critical habitat; inside an active fire perimeter; inside a mapped landslide; Very High CAL FIRE FHSZ; pipeline inside 500 ft; CBRS System Unit |
| B | −18 | Material permitting cost/schedule risk. | NAAQS nonattainment; wetland on/within 0.1 mi; NRHP resource on/within 0.25 mi; site-specific seismic study or SDC D–F; Elevated karst; non-accredited levee; open tank/spill case within 0.25 mi; Very High flood risk; in an impaired water; nearby Poor-condition high-hazard dam; CBRS OPA; non-federal protected land; wildfire near but not inside |
| C | −6 | Diligence-scope item. Investigate; rarely fatal. | everything else that flags (EPA RCRA/TRI counts, Moderate karst, farther pipeline bands, nearby mapped landslides, etc.) |
site_score = 100 − (35 × TierA) − (18 × TierB) − (6 × TierC) floor 0
Verdict bands, evaluated strictly in this order:
| Verdict | When |
|---|---|
not-screened | nothing was screened at all |
incomplete-screen | coverage_pct < 80 — too little coverage to claim anything |
no-go | any Tier-A constraint |
caution | any Tier-B constraint, or site_score < 70 |
caution | any layer unavailable or partial (see the coverage gate) |
proceed | every applicable layer answered and nothing flagged |
The coverage gate. verdict can never be proceed while any applicable layer is unavailable or partial. A clean verdict therefore always implies complete coverage — an upstream outage can never be laundered into a clean bill of health. coverage_pct excludes not_applicable layers from its denominator and counts a partial layer as half.
A proceed can still carry flags. Tier-C findings are diligence-scope items, not blockers, so they do not move the verdict — but they are never hidden. A real proceed row from the demo portfolio reads site_score: 94, verdict: proceed, fatal_flaw_count: 1, with the finding spelled out in flags and in verdict_reason ("1 diligence-scope finding(s) to review"). Karst and nearby impaired waters are common enough across the US that treating them as blockers would make almost every site caution and destroy the verdict's discriminating power. Read verdict for the go/no-go call and flags for the scope of work.
Opportunities are scored separately. opportunity_score (0–25, from the IRA energy-community bonus and grid proximity) is never netted against constraints — an IRA bonus does not make a wetland go away.
Layer status vocabulary
Every layer returns { status, detail, metric fields, data_vintage, sources_queried, sources_failed, citation }.
| Status | Meaning |
|---|---|
clear | every source for this layer answered, and nothing was found |
flag | a potential fatal-flaw constraint was found |
opportunity | a positive finding |
partial | some sources answered and found nothing, but at least one source failed and was not screened. Never read as clear. |
unavailable | no source answered. Not screened. |
not_applicable | the dataset does not cover this location by design (e.g. CAL FIRE FHSZ outside California). Excluded from the coverage denominator. |
A layer that errors upstream is never silently reported as clear, and a "nothing found" sentence names only the sources that actually ran. One bad layer or one bad coordinate never crashes the run.
Data vintage per layer
checked_at is the query time, not the data vintage. Every layer carries its own data_vintage:
| Layer | Vintage |
|---|---|
epa_contamination | EPA ECHO, refreshed weekly |
air_nonattainment | EPA OAQPS designations, refreshed weekly |
wildfire_exposure | NIFC WFIGS, live / near-real-time |
transmission_grid, levee_proximity | continuously updated hosted layers |
impaired_waters_303d | EPA ATTAINS, Esri quarterly (exact quarter in attains_service_edition) |
flood_risk | FEMA NRI county release, annual cycle |
state_tank_spill_registry | EPA UST Finder annual + each state registry on its own cadence |
gas_pipeline_proximity | US DOT NTAD annual release |
seismic_design | ASCE 7-22 (IBC 2024); USGS model version in seismic_model_version |
ira_energy_community | DOE/NETL 2024v1 |
critical_habitat | updated as rules publish in the Federal Register |
protected_lands | PAD-US, multi-year republication cycle |
karst_terrain | USGS OFR 2014-1156 — a 2014 compilation |
landslide_hazard | USGS inventory v2, compiled from sources of varying age |
wetlands_nwi | NWI imagery dates range from the 1970s to the present by project |
historic_nrhp | NPS spatial data; many points are batch-derived with unverified coordinates |
cbrs_coastal_barrier | changes only by Act of Congress or a USFWS map revision |
dam_inundation_exposure | NID; per-dam update and condition-assessment dates vary widely by state |
calfire_fhsz | SRA 2007 / LRA 2011 editions. CAL FIRE has since adopted newer SRA (2022/2024-effective) and LRA (2025) maps that this service does not yet carry — confirm the currently adopted zone with CAL FIRE. |
Example input
{"assets": [{ "lat": 29.7355, "lon": -95.2601, "label": "Houston Ship Channel industrial site, TX" },{ "lat": 44.29, "lon": -105.5, "label": "Gillette, WY greenfield (coal-country)" }],"radiusMiles": 1}
Example output
One row per site (abridged — the real row also carries the nested layers object with per-layer metrics, data_vintage, source health and citations, plus all 20 <layer>_status columns):
{"asset_label": "Dauphin Island, AL coastal barrier parcel","asset_lat": 30.23863,"asset_lon": -88.32039,"radius_miles": 2,"verdict": "no-go","site_score": 0,"verdict_reason": "2 Tier-A constraint(s) -- a legal or physical prohibition: ESA critical habitat; CBRS coastal barrier unit (NFIP / federal-funding bar).","coverage_pct": 100,"layers_screened": 19,"layers_applicable": 19,"layers_not_applicable": 1,"fatal_flaw_count": 6,"tier_a_count": 2,"tier_b_count": 2,"tier_c_count": 2,"opportunity_score": 0,"cbrs_coastal_barrier_status": "flag","wetlands_nwi_status": "flag","critical_habitat_status": "flag","calfire_fhsz_status": "not_applicable","flags_text": "ESA critical habitat: ... | CBRS coastal barrier unit: Inside CBRS System Unit Q02 (\"Dauphin Island\") ...","site_screen_summary": "NO-GO - site score 0/100; 6 potential fatal-flaw constraints flagged (2 Tier-A, 2 Tier-B, 2 Tier-C)."}
And a clean site from the same portfolio:
{"asset_label": "Western Kansas low-constraint greenfield","verdict": "proceed","site_score": 94,"coverage_pct": 100,"fatal_flaw_count": 1,"tier_a_count": 0,"tier_b_count": 0,"tier_c_count": 1,"verdict_reason": "No prohibition and no major permitting constraint across 19 applicable layer(s); 1 diligence-scope finding(s) to review (see flags)."}
Key output fields
verdict—proceed|caution|no-go|incomplete-screen|not-screened.site_score— 0–100 composite.verdict_reasonexplains it in one sentence.coverage_pct,layers_screened,layers_partial,layers_unavailable,layers_not_applicable.tier_a_count/tier_b_count/tier_c_count,opportunity_score.fatal_flaw_count— how many layers returnedflag.flags,opportunities,unavailable_layers,partial_layers,not_applicable_layers— plus*_textsingle-cell versions that survive CSV/Excel export.<layer>_status— a flat scalar column for each of the 20 layers, so the per-layer verdict survives a spreadsheet export without 150 nested columns.layers— the full nested per-layer object with metrics,data_vintage, source health and citation.site_screen_summary— one-line roll-up. Leads withINCOMPLETE COVERAGEwhenever any layer was unavailable or partial.
Billing
One billable Result per successfully screened site. You are never charged for:
- an invalid coordinate (returned in a separate non-billable
invalid-inputsdataset), or - a row where every layer failed (0% coverage — also routed to
invalid-inputs).
How radius works
radiusMiles (default 1, accepts 0.25–25) drives the distance-based layers: EPA, critical habitat, grid, wildfire, landslide, impaired waters, tank/spill, gas pipelines, NWI wetlands, NRHP resources and NID dams. The point-in-polygon layers — protected lands, flood/NRI county, seismic, IRA, karst, levee, CAL FIRE FHSZ, NAAQS nonattainment and CBRS — are exact intersect tests and ignore it.
Who uses it
- Site selectors and corporate real-estate teams running greenfield site screening and industrial land screening on a shortlist before ordering full studies.
- Data center site selection and solar site suitability teams checking grid proximity, the IRA bonus and the full constraint stack in one call.
- Renewable-energy and infrastructure developers screening New Source Review NSR PSD exposure alongside wetlands, habitat and historic constraints.
- Phase I ESA and environmental consultants scoping the assessment with a fast regulatory-records and sensitive-receptor read, including a brownfield pre-screen.
- CRE lenders and insurers pulling CRE collateral environmental screening — flood, wildfire, seismic, karst, landslide, levee, contamination, tank/spill, pipeline, dam and coastal-barrier exposure on an address.
- AI agents turning a coordinate into a structured constraint profile with a single verdict.
Use as an MCP tool
This Actor is callable directly by any MCP-compatible AI agent through Apify's hosted MCP server. There is no server to run and no integration code to write - the tool schema an agent sees is generated from this Actor's own input and dataset schemas.
Endpoint
https://mcp.apify.com?tools=malonestar/site-due-diligence-bundle
Claude Desktop, Claude Code or Cursor - add to claude_desktop_config.json,
.mcp.json or .cursor/mcp.json respectively:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=malonestar/site-due-diligence-bundle","headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }}}}
Get a token at https://console.apify.com/settings/integrations. Claude Desktop can
also authenticate interactively via OAuth against https://mcp.apify.com with no
headers block. Full reference: https://docs.apify.com/platform/integrations/mcp
Try asking your agent
Run a full 20-layer due-diligence screen on 39.7392,-104.9903 and tell me whether the verdict is proceed, caution or no-go, and why.
Chains well with - expose these alongside it by comma-separating the tools
parameter, and the agent can carry results from one into the next:
malonestar/parcel-owner-lookupmalonestar/epa-contaminated-site-screenermalonestar/fema-nri-county-risk-profile
https://mcp.apify.com?tools=malonestar/site-due-diligence-bundle,malonestar/parcel-owner-lookup,malonestar/epa-contaminated-site-screener,malonestar/fema-nri-county-risk-profile
Billing is unchanged when called as an MCP tool: this Actor is Pay-Per-Event and an agent pays the same per-result price a human does. A run that cannot answer fails without billing rather than returning an unverified negative.
Use in n8n
This Actor is published as an n8n community node, so it can be dropped into a workflow without writing an HTTP request by hand.
- npm: https://www.npmjs.com/package/n8n-nodes-site-due-diligence-bundle
- source: https://github.com/malonestar/n8n-nodes-site-due-diligence-bundle
Install from Settings > Community Nodes > Install in any self-hosted n8n
instance, enter n8n-nodes-site-due-diligence-bundle, then add your Apify API key as an
Apify API credential. The node calls this Actor through the Apify API, so there
is no extra infrastructure to run and billing is identical to a normal run.
Use in n8n
This Actor is published as an n8n community node, so it can be dropped into a workflow without writing an HTTP request by hand.
- npm: https://www.npmjs.com/package/n8n-nodes-site-due-diligence-bundle
- source: https://github.com/malonestar/n8n-nodes-site-due-diligence-bundle
Install from Settings > Community Nodes > Install in any self-hosted n8n
instance, enter n8n-nodes-site-due-diligence-bundle, then add your Apify API key as an
Apify API credential. The node calls this Actor through the Apify API, so there
is no extra infrastructure to run and billing is identical to a normal run.
FAQ
Is this a Phase I Environmental Site Assessment? No. It is an informational multi-source pre-screen to scope and prioritize — not a substitute for an ASTM E1527 Phase I, a legal ESA or land determination, a wetland delineation, a flood certificate, a stamped engineering study, or tax advice. Confirm every flag with the authoritative agency and a licensed professional.
What does a clear result actually guarantee? That every upstream source for that layer answered and nothing was found in the compiled national dataset. It does not rule out an undocumented local condition. If a source failed, you get partial or unavailable instead — never clear.
What isn't screened? The EPA layer covers RCRA and TRI via ECHO; Superfund/SEMS records without coordinates and the IRA brownfield category are out of scope. NWI does not map every wetland (small, forested and farmed wetlands are commonly omitted) and is not a jurisdictional delineation. NRHP listing is not the same as eligibility — unlisted but eligible resources still trigger Section 106. The tank/spill layer has a national EPA UST Finder baseline plus deeper registries in NY, CA, TX and FL only. CAL FIRE FHSZ is California-only. The dam layer is a straight-line proximity proxy, not an inundation determination — NID does not publish inundation polygons, so a site outside the radius can still lie in an inundation path; request the dam owner's EAP mapping for a real answer.
How many sites per run? Up to maxAssets (default 250). One billable scorecard row per successfully screened site.