FWS Critical Habitat Screener — ESA Section 7 Site Check avatar

FWS Critical Habitat Screener — ESA Section 7 Site Check

Pricing

from $5.50 / 1,000 results

Go to Apify Store
FWS Critical Habitat Screener — ESA Section 7 Site Check

FWS Critical Habitat Screener — ESA Section 7 Site Check

Check coordinates against live USFWS Critical Habitat polygons. Per point: in/near designated habitat, species, Final vs Proposed status, Federal Register citation, ESA Section 7 consultation flag. MCP-ready. $0.01 per asset check.

Pricing

from $5.50 / 1,000 results

Rating

0.0

(0)

Developer

Kyle Maloney

Kyle Maloney

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Share

Screen any set of coordinates against live USFWS Critical Habitat polygons (Final + Proposed) with a single API call per point. Get a grounded yes/no — in or near designated critical habitat, whether the site actually sits ON the polygon or the habitat is merely nearby, which species, Final vs Proposed status, listing status (Endangered/Threatened), the Federal Register citation, the USFWS lead field office, an ECOS species profile link, and an ESA Section 7 consultation flag — with a source citation and a per-layer status on every row.

Data source: U.S. Fish & Wildlife Service Critical Habitat ArcGIS FeatureServer (services.arcgis.com/QVENGdaPbd4LUkLV/.../USFWS_Critical_Habitat), queried live via server-side spatial (point + radius buffer) intersection. No scraping, no API key required.

What changed in v1.1 (2026-08-01 validation pass)

  • Fixed a Section 7 false clear. v1.0 treated the screen as successful when either the Final or the Proposed layer answered. A Final-layer outage plus a healthy Proposed layer emitted a billable row reading in_critical_habitat: false, esa_consultation_flag: false, error: null — a confident "no critical habitat" asserted from a lookup that never happened. A partially-answered screen now emits null (not checked) on both flags, a populated error, and per-layer final_layer_status / proposed_layer_status.
  • on_critical_habitat — a true point-in-polygon test. in_critical_habitat has always been a radius test, so a designation up to 50 miles away could raise the ESA flag. v1.1 adds a real point-in-polygon sweep (ArcGIS distance omitted entirely — distance=0 is not a point-in-polygon) so you can tell on the parcel from nearby. Verified live: Zilker Park, Austin is inside Austin blind Salamander critical habitat but only within 1 mile of Bracted twistflower critical habitat; v1.0 reported both identically.
  • A live drift gate. Before a single billable row exists, every run verifies the service still publishes layers 0 and 2 under their expected names and geometry, still exposes every column this actor queries, still holds a feature count in the measured band, and still uses the closed status / listing_status vocabularies — an unknown code fails the run. It then runs two positive canaries (including one point that must hit both layers) and a negative control that must return nothing. Every measured value is logged on every run.
  • Recovered four columns USFWS publishes and v1.0 fetched but never emitted: entity_id, lead_office_code, vipcode, source_id.
  • Truncation and billing honesty. Page size is read live from the service's own maxRecordCount rather than a code comment, and a still-truncated read fails rather than answering from a partial polygon set. Rows are buffered and the billing gate runs before pushData, so a run in which nothing was verified bills nothing.

No output field was removed or renamed, and the price is unchanged.

Who it's for

  • Environmental consultants & ESA/NEPA compliance teams doing early-stage site screening before a formal Biological Assessment.
  • Real estate developers & land acquisition teams de-risking parcels before purchase or entitlement — a critical-habitat hit can add months of federal consultation to a project timeline.
  • Renewable energy & infrastructure siting teams (solar, wind, pipeline, transmission) screening candidate routes/sites at scale.
  • Title companies, lenders, and due-diligence platforms wanting an automatable ESA red-flag check alongside flood/wetland/zoning screens.
  • AI agents / MCP tool chains doing automated environmental site diligence as one step in a larger permitting or acquisition workflow.

Example input

{
"assets": [
{ "lat": 30.2649, "lon": -97.7714, "label": "Zilker Park, Austin TX" },
{ "lat": 34.05, "lon": -118.24, "label": "Los Angeles office" }
],
"radiusMiles": 1,
"includeProposed": true,
"maxAssets": 500
}

A second, live-verified input that exercises both layers at once:

{
"assets": [
{ "lat": 33.4295, "lon": -104.3869, "label": "Pecos River, NM" }
],
"radiusMiles": 1
}

returns a Final hit (Pecos sunflower) and a Proposed hit (Pecos pupfish) for the same point.

Output fields — all 34, every one declared and emitted

