NRHP Historic Place Screener — Section 106 & Tax Credit avatar

NRHP Historic Place Screener — Section 106 & Tax Credit

Pricing

from $4.40 / 1,000 results

Go to Apify Store
NRHP Historic Place Screener — Section 106 & Tax Credit

NRHP Historic Place Screener — Section 106 & Tax Credit

Screen coordinates against the National Register of Historic Places. Per asset: nearest listed property, National Historic Landmark flag, listed-district point-in-polygon, plus Section 106 review and 20% historic tax-credit screening flags.

Pricing

from $4.40 / 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

NRHP Historic Place Screener - Section 106 & Historic Tax Credit

Batch-screen coordinates against the National Register of Historic Places and get one clean row per site: is the point inside a listed historic district, what is the nearest currently-listed property, how many listings and National Historic Landmarks are within your radius, how many listed district boundaries sit nearby - plus screening flags for NHPA Section 106 consultation and the 20% federal Historic Rehabilitation Tax Credit.

Keyless. Two authoritative National Park Service (NPS Cultural Resources GIS) services, queried live on every run:

LayerWhat it isLive count (2026-08-01)
National_Register_of_Historic_Places_Pointsevery individual NRHP listing72,668
NatReg_HistoricPlaces_Polylisted historic-district / property boundaries19,371

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

v1.1 is a hardening release. Every change below fixes a case where v1.0 could bill you for a confident answer that was wrong or unverified. No output field was removed or renamed, and the price is unchanged.

  1. A failed lookup can no longer read as a clear. v1.0 initialised in_historic_district, on_or_near_historic_property, section_106_review_likely and historic_tax_credit_candidate to false. A 500 from the district service produced a billable row asserting "not in a historic district" that had never been checked. Every derived flag now starts null, and null means not checked while false means checked and negative. Each row carries points_status, districts_status and districts_near_status, and if every source fails for every asset the run fails and bills nothing.
  2. Live drift assertions run before any billable row. The single most dangerous failure on this data source is a dropped inSR=4326: the points layer stores Web Mercator, so an envelope query without inSR returns HTTP 200 and zero features - a false clear indistinguishable from a real one. Measured live at Pioneer Square, Seattle: 44 features with inSR=4326, 0 without. Every run now proves a positive canary (Pioneer Square must return listings and a containing "Pioneer Square" district polygon), a negative control (an open-Pacific point must return exactly 0), the layer names, geometry types, required fields, national feature counts inside a measured band, and the closed vocabularies. An unknown ResType / Status / Is_NHL code fails the run rather than being scored as if it were an old one.
  3. Properties removed from the Register are no longer counted as listed. 525 national records carry Status = "Removed". v1.0 counted them inside listed_count_within_radius and could name one as the "nearest listed historic property", which then drove section_106_review_likely true. They are now excluded from the listed counts and reported separately in removed_from_register_count_within_radius and nearest_removed_* - nothing fetched is discarded.
  4. Near-boundary districts are visible. Containment alone is not the whole answer. At this Actor's own former prefill coordinate (47.6062, -122.3321), point-in-polygon returns 0 districts while five listed districts - Pike Place Public Market, Seattle Chinatown and three Pioneer Square-Skid Road records - sit within 1,000 m. v1.1 adds a server-side buffered district query: districts_within_radius_count, nearest_district_within_radius_name and near_district_boundary.
  5. Projection drift is caught by magnitude, not by distance. A legitimately distant feature is not evidence of a projection fault. The guard tests |lon| <= 180 and |lat| <= 90 on returned geometry and reports points_reprojected_count.
  6. Truncation is reported, not absorbed. Page size is read from the service's own maxRecordCount (2,000) instead of being hard-coded, and points_truncated says so when the retrieval cap was hit.
  7. 51 new fields, including the NPS positional-accuracy metadata this data genuinely needs: nearest_boundary_type is "Arbitrary point" for 71,223 of 72,668 national points (98.0%), meaning the mapped coordinate is explicitly not a surveyed location.

Who this is for

  • Environmental / cultural-resources consultants preparing an NHPA Section 106 scoping memo for a federally permitted, funded or licensed undertaking, who need a defensible first pass over dozens or hundreds of coordinates.
  • Renewable-energy and infrastructure siting teams filtering candidate parcels before spending money on a SHPO consultation.
  • Real-estate developers and their tax counsel pre-qualifying buildings for the 20% federal Historic Rehabilitation Tax Credit - historic_tax_credit_candidate plus historic_district_* tells you in one row whether the property may be a certified historic structure.
  • Phase I ESA and due-diligence providers adding a historic-resources line to a site report.
  • AI agents doing site due diligence - see the MCP note below.

