UK planning applications in QGIS
Bring planning applications into QGIS as a point layer, ready to style and analyse.
Plota brings UK planning applications from 389 council planning portals into one classified, source-linked dataset. Pull it into QGIS and you are working with consistent fields across every authority - the same category, decision stage and consent route whichever council published the record, with each council's own wording kept alongside - so a comparison across areas is a like-for-like one rather than an exercise in reconciling council vocabularies.
Before you start
- Get an API key. A free demo key reads the search endpoint, so you can check the fields against your own patch before paying; bulk export is Starter and above.
- Decide which councils, categories and date range you want. Every filter in the API docs works here.
How to load Plota data into QGIS
Export a CSV first
QGIS reads a delimited text layer from a file or a plain URL, and it cannot attach an Authorization header - the API accepts the key only as a header, never as a query parameter, so download the file rather than pointing QGIS at the endpoint:
curl -X POST "https://api.plota.co.uk/v1/exports" \
-H "Authorization: Bearer plota_live_your_key" \
-H "Content-Type: application/json" \
-d '{"council":"wandsworth","category":"major","format":"csv","limit":5000}' \
-o planning.csvAdd it as a delimited text layer
Layer → Add Layer → Add Delimited Text Layer. Choose the file, set X field to lng and Y field to lat, and set the geometry CRS to EPSG:4326 - WGS 84. Reproject to EPSG:27700 afterwards if the rest of your project is on British National Grid.
Style on the right column
One column name is counter-intuitive and worth knowing before you build a filter: in the CSV, planning_route holds Plota’s normalised consent route (full, outline, reserved-matters, prior-approval and so on) - the value that is comparable between councils - while council_route keeps the authority’s own wording. Categorise on planning_route or stage; use council_route only when you want to show what the council actually called it.
Join without a spatial step
uprn, ward, parish and parish_code are on the row wherever the council publishes them, and the parish code is the ONS code (E04… / W04…) stamped from the official boundary. Joining to your own datasets on those attributes is faster and more reliable than a spatial join, and it survives a coordinate that turns out to be a postcode centroid.
Open the source from the map
Add plota_url and council_url as attributes and QGIS makes them clickable in the identify panel, so anyone reviewing the layer can check a point against the council register. council_url is empty on authorities that publish no per-application page.
Check the data against the source
Every row carries plota_url and, where the council publishes one, council_url. Keep both in your model: anyone questioning a figure can open the official council record from the row rather than taking the number on trust. Coverage and last-checked times for every authority are on the coverage page.
QGIS integration FAQ
Can I get UK planning applications into QGIS?
Yes. QGIS reads the Plota API directly, so no automation platform sits in between. Each record carries the planning reference, authority, address, description, classified category, consent route, status, received / validated / decision dates, coordinates, and links to the official council source and the Plota page.
Do I need to write code to connect Plota to QGIS?
No code beyond the query itself. You point QGIS at the Plota endpoint with your API key, choose the councils, categories and date range you want, and the fields arrive already normalised across authorities.
What planning data comes through to QGIS?
Every row carries the reference, authority, address, postcode, description, Plota's classified category, consent route, status and stage, the received / validated / decision dates, the key statutory dates, latitude and longitude, dwelling count where stated, the Plota page URL and the official council source URL.
How do I keep the data in QGIS up to date?
Pass changed_since with the timestamp of your last successful run. Plota returns only the records whose content has changed since then - a new status, a decision, a new document, a revised description - so a scheduled refresh stays small and does not re-pull records that have not moved.
How current is the planning data?
Plota checks UK council planning portals daily and classifies new applications, so a refresh in QGIS reflects what councils published rather than a periodic manual gather.
Is the QGIS integration free?
You can test the API with a free demo key. Production pulls into QGIS run on the Starter plan and above; Plota's public planning search and email alerts stay free.