Skip to main content

This is a new service - your feedback will help us to improve it.

Planning Data

Documentation

The Planning Data API gives you access to over 100 planning and housing datasets for England through a single, consistent interface – from conservation areas and listed buildings to brownfield land and planning applications.

Getting started

This guide shows how to use it for typical property and planning tasks.

1. Check planning constraints for a location

You want to find specific planning considerations that apply to a specific address or site - conservation areas, listed buildings, flood risk zones, Article 4 directions, and so on.

Query by coordinate

Pass a latitude and longitude to return all entities whose geometry intersects that point. Specify the datasets you care about.

GET /entity.json?
latitude=51.5074&
longitude=-0.1278&
dataset=conservation-area&
dataset=listed-building&
dataset=green-belt&
dataset=flood-risk-zone&
dataset=article-4-direction-area&
dataset=tree-preservation-zone&
limit=100

View API response

You can pass multiple dataset parameters. The API returns entities from any of those datasets whose geometry covers the point.

Query by UPRN

If you have a Unique Property Reference Number, pass it using the q parameter. This is more precise than a coordinate for registered properties.

GET /entity.json?
q=10008315764&
dataset=conservation-area&
dataset=listed-building&
limit=100

View API response

What you get back

Each entity includes name, dataset, start-date, geometry (WKT), and point (WKT), plus other fields. Show constraints grouped by dataset and make clear to users that an absence of results does not mean no constraints exist - data coverage varies by area.

2. Find development sites in an area

You want to find all brownfield land within a specific local planning authority.

Find a local planning authority

Fetch all 337 LPAs with their entity IDs in one request, then filter by name in your application:

GET /entity.json?
dataset=local-planning-authority&
limit=500&
field=name&
field=entity

View API response

For example, Lambeth LPA has entity ID 626195. Use this in subsequent spatial queries.

Find brownfield land within that boundary

Use geometry_entity to filter by the LPA's geometry rather than pasting in a raw polygon.

GET /entity.json?
dataset=brownfield-land&
geometry_entity=626195&
geometry_relation=within&
limit=100

View API response

3. Research heritage and environmental designations

You want a structured view of statutory heritage and environmental designations for a specific property.

Query by UPRN

Pass a UPRN using the q parameter to return all matching entities for that property.

GET /entity.json?
q=10008315764&
dataset=listed-building&
dataset=conservation-area&
dataset=scheduled-monument&
dataset=site-of-special-scientific-interest&
dataset=ancient-woodland&
dataset=flood-risk-zone&
dataset=heritage-at-risk&
dataset=area-of-outstanding-natural-beauty&
limit=100

View API response

Listed building entities include a listed_building_grade field (Grade I, II*, or II). You do not need a separate query to get this.

4. Monitor new planning applications

You want to monitor new planning applications within a geography or track activity over time.

Note: the planning applications data specification is currently in development and may change. Local planning authorities are not currently required to share application data to this specification. Stay up to date with developments.

Query recent applications

Use start_date to filter by when a planning application was submitted.

GET /entity.json?
dataset=planning-application&
start_date_year=2025&
start_date_month=5&
start_date_day=1&
start_date_match=since&
limit=100&
offset=0

View API response

Search within a custom area

Pass a polygon in Well-Known Text format to the geometry parameter. Spaces in the WKT string must be percent-encoded but most HTTP client libraries handle this automatically.

GET /entity.json?
dataset=planning-application&
geometry=POLYGON((-0.15%2051.50,-0.10%2051.50,-0.10%2051.52,-0.15%2051.52,-0.15%2051.50))&
geometry_relation=intersects&
limit=100

View API response

Coordinates should be in WGS84 (EPSG:4326).

Paginating results

Use offset to page through large result sets. Increment it by your limit value for each subsequent request.

GET /entity.json?
dataset=planning-application&
limit=100&
offset=0 # page 1
GET /entity.json?
dataset=planning-application&
limit=100&
offset=100 # page 2

View API response (page 1)

The response includes a links object with pre-built next, prev, first, and last URLs, so you can follow pagination without calculating offsets manually.

5. Screen a portfolio against planning risk

You want to check a list of properties against planning designations to flag potential risk.

Query per property

The API does not have a batch endpoint. Issue one request per property. Use the field parameter to limit the response to what you need.

GET /entity.json?
latitude=52.5306&
longitude=-1.9561&
dataset=flood-risk-zone&
dataset=conservation-area&
dataset=article-4-direction-area&
dataset=green-belt&
field=name&
field=dataset&
field=reference&
limit=50

View API response

Apply polite rate-limiting between requests.

Use bulk downloads for large portfolios

For hundreds of properties or more, download datasets in bulk and run spatial intersections locally. This avoids rate limits and gives you a stable snapshot.

Datasets are available as CSV and GeoJSON from each dataset's page on planning.data.gov.uk/dataset. Download links are listed on each individual dataset page - the URL format varies by dataset.

Downloading the data

You can download datasets in bulk in various formats from each dataset page.

