UK planning applications in BigQuery & Snowflake
Land UK planning applications in your warehouse and join them to everything else you hold.
Plota brings UK planning applications from 389 council planning portals into one classified, source-linked dataset. Pull it into BigQuery & Snowflake 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 BigQuery & Snowflake
Pull with the export endpoint
Bulk pulls go through /exports, not the search endpoint, which is capped at a page. Per call: 5,000 rows on Starter, 25,000 on Pro, 100,000 on Business, drawn from a monthly allowance the response reports back in X-Export-Rows-Used-Month:
curl -X POST "https://api.plota.co.uk/v1/exports" \
-H "Authorization: Bearer plota_live_your_key" \
-H "Content-Type: application/json" \
-d '{"nation":"england","date_from":"2026-01-01","format":"csv","limit":25000}' \
-o planning.csvBigQuery: load it
Autodetect gets the types right, and id is stable for the life of a record, so it works as the merge key:
bq load --autodetect --source_format=CSV \
planning.applications ./planning.csvSnowflake: stage and copy
Stage the file, then copy it in. FIELD_OPTIONALLY_ENCLOSED_BY matters here - planning descriptions are free text and routinely contain commas and quotes:
PUT file://planning.csv @%applications;
COPY INTO applications
FROM @%applications
FILE_FORMAT = (TYPE = CSV SKIP_HEADER = 1 FIELD_OPTIONALLY_ENCLOSED_BY = '"');Make it incremental
Take the maximum changed_at in your table, send it as changed_since on the next export, and MERGE on id. That keeps the copy current without a full reload or a wasted allowance. Two things to know: updated_at moves on every re-check and is not a change signal, and archive records carry a null changed_at because they never change - so seed the archive once with a dated backfill and run the incremental over live records only. The change feed is on the Pro plan and above.
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.
BigQuery & Snowflake integration FAQ
Can I get UK planning applications into BigQuery & Snowflake?
Yes. BigQuery & Snowflake 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 BigQuery & Snowflake?
No code beyond the query itself. You point BigQuery & Snowflake 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 BigQuery & Snowflake?
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 BigQuery & Snowflake 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 BigQuery & Snowflake reflects what councils published rather than a periodic manual gather.
Is the BigQuery & Snowflake integration free?
You can test the API with a free demo key. Production pulls into BigQuery & Snowflake run on the Starter plan and above; Plota's public planning search and email alerts stay free.