FieldDescription
asset_labelYour name for the screened point, echoed back
asset_latLatitude screened (WGS84)
asset_lonLongitude screened (WGS84)
radius_milesBuffer radius in statute miles used for the spatial query
in_critical_habitatRadius test. true = designated critical habitat falls within the radius. false = checked and negative. null = not checked (invalid point, or a layer did not answer). Never read null as clear.
on_critical_habitatPoint-in-polygon test. true = the coordinate is inside this species' polygon. false = the habitat is within the radius but the point is outside it. null = the point-in-polygon sweep did not answer.
hit_relationshipon_site, within_radius, or null
any_on_siteAsset-level rollup: is the coordinate inside any returned critical habitat polygon?
species_comnameCommon name of the species whose habitat was matched
species_scinameScientific name
spcodeUSFWS internal species code
habitat_statusFinal (legally designated) or Proposed
listing_statusEndangered, Threatened, Proposed Endangered or Proposed Threatened
fedregFederal Register citation for the designation, e.g. 78FR68251 68288
pubdatePublication date (YYYY-MM-DD)
unitnameUSFWS habitat unit name as published. Measured live on the full layers: 873 of 873 records carry the literal placeholder Please check current species specific shapefile.
unitname_is_placeholdertrue when unitname is that sentinel rather than a real unit name
esa_consultation_flagtrue when designated critical habitat falls within the radius. false = checked and negative. null = not checked.
entity_idUSFWS ECOS entity id for the species (populated on 873/873 upstream records)
species_profile_urlDeep link to the ECOS species profile built from entity_id
lead_office_codeNumeric USFWS lead Ecological Services field-office code — the office a Section 7 consultation goes to (803/803 Final, 68/70 Proposed)
vipcodeUSFWS taxonomic group code (e.g. V01 mammals, I01 invertebrates)
source_idUSFWS identifier for the source rulemaking/shapefile
final_layer_statusok / unavailable / not_requested for USFWS layer 0
final_layer_errorUpstream error message when final_layer_status is unavailable; null on a healthy run
proposed_layer_statusok / unavailable / not_requested for USFWS layer 2
proposed_layer_errorUpstream error message when proposed_layer_status is unavailable; null on a healthy run
layers_queriedfinal,proposed or final
screening_completetrue only when every requested layer answered for this asset
data_last_updatedISO timestamp of USFWS's last edit to the Final layer, read live every run
checked_atUTC timestamp of the check
errorInvalid input, a partial screen, or a total layer outage. null on a healthy row.
disclaimerAdvisory-use notice
source_urlExact FeatureServer queried

Inputs that populate the conditional columns

final_layer_error / proposed_layer_error / the PARTIAL SCREEN form of error are null on a healthy run by design — that is good news, not a dead column. They populate only when USFWS's service is degraded. Both paths are pinned by offline fixtures and mutation-verified, so they cannot rot.

hit_relationship: "within_radius" and on_critical_habitat: false populate on the default prefill (Zilker Park + Bracted twistflower). proposed_layer_status: "not_requested" populates with "includeProposed": false.

Scope and known limits

  • Polygon coverage only. This FeatureServer publishes USFWS critical habitat as polygons. USFWS also distributes a CRITHAB_LINE feature class in the ECOS bulk download that is not published as a feature service, so a purely line-digitised stream reach cannot be seen here. Aquatic species are well represented as polygons (bull trout, darters, mussels, suckers, chubs, sturgeon all appear), but treat riverine designations as needing IPaC confirmation.
  • USFWS only. Marine and anadromous species whose critical habitat is designated by NOAA Fisheries (most Pacific salmonids, many whales and sea turtles) are not in this dataset.
  • unitname is a placeholder upstream on 100% of records — see above.

Use as an MCP tool

This actor is discoverable and callable by AI agents (Claude, Cursor, etc.) via mcp.apify.com. Pass an array of {lat, lon, label} points and get back a grounded, cited in/near-critical-habitat verdict per point — clean input/output for chaining into larger site-diligence or permitting-research agent workflows. Agents should read screening_complete and the two *_layer_status fields before acting on a false: this actor deliberately returns null rather than a confident negative when a layer did not answer.

FAQ

Does this actor need an API key? No — the USFWS ArcGIS service is public and keyless.

Does "no hit" mean the site is ESA-clear? No. It means no designated critical habitat intersects your search radius in USFWS's current dataset. It does not rule out occupied habitat, other regulated species, NOAA-designated marine habitat, wetlands, or state-level protections. Always confirm with USFWS IPaC and/or formal Section 7 consultation before relying on this for permitting or transaction decisions.

What's the difference between in_critical_habitat and on_critical_habitat? in_critical_habitat is a radius test — true if designated habitat falls anywhere within radiusMiles of the point. on_critical_habitat is a true point-in-polygon test — true only if the coordinate itself is inside the polygon. For a parcel-level determination, read on_critical_habitat / any_on_site.

What does null mean? Not checked. false means checked and negative. The distinction is deliberate: a layer outage must never be reported as a clear.

What's the difference between Final and Proposed critical habitat? Final designations are legally in effect. Proposed designations are pending public comment and may change or be withdrawn — useful for forward-looking risk screening but not yet binding.

How is pricing calculated? $10 per 1,000 result rows ($0.01/row) — one row per species hit, or one row per clear point. No charge for actor start. Graduated discounts apply on paid Apify plans. A run in which nothing could be verified bills nothing.

Can I screen a large portfolio? Yes — pass up to 2,000 points per run via maxAssets; each point queries the live ArcGIS service in sequence.

Pairs naturally with the rest of the site-diligence shelf: FWS Wetlands Proximity Screener (NWI), NOAA EFH Consultation Screener (the marine sibling — NOAA-designated essential fish habitat), EPA Contaminated Site Screener, FEMA NRI County Risk Profile, and the all-in-one Site Due Diligence Bundle.