NRHP Historic Place Screener — Section 106 & Tax Credit
Pricing
from $4.40 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
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:
| Layer | What it is | Live count (2026-08-01) |
|---|---|---|
National_Register_of_Historic_Places_Points | every individual NRHP listing | 72,668 |
NatReg_HistoricPlaces_Poly | listed historic-district / property boundaries | 19,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.
- A failed lookup can no longer read as a clear. v1.0 initialised
in_historic_district,on_or_near_historic_property,section_106_review_likelyandhistoric_tax_credit_candidatetofalse. 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 startsnull, andnullmeans not checked whilefalsemeans checked and negative. Each row carriespoints_status,districts_statusanddistricts_near_status, and if every source fails for every asset the run fails and bills nothing. - 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 withoutinSRreturns HTTP 200 and zero features - a false clear indistinguishable from a real one. Measured live at Pioneer Square, Seattle: 44 features withinSR=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 unknownResType/Status/Is_NHLcode fails the run rather than being scored as if it were an old one. - Properties removed from the Register are no longer counted as listed. 525
national records carry
Status = "Removed". v1.0 counted them insidelisted_count_within_radiusand could name one as the "nearest listed historic property", which then drovesection_106_review_likelytrue. They are now excluded from the listed counts and reported separately inremoved_from_register_count_within_radiusandnearest_removed_*- nothing fetched is discarded. - 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_nameandnear_district_boundary. - Projection drift is caught by magnitude, not by distance. A legitimately distant
feature is not evidence of a projection fault. The guard tests
|lon| <= 180and|lat| <= 90on returned geometry and reportspoints_reprojected_count. - Truncation is reported, not absorbed. Page size is read from the service's own
maxRecordCount(2,000) instead of being hard-coded, andpoints_truncatedsays so when the retrieval cap was hit. - 51 new fields, including the NPS positional-accuracy metadata this data
genuinely needs:
nearest_boundary_typeis"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_candidateplushistoric_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:
| label | on_or_near | in_historic_district | districts_within_radius_count | listed_count_within_radius | nearest |
|---|---|---|---|---|---|
| Pioneer Square | true | true (Pioneer Square-Skid Road District (Boundary Increase), NPS unit Klondike Gold Rush NHP) | 4 | 42 | Iron Pergola, 43.2 m |
| Downtown Seattle | true | false but near_district_boundary: true | 5 | 61 | Rainier Club, 31.0 m |
| Rural Kansas | false | false | 0 | 0 | none |
Input fields
| Field | Type | Required | Description |
|---|---|---|---|
assets | array | yes | Points to screen. Each item: lat, lon (WGS84 decimal degrees), optional label, optional radius in metres (50-50,000). One billable row per asset. |
defaultRadiusMeters | integer | no | Radius used when an asset omits its own. Default 1000, clamped 50-50,000. |
maxAssets | integer | no | Safety 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.
| Field | Type | Description |
|---|---|---|
asset_label | string | null |
asset_lat | number | null |
asset_lon | number | null |
radius_m | integer | null |
on_or_near_historic_property | boolean | null |
in_historic_district | boolean | null |
historic_district_name | string | null |
historic_district_nris_ref | string | null |
nearest_property_name | string | null |
nearest_property_type | string | null |
nearest_is_nhl | boolean | null |
nearest_nris_ref | string | null |
nearest_status | string | null |
nearest_city | string | null |
nearest_state | string | null |
nearest_address | string | null |
nearest_cert_date | string | null |
nearest_nara_url | string | null |
nearest_distance_m | number | null |
listed_count_within_radius | integer | null |
national_historic_landmark_within_radius | boolean | null |
section_106_review_likely | boolean | null |
historic_tax_credit_candidate | boolean | null |
nearby_properties | array | null |
historic_districts | array | null |
error | string | null |
disclaimer | string | null |
source_url | string | null |
checked_at | string | null |
points_status | string | null |
points_error | string | null |
districts_status | string | null |
districts_error | string | null |
districts_near_status | string | null |
districts_near_error | string | null |
sources_ok_count | integer | null |
sources_total_count | integer | null |
partial_result | boolean | null |
points_examined_count | integer | null |
points_truncated | boolean | null |
points_page_size | integer | null |
points_reprojected_count | integer | null |
on_or_near_basis | string | null |
section_106_basis | string | null |
historic_tax_credit_basis | string | null |
nearest_distance_band | string | null |
nearest_county | string | null |
nearest_property_id | string | null |
nearest_vicinity | string | null |
nearest_multiple_property_listing | string | null |
nearest_is_extant | string | null |
nearest_boundary_type | string | null |
nearest_boundary_note | string | null |
nearest_map_method | string | null |
nearest_source_accuracy | string | null |
nearest_source_scale | string | null |
nearest_source_date | string | null |
nearest_edit_date | string | null |
nearest_contributing_resources | integer | null |
nearest_is_district_listing | boolean | null |
removed_from_register_count_within_radius | integer | null |
nearest_removed_property_name | string | null |
nearest_removed_nris_ref | string | null |
nearest_removed_distance_m | number | null |
historic_district_count | integer | null |
historic_district_boundary_type | string | null |
historic_district_contributing_status | string | null |
historic_district_is_extant | string | null |
historic_district_restriction | string | null |
historic_district_source_accuracy | string | null |
historic_district_nps_unit | string | null |
historic_district_edit_date | string | null |
districts_within_radius_count | integer | null |
nearest_district_within_radius_name | string | null |
nearest_district_within_radius_nris_ref | string | null |
near_district_boundary | boolean | null |
districts_within_radius | array | null |
nhl_count_within_radius | integer | null |
listed_buildings_within_radius | integer | null |
data_vintage_max_edit_date | string | null |
source_url_districts | string | null |
actor_version | string | null |
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 prefill | Verified populating input |
|---|---|---|
points_error, districts_error, districts_near_error, error | all three sources answered - this is good news, not a dead column | any run during an upstream outage; covered by fault-injection fixtures in offline.test.js |
nearest_multiple_property_listing | most 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_m | only 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.
Related Actors
- 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.