Planning Applications & Building Permits Scraper | Leads
Pricing
from $1.74 / 1,000 project delivereds
Planning Applications & Building Permits Scraper | Leads
Find planning and building permit projects in London, Nottingham, Ireland, NSW, San Francisco and Toronto. Choose from 161 city, council and region presets. Filter dates and work types, export source records and monitor changes. Official public data; coverage and dates labelled.
Pricing
from $1.74 / 1,000 project delivereds
Rating
0.0
(0)
Developer
Ibrahim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 days ago
Last modified
Categories
Share
Planning & Permit Leads - 5 Countries

Find extension, loft and alteration projects from official planning and building permit data across five countries. Choose a city, council or region; filter application dates and work types; then export to a spreadsheet or monitor changes. Every result preserves its source, country, date basis and coverage notes. Application links and site coordinates are returned only when supplied.
Verified sources in five countries: United Kingdom (London and Nottingham), Ireland (31 participating councils), Australia (124 NSW council presets), United States (San Francisco) and Canada (Toronto). These are 161 city/council/region presets, not 161 separate cities. Choose city in the input. Coverage is limited to the specified authorities; it does not claim whole-country coverage outside the Irish participating-authority feed. Projects are not verified customers or evidence of contractor intent, and works may already have started.
International coverage
| Country / source | Scope | Application date used | Important limits |
|---|---|---|---|
| United Kingdom - GLA | London planning authorities | Validation date | Existing borough filters and monitor history continue |
| United Kingdom - Nottingham | Nottingham City Council | Case date | Council area, not all Nottinghamshire |
| Ireland - NPAD | 31 participating local authorities | Received date | Council feeds can lag; see live authority freshness in RUN_STATS |
| Australia - NSW Online DA | New South Wales; 124 council presets | Lodgement date | Broad development categories, not full proposals; choose alteration |
| United States - San Francisco DBI | City/county building permit applications | Permit creation date | Building permits differ from planning permission; one matching address per permit |
| Canada - Toronto Building | Active building permit applications | Application date | Cleared permits absent; no site coordinates/radius support |
London remains the default. For UK radius searches use a full postcode or coordinates. For Ireland, NSW and San Francisco, leave postcode empty and optionally provide both latitude and longitude. Without a centre, query the full selected council or region. Toronto is city-wide only. Use workTypes: ["alteration"] for NSW; the API supplies categories such as alterations/additions and cannot prove that a specific extension or loft is proposed. Missing individual application links stay null; no tracking URL is invented.
Ireland example
{"city":"Ireland","workTypes":["extension","loft"],"recentDays":30,"maxResults":25}
Choose any participating council directly, for example Galway City Council, Limerick County Council, Waterford City and County Council, Kildare County Council or Cork County Council. Dublin City, Fingal and Cork City have observed upstream delays; a small or empty recent result set is not proof of no activity. Every Irish run checks the latest application and synchronization dates observed within its requested date window for selected authorities. Missing authorities are marked unknown, and feeds lagging more than 30 days receive a coverage warning. Retention/retrospective work and extensions of permission duration are excluded by default.
Australia example
{"city":"Newcastle City Council","workTypes":["alteration"],"recentDays":30,"maxResults":25}
Choose New South Wales for the regional feed, or a specific council such as Council of the City of Sydney, Wollongong City Council, Albury City Council, City of Parramatta Council or Coffs Harbour City Council. Council names represent administrative areas, not arbitrary city-radius boundaries. Modification/review applications are excluded unless amendments are enabled.
United States and Canada examples
{"city":"San Francisco","workTypes":["extension","loft","alteration"],"recentDays":30,"maxResults":25}
{"city":"Toronto","workTypes":["extension","loft","alteration"],"recentDays":30,"maxResults":25}
Toronto revisions are excluded by default. San Francisco and Toronto records are explicitly building permit applications. An issued/approved permit may concern works already started. No applicant, owner, builder, phone or email fields are requested from these feeds.
Source attribution
- Ireland: Department of Housing, Local Government and Heritage / participating Irish local authorities, National Planning Application Dataset, CC BY 4.0. This Actor transforms the published fields and filters proposals.
- Australia: Contains NSW Planning Portal data, NSW Department of Planning, Housing and Infrastructure, Online DA Data, Creative Commons Attribution. Fields are transformed and filtered; no government endorsement.
- United States: City and County of San Francisco, Department of Building Inspection, Building Permits, PDDL.
- Canada: City of Toronto, Toronto Building, Active Building Permits. Contains information licensed under the Open Government Licence - Toronto.
Requests remain paced and bounded. Large queries can produce an explicitly partial run due to candidate, time, output or spending caps. A national/regional selector is not an exhaustive unbounded export. Sources are live rather than frozen; additions during pagination can be picked up by later monitor runs. Monitoring sees only projects still present in the source and date window, and never infers deletions.
Quick start
Paste this input to find extension and loft projects around a London-area postcode:
{"postcode": "TW5 9LN","radiusKm": 5,"workTypes": ["extension", "loft"],"recentDays": 30,"maxResults": 25}
Or search a whole borough:
{"boroughs": ["Hounslow"],"workTypes": ["extension", "loft"],"recentDays": 30,"maxResults": 100}
Download the default dataset as JSON, CSV, or Excel. RUN_STATS reports the date window, candidate count, delivered records, skipped unchanged records, source freshness observed among matches, and any output, scan, or spending limit.
Nottingham example
{"city": "Nottingham","postcode": "NG1 5FS","radiusKm": 5,"workTypes": ["extension", "loft"],"recentDays": 30,"maxResults": 25}
Coverage is the city council area, not all Nottinghamshire. London filters by validation date; Nottingham filters by the published case date. Every row includes applicationDate and dateBasis; validatedDate remains null when the council does not separately supply one. Nottingham refresh dates are preserved as synchronization timestamps, not invented record-update timestamps. London is the default city, and existing London monitor histories continue.
What you get
| Field | Meaning |
|---|---|
reference, authority, applicationId | Source identity and council reference |
address, postcode | Project site supplied by the source |
description | Council-published proposal, normalized whitespace |
workTypes | Extension / loft keywords detected in the proposal |
status, decision, stage | Source text plus a conservative normalized stage |
applicationDate, dateBasis, validatedDate, decisionDate | Source application/case date and its explicit basis; validation date only when supplied |
latitude, longitude, distanceKm | Source site coordinates and postcode-radius distance |
councilUrl | Original application link, or null with a coverage note |
sourceUpdatedAt, sourceSyncedAt, retrievedAt | Source and retrieval timestamps |
change | result in export mode; new or updated in monitoring |
warnings | Missing links/coordinates and opt-in retrospective/amendment notes |
No applicant names, personal phone numbers, or email enrichment are collected. Council links are retained, not crawled; planning drawings and PDFs are not copied.
Scheduled monitoring
Save a task with:
{"boroughs": ["Hounslow"],"workTypes": ["extension", "loft"],"recentDays": 90,"monitor": true,"monitorKey": "hounslow-extensions","maxResults": 100,"maxCandidates": 2000}
Schedule it daily or weekly through Apify. The first run delivers matching projects. Later runs return only previously unseen projects or changes to proposal, address, status, decision, or other useful project fields. Source refresh timestamps alone do not trigger a paid update.
The baseline is private to the running user's Apify account and query filters. Use the same account, monitor name, and filters to continue it. Changing filters starts a separate baseline. Up to 20,000 projects are retained per monitor; choose a new name to reset. Cloud monitoring uses a queue lock to reject overlapping runs of the same monitor. A terminated run's lock expires after ten minutes. Local export works without a cloud monitor.
Only records successfully written to the dataset advance the baseline. A failed or capped run keeps undelivered projects eligible for later runs. Interrupted dataset writes are recovered on resurrection without knowingly charging for the same record twice. Monitoring checks the configured source-date window: a project that ages out is not reported as deleted, and later updates to that project require a wider window.
Filters and limits
cityselects a supported city, region or council.postcodeaccepts a full UK postcode for UK sources only; pairedlatitude/longitudesupport other countries except Toronto;radiusKmis 0.1–50 km. Searches near a boundary still return the selected supported authorities only. Radius searches omit projects without source coordinates rather than inventing a location.boroughsselects London authority names; empty means all London authorities. Leave it empty for every other city/region. This includes special planning authorities listed in the input picker.recentDaysdefaults to 30. OptionaldateFrom/dateTouse YYYY-MM-DD and override the rolling window. Future dates and windows over 366 days are rejected.statusesdefaults to any. Source statuses are also returned verbatim. Unknown statuses are not guessed into a specific stage.- Retrospective work and amendments/conditions are excluded by explicit text patterns by default. Enable their input switches if useful. Keyword matching is an aid, not a certification of scope or project stage.
maxResultsdefaults to 100, with a global maximum of 5,000 delivered records.maxCandidatesdefaults to 2,000, maximum 10,000 inspected source records. The run also has a bounded work budget of about three minutes.- Source searches are live, not an immutable snapshot. Late additions or edits can be picked up by the next monitor run. Absence of results does not prove no projects exist.
A successful run can have zero results when filters match nothing or a monitor has no new changes. partial means an explicit preview, candidate, time, or spending cap. Source/network/schema failures fail the run visibly while retaining usable records and diagnostics.
Pricing
Launch price: $2.49 per 1,000 delivered project records, with 10%, 20%, and 30% Bronze/Silver/Gold discounts. Startup is $0.00005 per memory-based start event. The live Pricing tab is authoritative; do not rely on this README if the configured price differs.
Platform usage is included. Unchanged monitor records, filtered-out candidates, and empty result sets have no dataset-record charge. New projects and changed projects each count as one delivered record. Maximum total charge and output limits are honored before another record is written.
API example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('skyfishdev/london-planning-leads').call({boroughs: ['Hounslow'], workTypes: ['extension', 'loft'],recentDays: 30, maxResults: 25}, { maxTotalChargeUsd: 0.25 });const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Source and reliability
Nottingham: official council planning points feed, licensed under the Open Government Licence v3. © Nottingham City Council; contains OS data © Crown copyright and database right. Original council links are returned when available. Nottingham pages use a bounded, sorted object-ID list; identities for billing and monitoring use the council reference, not unstable object IDs.
Source: Greater London Authority Planning London Datahub, accessed through its documented guest API. Postcode centres come from Postcodes.io. Upstream completeness, coordinate accuracy, and update delays vary. Original source evidence and timestamps remain in every record. This Actor is independent of the GLA and local councils.
Requests are paced, response sizes and timeouts are bounded, and Retry-After cooldowns are honored. Unsupported endpoints, malformed source results, timed-out searches, and failed search shards are rejected. No proxy, login, or external API key is needed for the documented public endpoints.
Development
npm ci, npm test, node tools/metadata.mjs, and apify validate-schema. Use node tools/live-check.mjs examples/postcode.json for a bounded real-source check. Cloud verification must additionally exercise monitoring twice and verify the datasets, billing, and public publication state.