Example input

{
"assets": [
{ "lat": 47.6015, "lon": -122.3336, "label": "Pioneer Square, Seattle WA (inside a listed district)", "radius": 1000 },
{ "lat": 47.6062, "lon": -122.3321, "label": "Downtown Seattle WA (near five district boundaries)", "radius": 1000 },
{ "lat": 39.0, "lon": -101.5, "label": "Rural Kansas (genuine clear control)", "radius": 1000 }
],
"defaultRadiusMeters": 1000,
"maxAssets": 500
}

That is the prefilled input. Live on build 1.1.3 it returns three rows:

labelon_or_nearin_historic_districtdistricts_within_radius_countlisted_count_within_radiusnearest
Pioneer Squaretruetrue (Pioneer Square-Skid Road District (Boundary Increase), NPS unit Klondike Gold Rush NHP)442Iron Pergola, 43.2 m
Downtown Seattletruefalse but near_district_boundary: true561Rainier Club, 31.0 m
Rural Kansasfalsefalse00none

Input fields

FieldTypeRequiredDescription
assetsarrayyesPoints to screen. Each item: lat, lon (WGS84 decimal degrees), optional label, optional radius in metres (50-50,000). One billable row per asset.
defaultRadiusMetersintegernoRadius used when an asset omits its own. Default 1000, clamped 50-50,000.
maxAssetsintegernoSafety cap on how many assets are screened. Default 500, max 5,000.

Omitting assets returns HTTP 400 at run creation - the run never starts and nothing is billed.


Output fields

One row per screened asset. Every one of the 82 declared fields is listed here.

null on a flag always means the backing source did not answer, never the answer is no.

FieldTypeDescription
asset_labelstringnull
asset_latnumbernull
asset_lonnumbernull
radius_mintegernull
on_or_near_historic_propertybooleannull
in_historic_districtbooleannull
historic_district_namestringnull
historic_district_nris_refstringnull
nearest_property_namestringnull
nearest_property_typestringnull
nearest_is_nhlbooleannull
nearest_nris_refstringnull
nearest_statusstringnull
nearest_citystringnull
nearest_statestringnull
nearest_addressstringnull
nearest_cert_datestringnull
nearest_nara_urlstringnull
nearest_distance_mnumbernull
listed_count_within_radiusintegernull
national_historic_landmark_within_radiusbooleannull
section_106_review_likelybooleannull
historic_tax_credit_candidatebooleannull
nearby_propertiesarraynull
historic_districtsarraynull
errorstringnull
disclaimerstringnull
source_urlstringnull
checked_atstringnull
points_statusstringnull
points_errorstringnull
districts_statusstringnull
districts_errorstringnull
districts_near_statusstringnull
districts_near_errorstringnull
sources_ok_countintegernull
sources_total_countintegernull
partial_resultbooleannull
points_examined_countintegernull
points_truncatedbooleannull
points_page_sizeintegernull
points_reprojected_countintegernull
on_or_near_basisstringnull
section_106_basisstringnull
historic_tax_credit_basisstringnull
nearest_distance_bandstringnull
nearest_countystringnull
nearest_property_idstringnull
nearest_vicinitystringnull
nearest_multiple_property_listingstringnull
nearest_is_extantstringnull
nearest_boundary_typestringnull
nearest_boundary_notestringnull
nearest_map_methodstringnull
nearest_source_accuracystringnull
nearest_source_scalestringnull
nearest_source_datestringnull
nearest_edit_datestringnull
nearest_contributing_resourcesintegernull
nearest_is_district_listingbooleannull
removed_from_register_count_within_radiusintegernull
nearest_removed_property_namestringnull
nearest_removed_nris_refstringnull
nearest_removed_distance_mnumbernull
historic_district_countintegernull
historic_district_boundary_typestringnull
historic_district_contributing_statusstringnull
historic_district_is_extantstringnull
historic_district_restrictionstringnull
historic_district_source_accuracystringnull
historic_district_nps_unitstringnull
historic_district_edit_datestringnull
districts_within_radius_countintegernull
nearest_district_within_radius_namestringnull
nearest_district_within_radius_nris_refstringnull
near_district_boundarybooleannull
districts_within_radiusarraynull
nhl_count_within_radiusintegernull
listed_buildings_within_radiusintegernull
data_vintage_max_edit_datestringnull
source_url_districtsstringnull
actor_versionstringnull