Downloads are available as CSV, JSON and where applicable as GeoJSON.

Getting the data through the API

Developers can use our APIs to explore our data and build services. As we are still in beta, you should be aware there may be changes to the API if you're building production-ready systems.

You can read about the API below. Get in touch with the team if you are interested in getting support using the planning data API.


Planning Data API

Entity

Dataset Name Search

Request details
Request type URL
get /entity/dataset-name-search.json
Parameters
Name Required? Type Description
search
Optional
string
dataset
Optional
string
limit
Optional
integer

Search entity

This endpoint searches for a subset of entities from all entities filtered by specified parameters returning the entity set in the format specified.

Request details
Request type URL
get /entity.{extension}
Parameters
Name Required? Type Description
extension
Required
string Must be one of: json, html or geojson
q
Optional
string Search by a postcode, or a Unique Property Reference Number (UPRN).
typology
Optional
array(string) Search for entities by typology
dataset
Optional
array(string) Search for entities by dataset
organisation_entity
Optional
array(integer) Search for entities managed by organisation
entity
Optional
array(integer) Search for entities by entity number
curie
Optional
array(string) Search for entities by CURIE
prefix
Optional
array(string) Search for entities by prefix
reference
Optional
array(string) Search for entities by reference
period
Optional
array() Results to include current, or all entries
start_date_year
Optional
integer Search for entities by start date year before or after the given year. Depends on start_date_match
start_date_month
Optional
integer Search for entities by start date month before or after the given year. Depends on start_date_match
start_date_day
Optional
integer Search for entities by start date day before or after the given day. Depends on start_date_match
start_date_match
Optional
string Specify how to filter against the start_date_* values provided, either before, after or match
end_date_year
Optional
integer Search by end date year before or after the given year. Depends on end_date_match
end_date_month
Optional
integer Search for entities by end date month before or after the given month.Depends on end_date_match
end_date_day
Optional
integer Search for entities by end date day before or after the given day. Depends on end_date_match
end_date_match
Optional
string Specify how to filter against the end_date_* values provided, either before, after or match
entry_date_year
Optional
integer Search for entities by entry date year before or after the given year. Depends on entry_date_match
entry_date_month
Optional
integer Search for entities for entities by entry date month before or after the given month.Depends on entry_date_match
entry_date_day
Optional
integer Search for entities by entry date day before or after the given day. Depends on entry_date_match
entry_date_match
Optional
string Specify for entities how to filter against the entry_date_* values provided, either before, after or match
longitude
Optional
number Search for entity with geometries intersected by a point constructed with this longitude. Requires latitude to be provided.
latitude
Optional
number Search for entities with geometries intersected by a point constructed with this latitude. Requires longitude to be provided.
geometry
Optional
array(string) Search for entities with geometries interacting with one or more geometries provided in WKT format. The type of geometric relation can be set using the geometry relation parameter.
geometry_entity
Optional
array(integer) Search for entities with geometries interacting with one or more geometries taken from each of the provided entities. The type of geometric relation can be set using the geometry relation parameter.
geometry_reference
Optional
array(string) Search entities with geometries interacting with the geometries of entities with the provided references. The type of geometric relation can be set using the geometry relation parameter.
geometry_curie
Optional
array(string) Search for entities with geometries interacting with geometries entities matching provided curies. The type of geometric relation can be set using the geometry relation parameter.
geometry_relation
Optional
string DE-9IM spatial relationship, default is 'within'
limit
Optional
integer limit for the number of results
offset
Optional
integer paginate results from this entity
field
Optional
array(string) fields to be included in response
exclude_field
Optional
array(string) field parameter will take over any fields specified in the exclude_field parameter
quality
Optional
array(string) Search for entities by quality

Get entity

This endpoint returns data on one specific entity matching the specified ID in the format requested.

Request details
Request type URL
get /entity/{entity}.{extension}
Parameters
Name Required? Type Description
entity
Required
integer Entity id
extension
Required
string Must be one of: json, html or geojson

List datasets

This endpoint lists all datasets, returning the results in the file format specified.

Request details
Request type URL
get /dataset.{extension}
Parameters
Name Required? Type Description
extension
Required
string Must be one of: json or html
dataset
Optional
array(string) Search for datasets by dataset
field
Optional
array(string) Fields to include in dataset JSON response
exclude_field
Optional
array(string) Fields to exclude from the dataset JSON response
include_typologies
Optional
boolean Include typologies in dataset JSON response; set to false to remove

Get dataset

This endpoint returns a specific dataset in the file format specified.

Request details
Request type URL
get /dataset/{dataset}.{extension}
Parameters
Name Required? Type Description
dataset
Required
string Specify which dataset
extension
Required
string Must be one of: json or html

Planning Data OpenAPI

You can generate a client library from our OpenAPI file using Swagger Editor.

This may be an easier way for you to integrate your service with the planning data platform than writing a client library from scratch.

OpenAPI details
Request type URL
GET https://www.planning.data.gov.uk/openapi.json