# England Listed Building & Conservation Area Check (`japan-open-data/england-heritage-constraint-lookup`) Actor

Check England postcodes or lat/long for nearby listed buildings (Grade I, II\*, II), conservation areas, article 4 directions, scheduled monuments and World Heritage Sites. Official Historic England and government open data, no API key. Bulk 1,000 per run, JSON via API or MCP. $5/1,000 checks.

- **URL**: https://apify.com/japan-open-data/england-heritage-constraint-lookup.md
- **Developed by:** [Japan Open Data](https://apify.com/japan-open-data) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 heritage checks

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## England Listed Building & Conservation Area Check

Check the official heritage constraints on any address in England by **UK postcode** or **latitude/longitude**, in bulk. Each location returns one flat JSON row: how many **listed buildings** (Grade I, II\*, II) are within your radius, which one is nearest, and whether the point sits in a **conservation area**, an **article 4 direction area**, a **scheduled monument**, a **registered park and garden**, a **registered battlefield**, a **protected wreck site** or a **World Heritage Site**.

Screen up to 1,000 properties per run for $5 per 1,000 heritage checks — official Historic England and UK government open data, no API key, no login, no personal data, ready for the Apify API and MCP (AI agents).

- **Listed buildings near the point:** the total within your radius plus the count by grade (I / II\* / II), and the nearest one with its name, grade, listing date, National Heritage List entry number, distance in metres and official Historic England page.
- **Conservation areas:** whether the point is inside a conservation area, its name, and a link to the council's own conservation area page where the council publishes one. Conservation areas are designated by local councils, so they are **not** in the National Heritage List — this Actor adds them from the government's Planning Data Platform.
- **Article 4 direction areas:** whether the point is inside an area where permitted development rights have been withdrawn (so even minor changes may need planning permission).
- **Other national designations:** scheduled monuments, registered parks and gardens, registered battlefields, protected wreck sites and World Heritage Sites — both "the point is inside one" and "there is one within the radius".
- **Bulk heritage screening:** up to 1,000 postcodes or coordinates per run, each with your own label, one row per location in input order. Built for property lists, site shortlists and portfolios.
- **Honest about gaps:** a separate `conservationAreaDataNearby` flag tells you when a council has not published its conservation area boundaries, instead of silently answering "not in a conservation area". Revoked article 4 directions are excluded.
- **Official open data:** Historic England's National Heritage List for England (NHLE, updated daily) and the Ministry of Housing, Communities and Local Government's Planning Data Platform, both under the Open Government Licence v3.0. Rows for invalid, unknown and non-England inputs are not charged.

| | Free official maps (Historic England, council maps) | Paid planning / local authority search | **This Actor** |
|---|---|---|---|
| Listed buildings with grade, list entry and distance | One address at a time, by hand | Yes | **Yes, up to 1,000 locations per run** |
| Conservation area and article 4 | A separate council map for each area | Yes | **Yes, from the national Planning Data Platform** |
| Scheduled monuments, parks and gardens, battlefields, wrecks, World Heritage Sites | Yes, by hand | Usually | **Yes** |
| Output | Web map | PDF report | **Flat JSON / CSV / Excel, API and MCP** |
| Price | Free, but manual | About £42–£75+ per property (e.g. Landmark Planning £42, Plansearch Plus £72, local authority search from £74.50) | **$0.005 per location** |
| Legal search for a transaction | No | **Yes** | No — screening only |

### What can you do with England Listed Building & Conservation Area Check?

1. **Conveyancers, surveyors and property lawyers.** Flag the listed buildings and conservation areas around a property before you order the full local authority search, and attach the National Heritage List entry links to your file.
2. **Architects, builders, solar and retrofit companies.** Listed building consent, conservation area consent and article 4 directions change what you can install and how much a job costs. Check a whole sales pipeline of addresses in one run instead of one at a time.
3. **Developers, investors and land teams — site screening.** Rank candidate sites by heritage risk: how many Grade I / II\* assets sit within 250 m, whether the site is inside a World Heritage Site or a scheduled monument.
4. **AI agents and chatbots.** Answer "Is this address listed or in a conservation area?" with one call and a ready-made one-sentence `heritageSummary`.

> **Screening data, not a heritage or local authority search.** This Actor returns public map data. It is **not** a conveyancing search, listed building consent advice, or confirmation that an individual building is or is not listed. See "Data source, attribution and caveats".

### How to use it

1. Click **Start** to try the default input (Bath Abbey Church Yard and Stonehenge).
2. Paste your postcodes or `"lat,long"` strings (up to 1,000), optionally with a `label` each.
3. Download the rows as JSON, CSV or Excel, or call the Actor via the API or MCP (see below).

### Input

Only `locations` is required.

| Input | Type | Default | What it does |
|---|---|---|---|
| `locations` | list | `["BA1 1LT", "51.1789,-1.8262"]` | UK postcodes (`"BA1 1LT"`, any spacing or case) and/or `"latitude,longitude"` strings. Via the API also objects `{"postcode": "BA1 1LT", "label": "Listing 1042"}` or `{"latitude": 51.1789, "longitude": -1.8262, "label": "Site A"}`. Up to 1,000 per run. |
| `radiusMeters` | integer | `250` | How far to look for listed buildings, scheduled monuments, parks and gardens, battlefields, wrecks and World Heritage Sites (10–1,000 m). Conservation areas and article 4 areas are always tested at the point itself. |
| `maxListedBuildings` | integer | `20` | How many nearby listed buildings to name in `listedBuildingsNearby`, nearest first (1–50). Counts are always complete. |

**Coverage: England only.** Welsh, Scottish and Northern Irish postcodes and coordinates return an `error` row that is not charged (Wales is covered by Cadw, Scotland by Historic Environment Scotland, Northern Ireland by the Department for Communities).

**Postcodes are checked at the postcode centroid** (a single point from the ONS Postcode Directory). A postcode can cover several buildings, and a conservation area boundary may run through it. For a specific building, pass its latitude/longitude.

#### Input example

```json
{
  "locations": [
    { "postcode": "BA1 1LT", "label": "Listing 1042" },
    "51.1789,-1.8262",
    "MK9 3QA"
  ],
  "radiusMeters": 250
}
```

### Output

#### Output example

Real output from the input above (run on 2026-09-23). The first row (shortened `listedBuildingsNearby`):

```json
{
  "status": "ok",
  "input": "{\"postcode\": \"BA1 1LT\", \"label\": \"Listing 1042\"}",
  "label": "Listing 1042",
  "postcode": "BA1 1LT",
  "latitude": 51.381148,
  "longitude": -2.358279,
  "adminDistrict": "Bath and North East Somerset",
  "searchRadiusMeters": 250,
  "insideDesignatedArea": true,
  "anyHeritageWithinRadius": true,
  "designationsOnSite": "World Heritage Site; Conservation Area",
  "heritageSummary": "The point is inside: World Heritage Site (City of Bath), Conservation Area (Bath); 206 listed building(s) within 250 m, nearest 9-13, KINGSTON PARADE (Grade II, 7 m); within 250 m: Scheduled Monument, Registered Park and Garden.",
  "listedBuildingCount": 206,
  "listedBuildingGradeICount": 30,
  "listedBuildingGradeIIStarCount": 25,
  "listedBuildingGradeIICount": 151,
  "nearestListedBuildingName": "9-13, KINGSTON PARADE",
  "nearestListedBuildingGrade": "II",
  "nearestListedBuildingDistanceMeters": 7,
  "nearestListedBuildingListEntry": 1394079,
  "nearestListedBuildingListDate": "1972-08-11",
  "nearestListedBuildingUrl": "https://historicengland.org.uk/listing/the-list/list-entry/1394079",
  "listedBuildingsNearby": "9-13, KINGSTON PARADE (Grade II, 7 m); 11A AND 12-15, YORK STREET (Grade II, 9 m); ADVENT CHURCH (ORANGE GROVE HALL) (Grade II, 18 m); ...",
  "scheduledMonumentOnSite": false,
  "scheduledMonumentsWithinRadius": 3,
  "scheduledMonumentName": "The Roman Baths and site of Roman town, Bath",
  "scheduledMonumentListEntry": 1004678,
  "scheduledMonumentUrl": "https://historicengland.org.uk/listing/the-list/list-entry/1004678",
  "registeredParkGardenOnSite": false,
  "registeredParksGardensWithinRadius": 1,
  "registeredParkGardenName": "PARADE GARDENS, BATH",
  "registeredParkGardenGrade": "II",
  "registeredParkGardenListEntry": 1001630,
  "registeredParkGardenUrl": "https://historicengland.org.uk/listing/the-list/list-entry/1001630",
  "battlefieldOnSite": false,
  "battlefieldsWithinRadius": 0,
  "battlefieldName": null,
  "protectedWreckOnSite": false,
  "protectedWrecksWithinRadius": 0,
  "worldHeritageSiteOnSite": true,
  "worldHeritageSitesWithinRadius": 1,
  "worldHeritageSiteName": "City of Bath",
  "worldHeritageSiteListEntry": 1000103,
  "worldHeritageSiteUrl": "https://historicengland.org.uk/listing/the-list/list-entry/1000103",
  "conservationAreaOnSite": true,
  "conservationAreaName": "Bath",
  "conservationAreaUrl": "https://www.planning.data.gov.uk/entity/44006636",
  "conservationAreaDocumentationUrl": "https://beta.bathnes.gov.uk/view-conservation-area-character-appraisals",
  "conservationAreaDataNearby": true,
  "article4DirectionAreaOnSite": false,
  "article4DirectionAreaName": null,
  "dataObtained": "2026-09-23",
  "note": null
}
```

All three rows from the same run:

| Input | Listed buildings within 250 m | Nearest | Conservation area | Other designations on site |
|---|---|---|---|---|
| BA1 1LT (Listing 1042) | 206 (30 Grade I, 25 Grade II\*, 151 Grade II) | 9-13, Kingston Parade (II), 7 m | Bath | World Heritage Site (City of Bath) |
| 51.1789,-1.8262 (Stonehenge) | 2 | Milestone opposite Stonehenge (II), 81 m | — | Scheduled Monument, World Heritage Site, Article 4 Direction Area |
| MK9 3QA (Milton Keynes) | 0 | — | — | Article 4 Direction Area (HIMO) |

Unknown postcodes, places outside England and invalid input return one row that says what to change. These rows are **not charged** (only the per-run start fee applies). Real output:

```json
{"status": "error", "input": "CF10 1EP", "label": null, "postcode": "CF10 1EP", "error": "Location #4 (CF10 1EP) is in Wales; this Actor covers England only (Wales is covered by Cadw)."}
{"status": "not_found", "input": "ZZ9 9ZZ", "label": null, "postcode": "ZZ9 9ZZ", "error": "Postcode ZZ9 9ZZ was not found in the current ONS Postcode Directory (it may be mistyped, new or terminated); check it or pass \"latitude,longitude\" instead."}
```

#### Output fields

| Field | Meaning |
|---|---|
| `status` | `ok`, `not_found` or `error` |
| `input`, `label` | What you passed, and your label |
| `postcode`, `latitude`, `longitude`, `adminDistrict` | Normalised postcode (if given), the point that was checked, and the local authority |
| `searchRadiusMeters` | The radius used for this row |
| `insideDesignatedArea` | `true` when the point itself is inside a conservation area, article 4 direction area, scheduled monument, registered park and garden, registered battlefield, protected wreck site or World Heritage Site |
| `anyHeritageWithinRadius` | `true` when anything at all was found: a designation covering the point, or any listed building / designated area within the radius. In most English town centres some listed building is within 250 m, so use `insideDesignatedArea` and the distances for decisions |
| `designationsOnSite` | The designations that cover the point itself, e.g. `"World Heritage Site; Conservation Area"` |
| `heritageSummary` | One English sentence summarising the row (handy for AI agents and reports) |
| `listedBuildingCount`, `listedBuildingGradeICount`, `listedBuildingGradeIIStarCount`, `listedBuildingGradeIICount` | Listed buildings within the radius, in total and by grade |
| `nearestListedBuildingName`, `...Grade`, `...DistanceMeters`, `...ListEntry`, `...ListDate`, `...Url` | The nearest listed building: name, grade, distance in metres, National Heritage List entry number, date first listed and its official page |
| `listedBuildingsNearby` | Up to `maxListedBuildings` nearby listed buildings as `Name (Grade, distance)`, nearest first |
| `conservationAreaOnSite`, `conservationAreaName`, `conservationAreaUrl`, `conservationAreaDocumentationUrl` | Whether the point is inside a conservation area, its name, its record on planning.data.gov.uk and the council's own page |
| `conservationAreaDataNearby` | `true` when the national dataset has at least one conservation area within about 5 km of the point. `false` means the council has probably not published its boundaries (for example Cheshire West and Chester in September 2026), so `conservationAreaOnSite: false` cannot be trusted for that row — `heritageSummary` then says so |
| `article4DirectionAreaOnSite`, `article4DirectionAreaName`, `article4DirectionAreaUrl`, `article4DirectionAreaDocumentationUrl` | The same for article 4 direction areas (permitted development rights withdrawn). Only directions currently in force; revoked ones are excluded |
| `scheduledMonumentOnSite`, `scheduledMonumentsWithinRadius`, `scheduledMonumentName`, `scheduledMonumentListEntry`, `scheduledMonumentUrl` | Scheduled monuments: on the point, and how many are within the radius |
| `registeredParkGardenOnSite`, `registeredParksGardensWithinRadius`, `registeredParkGardenName`, `registeredParkGardenGrade`, `registeredParkGardenListEntry`, `registeredParkGardenUrl` | Registered parks and gardens (these also have grades I / II\* / II) |
| `battlefieldOnSite`, `battlefieldsWithinRadius`, `battlefieldName`, `battlefieldListEntry`, `battlefieldUrl` | Registered battlefields (47 in England) |
| `protectedWreckOnSite`, `protectedWrecksWithinRadius`, `protectedWreckName`, `protectedWreckListEntry`, `protectedWreckUrl` | Protected wreck sites (57) |
| `worldHeritageSiteOnSite`, `worldHeritageSitesWithinRadius`, `worldHeritageSiteName`, `worldHeritageSiteListEntry`, `worldHeritageSiteUrl` | World Heritage Sites (28) |
| `locationSource`, `source`, `attribution`, `dataObtained`, `sourceUrl` | Where the point and the heritage data come from, the attribution you must pass on, the date the data was obtained, and the exact Historic England request used |
| `note` | Set when more listed buildings are in the radius than the Actor lists (counts stay complete) |
| `error` | On `not_found` / `error` rows: one sentence explaining what to change |

### How much does a heritage check cost?

This Actor uses **Pay per event** pricing — you pay per location checked, not for compute time:

| Event | Price | When it is charged |
|---|---|---|
| Actor start | $0.001 | Once per run (charged by Apify on every run, including runs where every input is invalid) |
| Heritage check (`result-row`) | $0.005 ($5 per 1,000) | Once per `ok` row (one location checked). `not_found` and `error` rows are **not charged** |

| Example | Locations | Cost per run |
|---|---|---|
| One address ("Is this property listed?") | 1 | $0.006 |
| A buyer's shortlist | 20 | $0.101 |
| A portfolio or a day of new listings | 1,000 | $5.001 |

For comparison, a planning report that covers listed buildings and conservation areas costs £42 (Landmark Planning) to £72 (Plansearch Plus) per property, and the local authority search in an English conveyancing transaction from about £75 — this Actor is the screening step before you decide which properties need one. There is no monthly fee and no minimum.

Use the **maximum cost per run** option when you start the Actor to cap spending. If the limit is reached, the Actor stops before checking further locations (they are not looked up or charged) and says so in the status message.

### Use via API & MCP (AI agents)

**Apify API (HTTP).** Run the Actor and get the rows in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/japan-open-data~england-heritage-constraint-lookup/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"locations": ["BA1 1LT", "MK9 3QA", "51.5055,-0.0754"]}'
```

**Python (apify-client):**

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
listings = [{"postcode": "BA1 1LT", "label": "1042"}, {"postcode": "YO1 9WP", "label": "1043"}]
run = client.actor("japan-open-data/england-heritage-constraint-lookup").call(run_input={"locations": listings})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row["label"], row["status"], row.get("listedBuildingCount"), row.get("conservationAreaName"), row.get("error"))
```

