FUDS Formerly Used Defense Sites Screener - UXO & Contamination avatar

FUDS Formerly Used Defense Sites Screener - UXO & Contamination

Pricing

from $5.50 / 1,000 screened sites

Go to Apify Store
FUDS Formerly Used Defense Sites Screener - UXO & Contamination

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

Kyle Maloney

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

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):

QuestionAnswer
FUDS property points within 1 mile0
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_property is null whenever a property inside the radius has no published boundary, so its true extent could never be tested against your point. Read on_fuds_property_basis and properties_without_published_boundary for the reason.
  • Any *_source_status other than ok nulls screening_level and sets screening_result to source_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: false does 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

FieldTypeDescription
record_typestringRow 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_labelstringThe label you supplied for this asset, or asset_N if you did not supply one.
asset_latnumberLatitude of the screened point, WGS84 decimal degrees, echoed back exactly as supplied.
asset_lonnumberLongitude of the screened point, WGS84 decimal degrees, echoed back exactly as supplied.
search_radius_milesnumberRadius actually used for this asset in statute miles, after clamping to 0-50.
data_sourcestringThe upstream this row was screened against.
data_vintage_fiscal_yearstringUSACE fiscal-year vintage of the FUDS snapshot (the FISCALYEAR field). FUDS is an ANNUAL snapshot, not a live feed.
checked_atstringUTC timestamp when this run queried the service.
errorstringPer-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

FieldTypeDescription
screening_resultstringon_fuds_property
screening_levelstringlow
screening_reasonstringPlain-language reason for screening_level, generated from the counters on this row.

asset_summary - on-property and boundary coverage

FieldTypeDescription
on_fuds_propertybooleantrue = 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_basisstringWhy on_fuds_property holds the value it does. Read this before acting on a null or a false.
on_fuds_property_idsstringSemicolon-separated USACE property IDs whose boundary contains the point.
on_fuds_property_namesstringSemicolon-separated names of the FUDS properties whose boundary contains the point.
on_munitions_response_sitebooleantrue = 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_namesstringSemicolon-separated names of the munitions response sites containing the point.
fuds_properties_within_radiusnumberCount of FUDS property POINTS whose coordinate lies within the radius. Null when the property layer did not answer.
properties_with_published_boundarynumberHow many of those properties have a boundary polygon published in the FUDS polygon layer.
properties_without_published_boundarynumberHow 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_radiusbooleantrue 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

FieldTypeDescription
nearest_property_idstringUSACE DoD FUDS property ID of the closest property point inside the radius.
nearest_property_namestringName of the closest FUDS property inside the radius.
nearest_property_distance_milesnumberGreat-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_statestringTwo-letter state or territory code as USACE publishes it (lowercase).
nearest_property_countystringCounty recorded by USACE for the nearest property.
nearest_property_closest_citystringClosest city recorded by USACE for the nearest property.
nearest_property_eligibilitystringRaw USACE eligibility determination: Eligible, Ineligible, Categorical Exclusion, No Hazards, or null when USACE published none.
nearest_property_eligibility_statestringNormalised 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_statusstringUSACE property status: Properties without projects, Properties with projects, or Properties with all projects at site closeout.
nearest_property_has_dod_projectbooleanWhether DoD ever FUNDED a response project here. false means no project was funded - it does NOT mean the property is clean.
nearest_property_npl_statusstringWhether the property is on the National Priorities List, as USACE states it.
nearest_property_current_ownerstringRaw USACE current-owner string for the nearest property, preserved verbatim.
nearest_property_owner_categoriesstringOwner categories parsed from that string: federal, state, local, private, tribal or unclassified.
nearest_property_fact_sheet_urlstringUSACE FUDS portal page for the nearest property.
nearest_property_descriptionstringUSACE narrative describing the historical defense use of the nearest property.

asset_summary - munitions response sites (MMRP / UXO)

