site-due-diligence-bundle

n8n community node for the Apify Site Due-Diligence Bundle actor: one call per coordinate returns a go/caution/no-go verdict and 0-100 site score across 20 federal environmental, hazard and land-use layers (EPA contamination, FEMA flood, NWI wetlands, ESA

Documentation

n8n-nodes-site-due-diligence-bundle

An n8n community node for the Apify actor Site Due-Diligence Bundle -- a 20-layer property fatal-flaw screen. One call per coordinate returns a verdict (proceed / caution / no-go / incomplete-screen / not-screened) and a 0-100 composite site score across EPA contamination, FEMA flood, NWI wetlands, ESA critical habitat, NAAQS air nonattainment, NRHP historic districts, seismic design category, karst/sinkhole risk, USACE levees, NID dams, tank/spill registries, gas pipelines, transmission-grid proximity, wildfire exposure, and more -- built from keyless US federal and state open-data APIs.

Keywords: property due diligence, phase 1 esa, environmental screening, real estate due diligence, land use screening, site score.

Why use this node

Real estate underwriting, CRE acquisition, and environmental-consulting workflows in n8n can now call a single node instead of stitching together a dozen federal GIS endpoints. Feed it a list of coordinates from a spreadsheet, CRM, or webhook, and get back a structured verdict per site plus per-layer status columns you can route on (e.g. auto-flag no-go sites to Slack, auto-approve proceed sites into a pipeline).

Installation

Option A -- n8n GUI (self-hosted or Cloud with community nodes enabled)

  1. Go to Settings > Community Nodes.
  2. Select Install.
  3. Enter n8n-nodes-site-due-diligence-bundle.
  4. Agree to the risk notice and select Install.

Option B -- npm (self-hosted, manual)

cd ~/.n8n/nodes   # or your n8n custom-nodes directory
npm install n8n-nodes-site-due-diligence-bundle

Restart n8n after installing.

Credentials

This node calls the Apify API and needs an Apify account. In n8n, create a new Apify API credential (or Apify OAuth2) with your Apify API token. No Apify credential is needed to run the underlying actor's own data sources -- they are all keyless US government APIs; the Apify credential is only what authorizes the actor run itself.

Node parameters

Field Type Description
Sites to screen (coordinates) JSON Array of { "lat": <number>, "lon": <number>, "label": "<optional>" }. One billable scorecard row is returned per successfully screened asset.
Proximity radius (miles) Number (0.25-25) Search radius for the proximity layers (EPA contamination, ESA habitat, transmission grid, wildfire, landslide, 303(d) impaired waters, tank/spill registries, gas pipelines, NWI wetlands, NRHP historic, NID dams). Point-in-polygon-only layers (protected lands, flood/NRI county, seismic, IRA energy community, karst, levee, CalFire FHSZ, NAAQS, CBRS) ignore this.
Max assets Number (1-1000) Safety cap on the number of assets screened from the list.

Example workflow

Manual Trigger -> Apify Site Due-Diligence Bundle -> IF (verdict == "no-go") -> Slack

(Verdict values: proceed, caution, no-go, incomplete-screen, not-screened.)

  1. A Manual Trigger (or Webhook) node feeds in one or more sites.
  2. The Apify Site Due-Diligence Bundle node runs with:
{
  "assets": [
    { "lat": 29.7355, "lon": -95.2601, "label": "Houston Ship Channel parcel" },
    { "lat": 44.29, "lon": -105.5, "label": "Gillette, WY greenfield" }
  ],
  "radiusMiles": 1,
  "maxAssets": 250
}
  1. Each output item is one scorecard row with fields including verdict, site_score (0-100, 100 - 35*TierA - 18*TierB - 6*TierC, floored at 0), fatal_flaw_count, coverage_pct, and one <layer>_status column per data layer (e.g. epa_contamination_status, fema_flood_status, nwi_wetlands_status).
  2. An IF node branches on {{$json.verdict}} === "no-go" to notify a Slack channel, and routes proceed sites into a downstream CRM update.

Links

License

MIT

Discussion