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.
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
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.
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:
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.
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.
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.
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.
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.
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.
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 type | URL |
|---|---|
| get | /entity/dataset-name-search.json |
| 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 type | URL |
|---|---|
| get | /entity.{extension} |
| 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 type | URL |
|---|---|
| get | /entity/{entity}.{extension} |
| 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 type | URL |
|---|---|
| get | /dataset.{extension} |
| 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 type | URL |
|---|---|
| get | /dataset/{dataset}.{extension} |
| 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.
| Request type | URL |
|---|---|
| GET | https://www.planning.data.gov.uk/openapi.json |