FieldTypeDescription
munitions_response_sites_within_radiusnumberCount of MRS boundary polygons intersecting the search radius.
munitions_response_sites_opennumberHow many of those are in Investigation or Cleanup - an open munitions response.
munitions_response_sites_investigationnumberMRS in Investigation status.
munitions_response_sites_cleanupnumberMRS in Cleanup status.
munitions_response_sites_response_completenumberMRS at Response Complete. Not the same as site closeout - land-use controls can still apply.
munitions_response_sites_closed_outnumberMRS at Response Complete AND Site Closeout.
nearest_munitions_response_site_namestringName of the first munitions response site intersecting the radius.
nearest_munitions_response_site_statusstringIts status: investigation, cleanup, responseComplete or responseCompleteSiteCloseout.

asset_summary - response projects

FieldTypeDescription
response_projects_in_scopenumberResponse 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_radiusnumberThe stricter subset - response projects whose own published point falls inside the radius.
mmrp_munitions_projectsnumberMMRP (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_opennumberMMRP projects still in Investigation or Cleanup.
irp_contamination_projectsnumberIRP (Installation Restoration Program) projects in scope: chemical contamination, the classic Phase I recognised environmental condition.
irp_contamination_projects_opennumberIRP projects still in Investigation or Cleanup.
other_program_projectsnumberProjects under another recognised DERP programme code (bddr or tbd).
projects_investigationnumberProjects in Investigation.
projects_cleanupnumberProjects in Cleanup.
projects_response_completenumberProjects at Response Complete but NOT yet at site closeout.
projects_response_complete_and_site_closeoutnumberProjects at Response Complete and Site Closeout.
cost_to_complete_total_usdnumberSum of USACE cost-to-complete over projects that PUBLISHED a figure. Null when none did - never a fabricated zero.
cost_to_complete_reported_projectsnumberHow many in-scope projects published a cost-to-complete figure.
cost_to_complete_unreported_projectsnumberHow many did not. The total above covers only the reported ones.

asset_summary - evidence flags and per-source status

FieldTypeDescription
mmrp_munitions_evidencebooleantrue 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_evidencebooleantrue 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_fundednumberHow 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_statusstringok, unavailable or not_attempted for the FUDS property point layer.
boundary_polygon_source_statusstringok, unavailable or not_attempted for the FUDS property boundary polygon layer.
munitions_site_source_statusstringok, unavailable or not_attempted for the munitions response site layer.
response_project_source_statusstringok, unavailable or not_attempted for the response project layer.
sources_answerednumberHow many of the four FUDS layers answered. Anything below 4 nulls the screening level.
sources_failedstringSemicolon-separated names of the layers that did not answer.
query_completebooleantrue when the property read retrieved exactly the feature count the service reported - i.e. no silent truncation.

fuds_property rows

FieldTypeDescription
property_rank_by_distancenumber1 = nearest FUDS property to your point, ascending by distance.
property_idstringUSACE DoD FUDS property ID - the join key to projects and munitions response sites.
property_unique_numberstringUSACE FUDS unique property number.
installation_idstringUSACE FUDS installation ID, which can span several properties.
property_namestringUSACE property name.
property_descriptionstringUSACE narrative of the historical defense use - the raw material for a Phase I historical-use section.
property_latitudenumberUSACE representative latitude for the property, WGS84.
property_longitudenumberUSACE representative longitude for the property, WGS84.
distance_milesnumberGreat-circle distance from your point to the property point, in statute miles.
property_statestringTwo-letter state or territory code, lowercase as USACE publishes it.
property_countystringCounty recorded by USACE.
property_closest_citystringClosest city recorded by USACE.
property_congressional_districtstringCongressional district recorded by USACE.
property_epa_regionstringEPA region recorded by USACE.
eligibilitystringRaw USACE eligibility determination, or null where USACE published none.
eligibility_statestringNormalised eligibility state, including not_stated for the 463 properties USACE leaves blank.
property_statusstringUSACE property status string.
property_status_recognizedbooleanfalse when USACE published a status value this actor does not have in its closed vocabulary.
has_dod_funded_projectbooleanWhether DoD ever funded a response project here. false is a funding fact, not a cleanliness determination.
npl_statusstringNational Priorities List status as USACE states it.
current_ownerstringRaw USACE current-owner string, preserved verbatim.
current_owner_liststringIndividual owners parsed out of that string and semicolon-joined.
current_owner_categoriesstringOwner categories: federal, state, local, private, tribal or unclassified.
usace_districtstringUSACE district code.
usace_divisionstringUSACE division code.
property_fact_sheet_urlstringUSACE FUDS portal page for this property.
has_published_boundary_polygonbooleanWhether 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_statusstringStatus carried on the boundary polygon record: allCloseout, hasProjects or noProjects. Note this layer uses camelCase codes while the point layer uses prose.
boundary_polygon_ownerstringCurrent-owner string from the boundary polygon. This layer uses PLAIN CATEGORY NAMES, a different vocabulary from the point layer prefixes.
boundary_polygon_owner_categoriesstringOwner categories parsed from the polygon-layer vocabulary.
boundary_polygon_area_square_degreesnumberShape__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_projectsnumberResponse projects attached to this property.
project_statusesstringDistinct project statuses on this property, semicolon-joined.
project_namesstringProject names on this property, semicolon-joined.
project_restoration_categoriesstringDistinct USACE environmental restoration categories on this property.
project_cost_to_complete_total_usdnumberCost-to-complete summed over this property projects that published a figure.
earliest_response_complete_datestringEarliest response-complete date across this property projects, YYYY-MM-DD.
latest_site_closeout_datestringLatest site-closeout date across this property projects, YYYY-MM-DD.
munitions_response_sitesnumberMunitions response sites attached to this property that intersect your radius.
munitions_response_site_namesstringTheir names, semicolon-joined.

munitions_response_site rows

FieldTypeDescription
site_ranknumber1 = first munitions response site returned for this asset.
mrs_object_idnumberArcGIS OBJECTID of the munitions response site feature.
mrs_namestringUSACE name of the munitions response site.
mrs_official_site_namestringOfficial site name where USACE publishes one.
mrs_descriptionstringUSACE description of the munitions response site.
mrs_project_numberstringUSACE project number for the munitions response.
mrs_restoration_site_idstringUSACE environmental restoration site / munitions response area ID.
mrs_contains_asset_pointbooleantrue when THIS munitions response site polygon contains your point, as opposed to merely intersecting the radius.
derp_programstringDERP programme code. Every munitions response site is mmrp by definition.
derp_program_recognizedbooleanfalse when USACE published a programme code outside the service own declared domain.
mrs_project_categorystringUSACE project category (mmrp, mmrpCwm and similar). Null on 1,502 of 1,656 sites.
mrs_statusstringMRS status as a camelCase code: investigation, cleanup, responseComplete or responseCompleteSiteCloseout.
mrs_status_recognizedbooleanfalse when USACE published an MRS status outside the closed vocabulary.
mrs_response_openbooleantrue when the munitions response is still in Investigation or Cleanup. Null when the status was not recognised.
mrs_relative_prioritystringUSACE relative priority code where published. Null on most sites.
mrs_area_square_degreesnumberShape__Area in SQUARE DEGREES on a WGS84 layer, published as-is and never converted to acres.
mrs_statestringTwo-letter state or territory code, lowercase.
property_distance_milesnumberDistance from your point to the parent property point, where that property is inside the radius.
property_in_search_radiusbooleantrue 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:

  1. Property points within the radius (FUDS Property Points), post-filtered by haversine.
  2. Boundary intersect - point-in-polygon against FUDS Property Polygon, with distance/units absent entirely (distance=0 is not a PIP on ArcGIS).
  3. 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".
  4. Munitions response sites within the radius, plus a second intersect asking whether one contains your point.
  5. Response projects whose own point is in the radius.
  6. 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.

  • 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.