FWS Critical Habitat Screener — ESA Section 7 Site Check
Pricing
from $5.50 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
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 emitsnull(not checked) on both flags, a populatederror, and per-layerfinal_layer_status/proposed_layer_status. on_critical_habitat— a true point-in-polygon test.in_critical_habitathas 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 (ArcGISdistanceomitted entirely —distance=0is 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_statusvocabularies — 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
maxRecordCountrather 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 beforepushData, 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
| Field | Description |
|---|---|
asset_label | Your name for the screened point, echoed back |
asset_lat | Latitude screened (WGS84) |
asset_lon | Longitude screened (WGS84) |
radius_miles | Buffer radius in statute miles used for the spatial query |
in_critical_habitat | Radius 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_habitat | Point-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_relationship | on_site, within_radius, or null |
any_on_site | Asset-level rollup: is the coordinate inside any returned critical habitat polygon? |
species_comname | Common name of the species whose habitat was matched |
species_sciname | Scientific name |
spcode | USFWS internal species code |
habitat_status | Final (legally designated) or Proposed |
listing_status | Endangered, Threatened, Proposed Endangered or Proposed Threatened |
fedreg | Federal Register citation for the designation, e.g. 78FR68251 68288 |
pubdate | Publication date (YYYY-MM-DD) |
unitname | USFWS 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_placeholder | true when unitname is that sentinel rather than a real unit name |
esa_consultation_flag | true when designated critical habitat falls within the radius. false = checked and negative. null = not checked. |
entity_id | USFWS ECOS entity id for the species (populated on 873/873 upstream records) |
species_profile_url | Deep link to the ECOS species profile built from entity_id |
lead_office_code | Numeric USFWS lead Ecological Services field-office code — the office a Section 7 consultation goes to (803/803 Final, 68/70 Proposed) |
vipcode | USFWS taxonomic group code (e.g. V01 mammals, I01 invertebrates) |
source_id | USFWS identifier for the source rulemaking/shapefile |
final_layer_status | ok / unavailable / not_requested for USFWS layer 0 |
final_layer_error | Upstream error message when final_layer_status is unavailable; null on a healthy run |
proposed_layer_status | ok / unavailable / not_requested for USFWS layer 2 |
proposed_layer_error | Upstream error message when proposed_layer_status is unavailable; null on a healthy run |
layers_queried | final,proposed or final |
screening_complete | true only when every requested layer answered for this asset |
data_last_updated | ISO timestamp of USFWS's last edit to the Final layer, read live every run |
checked_at | UTC timestamp of the check |
error | Invalid input, a partial screen, or a total layer outage. null on a healthy row. |
disclaimer | Advisory-use notice |
source_url | Exact 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_LINEfeature 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.
unitnameis 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.
Related actors
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.