**MCP (Claude, ChatGPT, Cursor and other AI agents).** Add this Actor as a tool through the Apify MCP server (https://mcp.apify.com), for example with `?tools=japan-open-data/england-heritage-constraint-lookup`. Only `locations` is required, so an agent can call it with `{"locations": ["<postcode>"]}`.

Recommended agent settings:

- "Is this address listed or in a conservation area?" → `{"locations": ["<postcode>"]}` and read `heritageSummary`. For a yes/no, use `insideDesignatedArea` and `conservationAreaOnSite`, not `anyHeritageWithinRadius` (in most town centres some listed building is within 250 m).
- If `conservationAreaDataNearby` is `false`, tell the user the council has not published conservation area boundaries and they should check with the council.
- Many properties at once → pass all of them in one run (up to 1,000), each with a `label`, and match rows back by `label`.
- Wider context (a whole street or site) → raise `radiusMeters` to 500 or 1,000.
- Always check `status`; on `not_found` / `error` show the `error` sentence to the user. Remind users that a listed building is identified by a single official point, so "no listed building within 250 m" is not proof that a specific building is unlisted.

### FAQ

**Can I use this instead of a local authority search or a heritage consultant?**
No. It returns public, national map data for screening. For a transaction, a planning application or a consent decision, use the local authority search and the official National Heritage List entry.

**Does `listedBuildingCount = 0` mean my building is definitely not listed?**
It means no listed building's official point falls within your radius. Historic England publishes a single point (and, for listings since April 2011, a mapped extent) for each of the 379,685 entries, so always confirm an individual building on its National Heritage List entry page.

**Why are conservation areas not part of the National Heritage List?**
Conservation areas are designated by local councils, not by Historic England, so they are published separately. This Actor takes them (and article 4 direction areas) from the government's Planning Data Platform, which collects council boundaries into one national dataset.

**Are all conservation areas included?**
The national dataset held 10,953 conservation areas and 7,373 article 4 direction areas (7,338 still in force) when this Actor was built. Most English councils have published their boundaries there, but some have not — for example, no conservation area was published within 5 km of Chester city centre in September 2026. Every row therefore carries `conservationAreaDataNearby`: when it is `false`, treat `conservationAreaOnSite: false` as "unknown" and check with the council.

**Does it include article 4 directions that have been cancelled?**
No. Only directions currently in force are returned; the 35 revoked ones in the national dataset are filtered out.

**Is it legal to use this data commercially?**
Yes. Both sources are published under the Open Government Licence v3.0, which allows commercial use and re-use as long as you keep the attribution. Every row carries the exact attribution text in `attribution`.

**Can I check hundreds of postcodes at once?**
Yes — up to 1,000 postcodes or coordinates per run, each with an optional `label`. You get one row per location, in input order, so you can join the results back to your spreadsheet.

**Does it cover Wales, Scotland or Northern Ireland?**
No. Those locations return an `error` row that is not charged. Tell us on the Issues tab if you need them.

**How fresh is the data?**
Every run queries the live published services. Historic England updates the National Heritage List daily; the Planning Data Platform is updated as councils publish.

### Data source, attribution and caveats

- **Listed buildings, scheduled monuments, registered parks and gardens, registered battlefields, protected wreck sites, World Heritage Sites:** Historic England, *National Heritage List for England (NHLE)*, the only official register of nationally protected historic buildings and sites in England. https://historicengland.org.uk/listing/the-list/
- **Attribution (Historic England data):** © Historic England 2026. Contains Ordnance Survey data © Crown copyright and database right 2026. Licensed under the [Open Government Licence v3.0](https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/). Under the [Historic England Open Data Hub terms](https://historicengland.org.uk/terms/website-terms-conditions/open-data-hub/), **if you pass this data on you must include the same attribution and require anyone you pass it to do the same.**
- **Currency:** the `dataObtained` field on every row is the date the data was read. The most up-to-date Historic England data can always be obtained from HistoricEngland.org.uk.
- **Conservation areas and article 4 direction areas:** Planning Data Platform, Ministry of Housing, Communities and Local Government. https://www.planning.data.gov.uk/dataset/conservation-area and https://www.planning.data.gov.uk/dataset/article-4-direction-area — both published with `licence: ogl3`. Contains public sector information licensed under the Open Government Licence v3.0.
- **Postcodes:** postcode centroids via [postcodes.io](https://postcodes.io) from the ONS Postcode Directory. Contains OS data © Crown copyright and database right; Contains Royal Mail data © Royal Mail copyright and database right; Source: Office for National Statistics licensed under the Open Government Licence v3.0. Northern Ireland (BT) postcodes are not looked up.
- **England check for coordinates:** ONS Countries (December 2024) Boundaries UK BUC. Source: Office for National Statistics licensed under the Open Government Licence v3.0.
- **Spatial data shows location only.** Historic England states that its spatial data is provided solely to indicate the location of an asset, and that a listed building polygon shows the principal building and **does not define the curtilage** (the wider area that listing protection can extend to). Boundaries are indicative.
- **Licensed "as is".** Historic England excludes all warranties and is not liable for errors, omissions or decisions made on the basis of this data. The same applies to this Actor.
- **Not affiliated:** this Actor is an independent project and is **not affiliated with, endorsed by or sponsored by Historic England, MHCLG, Ordnance Survey, ONS or postcodes.io**. Using this data does not suggest any official status.
- **Access:** the Actor uses only the published Historic England ArcGIS FeatureServer and the public planning.data.gov.uk and postcodes.io APIs, about 9–13 small requests per location, at most 6 requests in flight, and identifies itself in the User-Agent.
- **No personal data:** only the names, grades, dates and reference numbers of designated heritage assets, and the postcodes/points you provide. Owner and occupier names are not in these datasets and are never returned.

### Known limitations

- **England only.** Wales, Scotland, Northern Ireland, the Isle of Man and the Channel Islands are not covered.
- **Postcode = one point.** Postcodes are checked at their centroid; use coordinates for a specific building.
- **Listed buildings are points.** Each listing is matched by its official point (the building centroid), so distances are measured to that point, not to the building's walls. Only about 10,000 of the 379,685 entries have a mapped extent (listings and substantive amendments since 4 April 2011), so this Actor does not attempt a "your building is listed" yes/no answer.
- **Conservation areas and article 4 areas are tested at the point only**, not within the radius, and depend on councils having published their boundaries (10,953 and 7,338 in-force areas at build time). Where a council has published none nearby, `conservationAreaDataNearby` is `false`.
- **Dense centres.** The Actor reads up to 300 listed building points per location; in places with more (for example 1,280 within 1,000 m of Bath Abbey) the counts and the nearest building stay correct, `listedBuildingsNearby` is not exhaustive, and `note` says so.
- **Curtilage and interiors.** Listing can cover structures within the curtilage of a listed building and its interior; none of that is in the map data.
- **Speed.** About 1 second per location in the cloud (32 locations took 33 seconds including start-up); 1,000 locations take roughly 15–25 minutes.

### Troubleshooting

| What you see | Why | What to do |
|---|---|---|
| `not_found`: postcode not in the ONS Postcode Directory | Typo, a brand-new postcode, or a terminated one | Check the postcode, or pass `"latitude,longitude"` |
| `error`: "is in Wales / Scotland / Northern Ireland" | England only | Use Cadw, Historic Environment Scotland or the Department for Communities |
| `error`: "latitude and longitude may be swapped" | You passed `"-1.8262,51.1789"` | Pass latitude first: `"51.1789,-1.8262"` |
| `conservationAreaDataNearby: false` | The council has not published conservation areas to the national dataset | Check the council's own conservation area map |
| `note` says the list is not exhaustive | More than 300 listed buildings in the radius | Counts are still complete; use a smaller `radiusMeters` for a full list |
| `anyHeritageWithinRadius` is true almost everywhere | Town centres nearly always have a listed building within 250 m | Use `insideDesignatedArea`, the grade counts and the nearest distance instead |

### More from Japan Open Data

- [UK Visa Sponsor Register Tracker (Daily Changes)](https://apify.com/japan-open-data/uk-visa-sponsor-register) — new, removed and downgraded UK visa sponsor licences from the official Home Office register, or check whether a company can sponsor workers.
- [US Flood Zone Lookup by Address (FEMA NFHL)](https://apify.com/japan-open-data/us-flood-zone-lookup) — official FEMA flood zone (A, AE, VE, X…), base flood elevation and FIRM panel for any U.S. address or coordinates.
- [UK Flood Risk Lookup by Postcode (England)](https://apify.com/japan-open-data/uk-flood-zone-lookup) — the sister check for the same property list: official Environment Agency Flood Zone 1/2/3, recorded floods and the nearest flood defence, one row per postcode.
- [France Property Risk Lookup by Address (Georisques)](https://apify.com/japan-open-data/france-property-risk-lookup) — the same kind of property screening for France: official natural and industrial risks for any French address.
- [UK Waste Carrier Licence Check (Environment Agency)](https://apify.com/japan-open-data/uk-waste-carrier-register) — check whether an English business is a registered waste carrier, broker or dealer.
- [UK HGV Operator Licence Lookup (Official DVSA)](https://apify.com/japan-open-data/uk-hgv-operator-licence) — the official DVSA / Traffic Commissioner register of UK truck and bus operator licences.
- [US Hail History by Location (NOAA NEXRAD Radar)](https://apify.com/japan-open-data/us-hail-history) — every hail day near any U.S. latitude/longitude with max estimated hail size.
- [US Storm Reports API: Hail, Wind & Tornado (NWS)](https://apify.com/japan-open-data/us-storm-reports-live) — U.S. hail, wind, tornado and flood reports from official NWS Local Storm Reports within hours.
- [Argentina Fuel Prices API by Station (Official)](https://apify.com/japan-open-data/argentina-fuel-station-prices) — last reported prices at every Argentine gas station.
- [Mexico Gas Prices API by Station (Official CNE)](https://apify.com/japan-open-data/mexico-fuel-station-prices) — today's regular, premium and diesel prices at every Mexican gas station.
- [TSA Checkpoint Travel Numbers (Daily, Weekly & YoY)](https://apify.com/japan-open-data/tsa-checkpoint-throughput) — daily U.S. TSA airport checkpoint traveler counts as clean JSON.
- [Japan Postal Code & Address in English](https://apify.com/japan-open-data/japan-postal-code-english) — Japanese postal codes and addresses in English/romaji, kanji and kana.
- [UK NHS Organisation Lookup (Official ODS Codes)](https://apify.com/japan-open-data/uk-nhs-organisation-lookup) — GP practices, pharmacies, dentists, hospitals and NHS trusts from the official ODS register, by postcode, type or ODS code (organisations only).

### Feedback

Found a wrong value or need another layer? Open an issue on the Actor's **Issues** tab with your input and what you expected. Already on the list for the next version: an "is this point on a listed building?" check using the official listed building outlines, which permitted development rights each article 4 direction removes, and tree preservation orders. Wales and Scotland on request.

# Actor input Schema

## `locations` (type: `array`):

Places in England to check, one per line: a UK postcode (e.g. "BA1 1LT") or "latitude,longitude" in decimal degrees (e.g. "51.1789,-1.8262"). Via the API you can also pass objects like {"postcode": "BA1 1LT", "label": "Listing 1042"} or {"latitude": 51.1789, "longitude": -1.8262, "label": "Site A"}. Up to 1,000 locations per run; each gets one output row.

## `radiusMeters` (type: `integer`):

How far around each location to look for listed buildings, scheduled monuments, registered parks and gardens, battlefields, protected wrecks and World Heritage Sites (10 to 1,000 metres). Conservation areas and article 4 direction areas are always tested at the point itself, not within the radius.

## `maxListedBuildings` (type: `integer`):

How many nearby listed buildings to name in the "listedBuildingsNearby" column, nearest first (1 to 50). The full count and the count by grade are always returned - city centres can have hundreds within 250 m.

## Actor input object example

```json
{
  "locations": [
    "BA1 1LT",
    "51.1789,-1.8262"
  ],
  "radiusMeters": 250,
  "maxListedBuildings": 20
}
```

# Actor output Schema

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

Listed buildings within the radius (with grades), plus conservation area, article 4 direction, scheduled monument, registered park and garden, battlefield, protected wreck and World Heritage Site flags for each postcode or coordinate. Table view: overview.

# 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 = {
    "locations": [
        "BA1 1LT",
        "51.1789,-1.8262"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("japan-open-data/england-heritage-constraint-lookup").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 = { "locations": [
        "BA1 1LT",
        "51.1789,-1.8262",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("japan-open-data/england-heritage-constraint-lookup").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "locations": [
    "BA1 1LT",
    "51.1789,-1.8262"
  ]
}' |
apify call japan-open-data/england-heritage-constraint-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,japan-open-data/england-heritage-constraint-lookup"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/WZjcy3thp7LS55j2w/builds/Rks5A8tmVIxJ9qjcq/openapi.json