Fields that are legitimately null on a healthy run

A dead-column audit over the FULL dataset of a live run with the schema prefill (build 1.1.3) leaves exactly eight fields null, and every one of them is null for a good reason. Each is pinned by an offline fixture, and each has a verified live input that populates it:

Field(s)Why null on the prefillVerified populating input
points_error, districts_error, districts_near_error, errorall three sources answered - this is good news, not a dead columnany run during an upstream outage; covered by fault-injection fixtures in offline.test.js
nearest_multiple_property_listingmost listings do not belong to a Multiple Property Submission{"lat":34.73856,"lon":-92.26520,"radius":300} -> "Thompson, Charles L., Design Collection TR"
nearest_removed_property_name, nearest_removed_nris_ref, nearest_removed_distance_monly 525 of 72,668 national records are removed from the Register{"lat":34.73856,"lon":-92.26520,"radius":300} (Little Rock, AR) -> "Memorial to Company A, Capitol Guards", NRIS 96000451, 0.3 m

historic_district_* fields are null when the point is not inside a listed district - the prefill deliberately includes Pioneer Square so they populate on every auto-QA run.


Use as an MCP tool

This Actor is available to AI agents through mcp.apify.com. It is a good chainable tool because it takes plain coordinates and returns a flat, self-describing row: on_or_near_historic_property for the yes/no, on_or_near_basis for why, and points_status / districts_status / districts_near_status so an agent can tell a verified negative from an unanswered one. Chain it after a geocoder and alongside the other screeners listed below to build a full site-constraints picture.

Pricing

$8 per 1,000 results (pay-per-event, one Result event per screened asset). Graduated discounts apply on paid Apify plans. There are no other charge events.

Billing honesty: if every asset fails against every source the run fails and emits nothing, so you are not billed for an outage. The billing gate runs before any row is pushed.

FAQ

Does in_historic_district: false mean the site is not in a historic district? No. It means the point is not inside any boundary in the NPS listed-district polygon layer. That layer does not cover every listed district. Always read districts_within_radius_count and near_district_boundary alongside it - at the Seattle prefill point containment is false while five listed districts sit within 1,000 m.

How accurate are the distances? nearest_distance_m is a great-circle distance to each listing's mapped point. nearest_boundary_type is "Arbitrary point" for 98.0% of national records and nearest_source_accuracy typically reads "+/- 12 meters", so treat distances as indicative. Both fields ship on every row so you can judge for yourself.

Is this a Section 106 determination? No. section_106_review_likely is a screening indicator that a federally permitted, funded or licensed undertaking would likely trigger consultation. Only the SHPO/THPO and the responsible federal agency can make the determination.

Is this tax advice? No. historic_tax_credit_candidate screens for the possibility of a 20% federal Historic Rehabilitation Tax Credit on an income-producing certified historic structure. Certification is an NPS/IRS process; consult tax counsel.

Why did my run fail with "LIVE DRIFT CHECK FAILED"? Because the NPS service no longer matches what this Actor was verified against - a renamed layer, a changed vocabulary, or a canary that stopped returning known-good data. A loud failure is the correct answer there: the alternative is a plausible screening result computed from a source that has silently changed. Nothing is billed on a failed run.

What about archaeological sites? Not covered - NPS restricts those locations. NRHP listing is one part of a historic-resources review, and eligible-but-unlisted properties and local landmarks are outside this dataset entirely.

  • Site Due Diligence Bundle - 20 federal constraint layers for one coordinate, including this historic-place screen.
  • Tribal Land Jurisdiction Screener - the THPO side of a Section 106 consultation.
  • EPA Contaminated Site Screener - Phase I ESA environmental records.
  • FWS Critical Habitat Screener / NOAA EFH Consultation Screener - the ESA and Magnuson-Stevens consultation triggers that usually run alongside Section 106.

Informational screening tool built on public National Park Service data. Not an official Section 106, SHPO/THPO, or tax-credit determination, and not legal or tax advice. Confirm with the State Historic Preservation Office and the National Park Service before any permitting, funding, acquisition or rehabilitation decision.