# NRHP Historic Place Screener — Section 106 & Tax Credit (`malonestar/nrhp-historic-place-screener`) Actor

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.

- **URL**: https://apify.com/malonestar/nrhp-historic-place-screener.md
- **Developed by:** [Kyle Maloney](https://apify.com/malonestar) (community)
- **Categories:** Agents, Developer tools, Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.40 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## National Register of Historic Places Screener — Section 106 & Historic Tax Credit

**Batch historic-property due-diligence for a list of coordinates.** Give it points (lat/lon), and for each one it screens the **National Register of Historic Places (NRHP)** — the official National Park Service inventory of ~95,000+ listed historic properties and thousands of historic districts — and returns whether the point is **on or near a listed historic property**, the **nearest listed property** (name, resource type, National Historic Landmark flag, NRIS reference number, National Archives document link) with its **distance in metres**, whether the point falls **inside a listed historic district** (authoritative point-in-polygon), plus two screening flags: **`section_106_review_likely`** (any federal permit / funding / license triggers NHPA Section 106 consultation) and **`historic_tax_credit_candidate`** (a listed income-producing building qualifies for the 20% federal Historic Rehabilitation Tax Credit).

One clean, billable row per asset — even when the point is clear of any listing (a useful "no historic constraint" result).

### Who it's for
- **Phase I ESA / environmental due-diligence consultants** — add a cultural-resources / historic-property line to a site assessment without hand-checking the NRHP for every parcel.
- **Section 106 / NEPA reviewers, infrastructure & energy developers** — flag federally-permitted or federally-funded project sites that sit on or near listed historic properties and will need SHPO/THPO consultation.
- **Real-estate developers, architects & CPAs** — spot income-producing listed buildings and buildings inside listed districts that may qualify for the 20% federal Historic Rehabilitation Tax Credit.
- **Title, land & GIS teams** — batch-enrich any address/parcel/coordinate list with authoritative historic-listing status, the nearest listing, and district containment without hosting the national dataset yourself.

### Example input
```json
{
  "assets": [
    { "lat": 47.6062, "lon": -122.3321, "label": "Seattle, WA (downtown historic core)", "radius": 1000 },
    { "lat": 39.0000, "lon": -101.5000, "label": "Rural Kansas (control)", "radius": 1000 }
  ],
  "maxAssets": 500,
  "defaultRadiusMeters": 1000
}
````

The first point returns `on_or_near_historic_property: true` with a nearby listed property and `section_106_review_likely: true`; the second returns a clean row (`on_or_near_historic_property: false`).

#### Verified sample run

A real 6-site run (2026-07-21, `radius: 1000` m) returned 6 rows and 0 errors:

| Asset | Nearest listed property | Distance | In district | Section 106 likely |
|---|---|---|---|---|
| Seattle, WA (downtown historic core) | Rainier Club | 31 m | false | true |
| Boston, MA (Beacon Hill) | Boston Transit Commission Building | 110.1 m | true | true |
| Charleston, SC (historic district) | St. Michael's Episcopal Church | 55.9 m | false | true |
| New Orleans, LA (French Quarter) | Cabildo, The | 98.7 m | true | true |
| Savannah, GA (landmark district) | U.S. Customhouse | 48.3 m | true | true |
| Rural Kansas (control) | no listing found | — | false | false |

Note that `in_historic_district` and proximity are independent signals: Seattle and Charleston sat close to a listed building without falling inside a listed district polygon, while the control point returned a clean, billable "no historic constraint" row rather than an error. This exact run is published as the actor's example task, so you can open it and re-run it as-is.

### Output fields (one row per asset)

`asset_label`, `asset_lat`, `asset_lon`, `radius_m`, `on_or_near_historic_property`, `in_historic_district`, `historic_district_name`, `historic_district_nris_ref`, `nearest_property_name`, `nearest_property_type`, `nearest_is_nhl`, `nearest_nris_ref`, `nearest_status`, `nearest_city`, `nearest_state`, `nearest_address`, `nearest_cert_date`, `nearest_nara_url`, `nearest_distance_m`, `listed_count_within_radius`, `national_historic_landmark_within_radius`, `section_106_review_likely`, `historic_tax_credit_candidate`, `nearby_properties`, `historic_districts`, `error`, `disclaimer`, `source_url`, `checked_at`.

`in_historic_district` is an **authoritative point-in-polygon** test against listed district boundaries. `nearest_distance_m` and `listed_count_within_radius` are proximity proxies computed with a haversine distance from each listing's mapped point (which NPS notes can be an approximate coordinate), so treat them as screening signals. `nearby_properties` lists up to 25 listed properties within the radius; `historic_districts` lists every listed district containing the point.

### Use as an MCP tool

This actor is callable by AI agents (Claude, Cursor, etc.) via [mcp.apify.com](https://mcp.apify.com). Its typed input (`assets[]{lat,lon,label,radius}`) and field-level output descriptions make it a clean, chainable "is this coordinate on or near a listed historic property, and does it trigger Section 106 or historic-tax-credit review?" tool for site-diligence, permitting, and real-estate agents.

### FAQ

**Is this coordinate a listed historic place?** Read `on_or_near_historic_property`, `in_historic_district`, and `nearest_distance_m`. A point inside a listed district returns `in_historic_district: true` with the district name and NRIS reference.

**What is the nearest listed historic property?** `nearest_property_name`, `nearest_property_type`, `nearest_nris_ref`, `nearest_is_nhl` (National Historic Landmark), `nearest_status`, `nearest_nara_url` (National Archives record), and `nearest_distance_m`.

**Will my project need a Section 106 review?** `section_106_review_likely` is true when the point is on or near a listed property. Under Section 106 of the National Historic Preservation Act, any federally permitted, funded, or licensed undertaking that could affect a listed (or eligible) historic property triggers consultation with the State/Tribal Historic Preservation Office. This flag is a screening indicator, not a legal determination.

**Could a building here qualify for the historic tax credit?** `historic_tax_credit_candidate` is true when the point is in a listed district or a listed building is within the radius. The 20% federal Historic Rehabilitation Tax Credit applies to certified historic structures that are income-producing buildings — confirm certification with the NPS and your tax advisor.

**How current / authoritative is it?** This is an **informational NRHP proximity screen**, not an official Section 106, SHPO/THPO, or tax-credit determination. NRHP listing is only one part of a historic-resources review (archaeological sites, eligible-but-unlisted properties, and local landmarks are not fully covered). Confirm with the State Historic Preservation Office and the National Park Service before any permitting, funding, acquisition, or rehabilitation decision.

### Related screeners

This actor is part of a family of single-coordinate federal due-diligence screeners that all take the same `assets[]{lat,lon,label}` input shape, so you can run several over the same site list and join the results per site.

- [Site Due Diligence Bundle](https://apify.com/malonestar/site-due-diligence-bundle) — 15 federal overlays for one coordinate in a single call.
- [Tribal Land Jurisdiction Screener](https://apify.com/malonestar/tribal-land-jurisdiction-screener) — reservation / trust land, and whether Section 106 routes through a THPO instead of the SHPO.
- [Wild & Scenic River Proximity Screener](https://apify.com/malonestar/wild-scenic-river-proximity-screener) — designated Wild & Scenic River corridors and Section 7 exposure.
- [EPA Contaminated Site Screener](https://apify.com/malonestar/epa-contaminated-site-screener) — nearest Superfund/NPL and contaminated sites, with a Phase I ESA flag.
- [FEMA National Risk Index County Risk Profile](https://apify.com/malonestar/fema-nri-county-risk-profile) — FEMA National Risk Index perils for the site's county and tract.

### Source

National Park Service — National Register of Historic Places, published on ArcGIS Online (keyless):

- Points (individual listings): `https://services2.arcgis.com/FiaPA4ga0iQKduv3/arcgis/rest/services/nrhp_points_v1/FeatureServer/0`
- Districts (polygons): `https://services3.arcgis.com/OYP7N6mAJJCyH6hd/arcgis/rest/services/NationalRegisterofHistoricPlaces_Polygon/FeatureServer/0`

# Actor input Schema

## `assets` (type: `array`):

List of points to screen against the National Register of Historic Places. Each item is an object with numeric lat and lon (WGS84 decimal degrees), an optional label, and an optional radius in metres (search radius for nearby listings; defaults to defaultRadiusMeters). One billable result row is returned per asset. Example: \[{"lat":47.6062,"lon":-122.3321,"label":"Seattle","radius":1000}].

## `defaultRadiusMeters` (type: `integer`):

Radius in metres used to look for nearby listed historic properties when an asset does not specify its own radius. Clamped to 50-50000.

## `maxAssets` (type: `integer`):

Maximum number of assets to screen from the assets list (safety cap). Extra assets beyond this are ignored.

## Actor input object example

```json
{
  "assets": [
    {
      "lat": 47.6062,
      "lon": -122.3321,
      "label": "Seattle, WA (downtown historic core)",
      "radius": 1000
    },
    {
      "lat": 39,
      "lon": -101.5,
      "label": "Rural Kansas (control)",
      "radius": 1000
    }
  ],
  "defaultRadiusMeters": 1000,
  "maxAssets": 500
}
```

# Actor output Schema

## `results` (type: `string`):

The default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "assets": [
        {
            "lat": 47.6062,
            "lon": -122.3321,
            "label": "Seattle, WA (downtown historic core)",
            "radius": 1000
        },
        {
            "lat": 39,
            "lon": -101.5,
            "label": "Rural Kansas (control)",
            "radius": 1000
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("malonestar/nrhp-historic-place-screener").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "assets": [
        {
            "lat": 47.6062,
            "lon": -122.3321,
            "label": "Seattle, WA (downtown historic core)",
            "radius": 1000,
        },
        {
            "lat": 39,
            "lon": -101.5,
            "label": "Rural Kansas (control)",
            "radius": 1000,
        },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("malonestar/nrhp-historic-place-screener").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "assets": [
    {
      "lat": 47.6062,
      "lon": -122.3321,
      "label": "Seattle, WA (downtown historic core)",
      "radius": 1000
    },
    {
      "lat": 39,
      "lon": -101.5,
      "label": "Rural Kansas (control)",
      "radius": 1000
    }
  ]
}' |
apify call malonestar/nrhp-historic-place-screener --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=malonestar/nrhp-historic-place-screener",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "NRHP Historic Place Screener — Section 106 & Tax Credit",
        "description": "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.",
        "version": "1.0",
        "x-build-id": "YD4xM2Lo1SdZYXntI"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/malonestar~nrhp-historic-place-screener/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-malonestar-nrhp-historic-place-screener",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/malonestar~nrhp-historic-place-screener/runs": {
            "post": {
                "operationId": "runs-sync-malonestar-nrhp-historic-place-screener",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/malonestar~nrhp-historic-place-screener/run-sync": {
            "post": {
                "operationId": "run-sync-malonestar-nrhp-historic-place-screener",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "assets": {
                        "title": "Assets (coordinates to screen)",
                        "type": "array",
                        "description": "List of points to screen against the National Register of Historic Places. Each item is an object with numeric lat and lon (WGS84 decimal degrees), an optional label, and an optional radius in metres (search radius for nearby listings; defaults to defaultRadiusMeters). One billable result row is returned per asset. Example: [{\"lat\":47.6062,\"lon\":-122.3321,\"label\":\"Seattle\",\"radius\":1000}]."
                    },
                    "defaultRadiusMeters": {
                        "title": "Default search radius (metres)",
                        "minimum": 50,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Radius in metres used to look for nearby listed historic properties when an asset does not specify its own radius. Clamped to 50-50000.",
                        "default": 1000
                    },
                    "maxAssets": {
                        "title": "Max assets",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum number of assets to screen from the assets list (safety cap). Extra assets beyond this are ignored.",
                        "default": 500
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
