FUDS Formerly Used Defense Sites Screener - UXO & Contamination
Pricing
from $5.50 / 1,000 screened sites
FUDS Formerly Used Defense Sites Screener - UXO & Contamination
Screen any US coordinate against the USACE Formerly Used Defense Sites inventory: on-property boundary intersect, nearest FUDS property, munitions response sites (MMRP/UXO) and contamination projects (IRP), split by hazard.
Pricing
from $5.50 / 1,000 screened sites
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 US coordinate against the USACE Formerly Used Defense Sites (FUDS) inventory: 10,123 properties the Department of Defense once owned or controlled and later released, 2,999 published boundary polygons, 1,656 munitions response sites and 5,584 environmental restoration projects.
FUDS is named in ASTM E1527-21 as a standard environmental record source, and it is one of the few in that standard with no Apify actor behind it. This one is built around the two things a screening tool usually gets wrong on this dataset.
The two defects this actor exists to prevent
1. Only 29.6% of FUDS properties have a published boundary. Screen by polygon intersect alone and you miss 70% of the inventory. Screen by point proximity alone and you miss the large properties entirely - which are exactly the former ranges.
Measured live at 39.603223, -104.631551 (an Aurora, Colorado parcel):
| Question | Answer |
|---|---|
| FUDS property points within 1 mile | 0 |
| Inside a published FUDS boundary? | Yes - B08CO0021, BUCKLEY FIELD |
| Inside a munitions response site? | Yes - "Multi-Use Range", MMRP, status Investigation |
A point-only screener answers "no FUDS property within 1 mile" for a parcel sitting
inside a former bombing and gunnery range with an open munitions investigation. This
actor runs the boundary intersect and the munitions-site intersect on every site, and
when the boundary evidence is incomplete it returns null rather than a confident false.
2. MMRP and IRP are different hazards. MMRP (Military Munitions Response Program) is unexploded ordnance and munitions constituents - it stops trenching and drives an anomaly-avoidance plan. IRP (Installation Restoration Program) is chemical contamination - a recognised environmental condition on a Phase I. They are counted separately on every row and never merged into "has a cleanup project".
Who it is for
- Phase I ESA consultants - the FUDS record check, with the historical-use narrative USACE publishes, the eligibility determination and a link to the official fact sheet.
- Land and industrial buyers / lenders - portfolio screening before an offer.
- Solar, BESS and data-centre siting teams - a former range is a trenching problem long before it is a permitting problem.
- Geotech and civil contractors - MMRP exposure before intrusive work.
- AI agents - clean, chainable field descriptions; see the MCP section below.
Example input
{"assets": [{ "lat": 39.603223, "lon": -104.631551, "label": "Aurora CO parcel", "radiusMiles": 1 },{ "lat": 39.7392, "lon": -104.9903, "label": "Denver CO downtown site", "radiusMiles": 5 },{ "lat": 43.2, "lon": -96.1, "label": "NW Iowa farmland - clear control", "radiusMiles": 25 }],"includePropertyDetail": true,"includeMunitionsSiteDetail": true,"maxPropertiesPerAsset": 25}
assets is required. A site with a missing or out-of-range coordinate is reported as an
error row that asserts nothing, rather than being silently screened.
Output
Three record types, all in one flat, CSV-safe dataset:
asset_summary- one per input site. Always emitted.fuds_property- one per FUDS property inside the radius, with its joined project and munitions-site roll-up. Optional (includePropertyDetail).munitions_response_site- one per MRS boundary intersecting the radius, flagging whether it actually contains your point. Optional (includeMunitionsSiteDetail).
How to read a null
null means not checked. false means checked, and the answer is negative. They
are never collapsed.
on_fuds_propertyisnullwhenever a property inside the radius has no published boundary, so its true extent could never be tested against your point. Readon_fuds_property_basisandproperties_without_published_boundaryfor the reason.- Any
*_source_statusother thanoknullsscreening_leveland setsscreening_resulttosource_unavailable. A partial read never produces a "clear". - If every layer fails, the run FAILS and nothing is emitted or billed.
Three things that are not findings
has_dod_funded_project: falsedoes not mean the property is clean. It means DoD never funded a response project there. 7,248 of 10,123 properties are in that state.eligibility_state: not_stated(463 properties) is not "ineligible". USACE published no determination.- Everything here is a screening tool, not a determination. FUDS is an annual
snapshot (
data_vintage_fiscal_year), the property point is a USACE representative coordinate rather than a parcel boundary, and a records search is not a site inspection.
Output fields
All 128 declared fields. Every one is nullable: a dataset-schema type mismatch silently drops the entire batch while the run still reports SUCCEEDED.
Shared - on every row
| Field | Type | Description |
|---|---|---|
record_type | string | Row type: asset_summary (one per input asset), fuds_property (one per FUDS property inside the radius) or munitions_response_site (one per MRS boundary intersecting the radius). |
asset_label | string | The label you supplied for this asset, or asset_N if you did not supply one. |
asset_lat | number | Latitude of the screened point, WGS84 decimal degrees, echoed back exactly as supplied. |
asset_lon | number | Longitude of the screened point, WGS84 decimal degrees, echoed back exactly as supplied. |
search_radius_miles | number | Radius actually used for this asset in statute miles, after clamping to 0-50. |
data_source | string | The upstream this row was screened against. |
data_vintage_fiscal_year | string | USACE fiscal-year vintage of the FUDS snapshot (the FISCALYEAR field). FUDS is an ANNUAL snapshot, not a live feed. |
checked_at | string | UTC timestamp when this run queried the service. |
error | string | Per-source error detail when something failed, otherwise null. A null here on a healthy run is good news, not a dead column. |
asset_summary - verdict
| Field | Type | Description |
|---|---|---|
screening_result | string | on_fuds_property |
screening_level | string | low |
screening_reason | string | Plain-language reason for screening_level, generated from the counters on this row. |
asset_summary - on-property and boundary coverage
| Field | Type | Description |
|---|---|---|
on_fuds_property | boolean | true = the point falls inside a published FUDS property boundary polygon. false = every property inside the radius has a published boundary and none contains the point. null = NOT CHECKABLE, because at least one nearby property has no published boundary (only 29.6% of FUDS properties do) or a layer was unavailable. Never false on unverified evidence. |
on_fuds_property_basis | string | Why on_fuds_property holds the value it does. Read this before acting on a null or a false. |
on_fuds_property_ids | string | Semicolon-separated USACE property IDs whose boundary contains the point. |
on_fuds_property_names | string | Semicolon-separated names of the FUDS properties whose boundary contains the point. |
on_munitions_response_site | boolean | true = the point falls inside a published Munitions Response Site (MRS) boundary - the MEC/UXO footprint. null = the MRS layer did not answer. The single highest-value field for intrusive work. |
on_munitions_response_site_names | string | Semicolon-separated names of the munitions response sites containing the point. |
fuds_properties_within_radius | number | Count of FUDS property POINTS whose coordinate lies within the radius. Null when the property layer did not answer. |
properties_with_published_boundary | number | How many of those properties have a boundary polygon published in the FUDS polygon layer. |
properties_without_published_boundary | number | How many have NO published boundary. Every one of these is a property whose true extent could not be tested against your point. This is why on_fuds_property is often null. |
boundary_polygon_coverage_complete_in_radius | boolean | true when every property inside the radius has a published boundary, so a false on_fuds_property is a fully verified negative. |
asset_summary - nearest property
| Field | Type | Description |
|---|---|---|
nearest_property_id | string | USACE DoD FUDS property ID of the closest property point inside the radius. |
nearest_property_name | string | Name of the closest FUDS property inside the radius. |
nearest_property_distance_miles | number | Great-circle distance from your point to that property point, in statute miles. The property POINT is a USACE representative coordinate, not the parcel boundary. |
nearest_property_state | string | Two-letter state or territory code as USACE publishes it (lowercase). |
nearest_property_county | string | County recorded by USACE for the nearest property. |
nearest_property_closest_city | string | Closest city recorded by USACE for the nearest property. |
nearest_property_eligibility | string | Raw USACE eligibility determination: Eligible, Ineligible, Categorical Exclusion, No Hazards, or null when USACE published none. |
nearest_property_eligibility_state | string | Normalised eligibility: eligible, ineligible, categorical_exclusion, no_hazards, not_stated or unrecognized. not_stated is a real distinct state on 463 of 10,123 properties and is NOT ineligible. |
nearest_property_status | string | USACE property status: Properties without projects, Properties with projects, or Properties with all projects at site closeout. |
nearest_property_has_dod_project | boolean | Whether DoD ever FUNDED a response project here. false means no project was funded - it does NOT mean the property is clean. |
nearest_property_npl_status | string | Whether the property is on the National Priorities List, as USACE states it. |
nearest_property_current_owner | string | Raw USACE current-owner string for the nearest property, preserved verbatim. |
nearest_property_owner_categories | string | Owner categories parsed from that string: federal, state, local, private, tribal or unclassified. |
nearest_property_fact_sheet_url | string | USACE FUDS portal page for the nearest property. |
nearest_property_description | string | USACE narrative describing the historical defense use of the nearest property. |
asset_summary - munitions response sites (MMRP / UXO)
| Field | Type | Description |
|---|---|---|
munitions_response_sites_within_radius | number | Count of MRS boundary polygons intersecting the search radius. |
munitions_response_sites_open | number | How many of those are in Investigation or Cleanup - an open munitions response. |
munitions_response_sites_investigation | number | MRS in Investigation status. |
munitions_response_sites_cleanup | number | MRS in Cleanup status. |
munitions_response_sites_response_complete | number | MRS at Response Complete. Not the same as site closeout - land-use controls can still apply. |
munitions_response_sites_closed_out | number | MRS at Response Complete AND Site Closeout. |
nearest_munitions_response_site_name | string | Name of the first munitions response site intersecting the radius. |
nearest_munitions_response_site_status | string | Its status: investigation, cleanup, responseComplete or responseCompleteSiteCloseout. |
asset_summary - response projects
| Field | Type | Description |
|---|---|---|
response_projects_in_scope | number | Response projects in scope: project points inside the radius PLUS every project attached to a FUDS property found in the radius or containing your point. |
response_project_points_within_radius | number | The stricter subset - response projects whose own published point falls inside the radius. |
mmrp_munitions_projects | number | MMRP (Military Munitions Response Program) projects in scope: unexploded ordnance and munitions constituents. A different hazard from IRP and never merged with it. |
mmrp_munitions_projects_open | number | MMRP projects still in Investigation or Cleanup. |
irp_contamination_projects | number | IRP (Installation Restoration Program) projects in scope: chemical contamination, the classic Phase I recognised environmental condition. |
irp_contamination_projects_open | number | IRP projects still in Investigation or Cleanup. |
other_program_projects | number | Projects under another recognised DERP programme code (bddr or tbd). |
projects_investigation | number | Projects in Investigation. |
projects_cleanup | number | Projects in Cleanup. |
projects_response_complete | number | Projects at Response Complete but NOT yet at site closeout. |
projects_response_complete_and_site_closeout | number | Projects at Response Complete and Site Closeout. |
cost_to_complete_total_usd | number | Sum of USACE cost-to-complete over projects that PUBLISHED a figure. Null when none did - never a fabricated zero. |
cost_to_complete_reported_projects | number | How many in-scope projects published a cost-to-complete figure. |
cost_to_complete_unreported_projects | number | How many did not. The total above covers only the reported ones. |
asset_summary - evidence flags and per-source status
| Field | Type | Description |
|---|---|---|
mmrp_munitions_evidence | boolean | true when the point is inside an MRS, an MRS intersects the radius, or an MMRP project is in scope. Null when the MRS or project layer did not answer. |
irp_contamination_evidence | boolean | true when at least one IRP contamination project is in scope. Null when the project layer did not answer. false means no IRP project is recorded, NOT that the site is clean. |
properties_with_no_dod_project_funded | number | How many properties in the radius have HAS_PROJECTS = no. DoD never funded a response there; that is a funding fact, not a cleanliness finding. |
properties_source_status | string | ok, unavailable or not_attempted for the FUDS property point layer. |
boundary_polygon_source_status | string | ok, unavailable or not_attempted for the FUDS property boundary polygon layer. |
munitions_site_source_status | string | ok, unavailable or not_attempted for the munitions response site layer. |
response_project_source_status | string | ok, unavailable or not_attempted for the response project layer. |
sources_answered | number | How many of the four FUDS layers answered. Anything below 4 nulls the screening level. |
sources_failed | string | Semicolon-separated names of the layers that did not answer. |
query_complete | boolean | true when the property read retrieved exactly the feature count the service reported - i.e. no silent truncation. |
fuds_property rows
| Field | Type | Description |
|---|---|---|
property_rank_by_distance | number | 1 = nearest FUDS property to your point, ascending by distance. |
property_id | string | USACE DoD FUDS property ID - the join key to projects and munitions response sites. |
property_unique_number | string | USACE FUDS unique property number. |
installation_id | string | USACE FUDS installation ID, which can span several properties. |
property_name | string | USACE property name. |
property_description | string | USACE narrative of the historical defense use - the raw material for a Phase I historical-use section. |
property_latitude | number | USACE representative latitude for the property, WGS84. |
property_longitude | number | USACE representative longitude for the property, WGS84. |
distance_miles | number | Great-circle distance from your point to the property point, in statute miles. |
property_state | string | Two-letter state or territory code, lowercase as USACE publishes it. |
property_county | string | County recorded by USACE. |
property_closest_city | string | Closest city recorded by USACE. |
property_congressional_district | string | Congressional district recorded by USACE. |
property_epa_region | string | EPA region recorded by USACE. |
eligibility | string | Raw USACE eligibility determination, or null where USACE published none. |
eligibility_state | string | Normalised eligibility state, including not_stated for the 463 properties USACE leaves blank. |
property_status | string | USACE property status string. |
property_status_recognized | boolean | false when USACE published a status value this actor does not have in its closed vocabulary. |
has_dod_funded_project | boolean | Whether DoD ever funded a response project here. false is a funding fact, not a cleanliness determination. |
npl_status | string | National Priorities List status as USACE states it. |
current_owner | string | Raw USACE current-owner string, preserved verbatim. |
current_owner_list | string | Individual owners parsed out of that string and semicolon-joined. |
current_owner_categories | string | Owner categories: federal, state, local, private, tribal or unclassified. |
usace_district | string | USACE district code. |
usace_division | string | USACE division code. |
property_fact_sheet_url | string | USACE FUDS portal page for this property. |
has_published_boundary_polygon | boolean | Whether USACE publishes a boundary polygon for this property. Only 2,999 of 10,123 properties (29.6%) have one; where this is false, the property extent could not be tested against your point. |
boundary_polygon_status | string | Status carried on the boundary polygon record: allCloseout, hasProjects or noProjects. Note this layer uses camelCase codes while the point layer uses prose. |
boundary_polygon_owner | string | Current-owner string from the boundary polygon. This layer uses PLAIN CATEGORY NAMES, a different vocabulary from the point layer prefixes. |
boundary_polygon_owner_categories | string | Owner categories parsed from the polygon-layer vocabulary. |
boundary_polygon_area_square_degrees | number | Shape__Area as USACE publishes it, in SQUARE DEGREES on a WGS84 layer. Deliberately not converted to acres - a degree of longitude is not a constant length. |
response_projects | number | Response projects attached to this property. |
project_statuses | string | Distinct project statuses on this property, semicolon-joined. |
project_names | string | Project names on this property, semicolon-joined. |
project_restoration_categories | string | Distinct USACE environmental restoration categories on this property. |
project_cost_to_complete_total_usd | number | Cost-to-complete summed over this property projects that published a figure. |
earliest_response_complete_date | string | Earliest response-complete date across this property projects, YYYY-MM-DD. |
latest_site_closeout_date | string | Latest site-closeout date across this property projects, YYYY-MM-DD. |
munitions_response_sites | number | Munitions response sites attached to this property that intersect your radius. |
munitions_response_site_names | string | Their names, semicolon-joined. |
munitions_response_site rows
| Field | Type | Description |
|---|---|---|
site_rank | number | 1 = first munitions response site returned for this asset. |
mrs_object_id | number | ArcGIS OBJECTID of the munitions response site feature. |
mrs_name | string | USACE name of the munitions response site. |
mrs_official_site_name | string | Official site name where USACE publishes one. |
mrs_description | string | USACE description of the munitions response site. |
mrs_project_number | string | USACE project number for the munitions response. |
mrs_restoration_site_id | string | USACE environmental restoration site / munitions response area ID. |
mrs_contains_asset_point | boolean | true when THIS munitions response site polygon contains your point, as opposed to merely intersecting the radius. |
derp_program | string | DERP programme code. Every munitions response site is mmrp by definition. |
derp_program_recognized | boolean | false when USACE published a programme code outside the service own declared domain. |
mrs_project_category | string | USACE project category (mmrp, mmrpCwm and similar). Null on 1,502 of 1,656 sites. |
mrs_status | string | MRS status as a camelCase code: investigation, cleanup, responseComplete or responseCompleteSiteCloseout. |
mrs_status_recognized | boolean | false when USACE published an MRS status outside the closed vocabulary. |
mrs_response_open | boolean | true when the munitions response is still in Investigation or Cleanup. Null when the status was not recognised. |
mrs_relative_priority | string | USACE relative priority code where published. Null on most sites. |
mrs_area_square_degrees | number | Shape__Area in SQUARE DEGREES on a WGS84 layer, published as-is and never converted to acres. |
mrs_state | string | Two-letter state or territory code, lowercase. |
property_distance_miles | number | Distance from your point to the parent property point, where that property is inside the radius. |
property_in_search_radius | boolean | true when the parent FUDS property point was itself found inside the radius. false is common and expected: an MRS boundary can reach your parcel while the property representative point sits miles away. |
How it works
Per site, six reads against the USACE FUDS FeatureServer:
- Property points within the radius (
FUDS Property Points), post-filtered by haversine. - Boundary intersect - point-in-polygon against
FUDS Property Polygon, withdistance/unitsabsent entirely (distance=0is not a PIP on ArcGIS). - Boundary coverage - an id-scoped read establishing which properties in the radius actually have a published boundary. Without it, a clean intersect would be mistaken for "not on a FUDS property".
- Munitions response sites within the radius, plus a second intersect asking whether one contains your point.
- Response projects whose own point is in the radius.
- Response projects joined by property id to every property or munitions site found - which is how the Buckley canary returns 5 MMRP projects with no property point nearby.
Layer IDs are resolved from the service's own metadata by name. They are non-contiguous (1, 2, 3, 4, 6, 7, 8, 9, 10 - no layer 0, no layer 5), and layers 6-8 are Interim Risk Management, a different programme that is never counted as FUDS.
Live drift gate
Before any billable row, every run verifies against the live service and fails without
billing if anything regresses: layer identity and field sets, row-count bands
(10,123 / 5,584 / 1,656 / 2,999 as measured 2026-08-11), boundary-coverage ratio, closed
vocabularies (an unknown ELIGIBILITY, DERPPROGRAM or PROJECTSTATUS code fails the
run rather than being guessed at), declared spatial reference plus a coordinate-magnitude
check, circle fidelity against a padded query, a positive canary (the Buckley Field
point above must still return B08CO0021, an mmrp site and at least 3 projects) and a
negative control (43.2, -96.1 must still return nothing on all three probes). Every
measured value is logged on every run.
Reads are truncation-guarded against the service's own returnCountOnly answer and paged
by keyset on OBJECTID. This matters: maxRecordCount is 9,000 on the property layer
against 10,123 rows, and 2,000 on the polygon layer against 2,999 - an unpaginated read
returns 2,000 rows, sets exceededTransferLimit, and looks completely successful.
Use as an MCP tool
This actor is callable by AI agents over mcp.apify.com. Add it to Claude Desktop,
Claude Code or Cursor:
{"mcpServers": {"apify": {"command": "npx","args": ["-y", "@apify/actors-mcp-server", "--actors", "malonestar/fuds-defense-site-screener"],"env": { "APIFY_TOKEN": "your-apify-token" }}}}
Worked agent prompt:
"Screen 39.603223, -104.631551 and 30.2672, -97.7431 against the FUDS inventory at a 2-mile radius. For each, tell me whether the point is inside a former defense property boundary or a munitions response site, and split any response projects into munitions (MMRP) versus contamination (IRP)."
Billing is unchanged when called as a tool, and a run that cannot answer fails without billing.
Pricing
Pay per result: $10 per 1,000 rows (one row = one asset_summary, fuds_property or
munitions_response_site record), with graduated discounts on paid Apify plans. A run
that fails its drift gate or loses every source emits nothing and bills nothing.
Set includePropertyDetail and includeMunitionsSiteDetail to false for one row per
site - the asset_summary counts are complete either way.
FAQ
What is a Formerly Used Defense Site? A property DoD owned, leased or otherwise controlled and released before October 1986 - training ranges, depots, airfields, plants, laundries. USACE runs the cleanup programme; the property itself is usually in private, municipal or other federal hands today.
Is this the same as an active military base? No. FUDS covers released property. Active and BRAC installations are separate inventories.
Does "no projects" mean the site is clean? No. It means DoD never funded a response project there. 7,248 of 10,123 properties are in that state.
Why is on_fuds_property sometimes null? Because only 29.6% of FUDS properties have a
published boundary polygon, so for the other 70% the property extent cannot be tested
against your point. null is the honest answer; false would be a guess.
How current is the data? FUDS is an annual snapshot. The vintage is published on
every row as data_vintage_fiscal_year (FY2024 at the time of writing).
Can I search by property name or state instead of a coordinate? Not in v1 - this is a coordinate screener. Open an issue on the Apify Store page if you need a name/state mode.
Related actors
epa-contaminated-site-screener- Superfund, RCRA, USTs and ECHO enforcement at the same coordinate. The other half of a Phase I records search.site-due-diligence-bundle- 20 federal layers for one coordinate in one call.usgs-historical-topo-records-review- historical topographic coverage, the ASTM historical-use companion to the FUDS narrative.state-tank-spill-registry-screener- state tank and spill registries.
Source
USACE FUDS public FeatureServer:
https://services7.arcgis.com/n1YM8pTrFmm7L4hs/arcgis/rest/services/fuds/FeatureServer
Keyless and public. This actor is not affiliated with or endorsed by the US Army Corps of Engineers or the Department of Defense.