Planning Applications & Building Permits Scraper | Leads avatar

Planning Applications & Building Permits Scraper | Leads

Pricing

from $1.74 / 1,000 project delivereds

Go to Apify Store
Planning Applications & Building Permits Scraper | Leads

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

Ibrahim

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 days ago

Last modified

Share

Planning & Permit Leads - 5 Countries

Planning Leads logo

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 / sourceScopeApplication date usedImportant limits
United Kingdom - GLALondon planning authoritiesValidation dateExisting borough filters and monitor history continue
United Kingdom - NottinghamNottingham City CouncilCase dateCouncil area, not all Nottinghamshire
Ireland - NPAD31 participating local authoritiesReceived dateCouncil feeds can lag; see live authority freshness in RUN_STATS
Australia - NSW Online DANew South Wales; 124 council presetsLodgement dateBroad development categories, not full proposals; choose alteration
United States - San Francisco DBICity/county building permit applicationsPermit creation dateBuilding permits differ from planning permission; one matching address per permit
Canada - Toronto BuildingActive building permit applicationsApplication dateCleared 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

FieldMeaning
reference, authority, applicationIdSource identity and council reference
address, postcodeProject site supplied by the source
descriptionCouncil-published proposal, normalized whitespace
workTypesExtension / loft keywords detected in the proposal
status, decision, stageSource text plus a conservative normalized stage
applicationDate, dateBasis, validatedDate, decisionDateSource application/case date and its explicit basis; validation date only when supplied
latitude, longitude, distanceKmSource site coordinates and postcode-radius distance
councilUrlOriginal application link, or null with a coverage note
sourceUpdatedAt, sourceSyncedAt, retrievedAtSource and retrieval timestamps
changeresult in export mode; new or updated in monitoring
warningsMissing 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

  • city selects a supported city, region or council. postcode accepts a full UK postcode for UK sources only; paired latitude/longitude support other countries except Toronto; radiusKm is 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.
  • boroughs selects 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.
  • recentDays defaults to 30. Optional dateFrom / dateTo use YYYY-MM-DD and override the rolling window. Future dates and windows over 366 days are rejected.
  • statuses defaults 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.
  • maxResults defaults to 100, with a global maximum of 5,000 delivered records. maxCandidates defaults 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.