The only Irish construction-data API — in your stack.
No other Irish construction-leads source gives you the data programmatically. Planning applications, commencement notices, company contacts and market intelligence behind one REST endpoint — 21,943 leads across all 31 authorities, updated weekly. Query it, bulk-export it, or have matching leads pushed to you in real time.

The only Irish construction dataset you can wire straight into your stack, your CRM, your tools.
What you can pull
The whole dataset, on tap — what no one else offers
Leads — search & filter
GET /v1/leads with full querying: text, vertical, authority, readiness, min_value, min_units, has_contact. Keyset-paginated.
Bulk export
Stream the entire filtered dataset as JSONL for ETL & pandas, or pull it as a one-shot CSV. The whole dataset, your warehouse.
Lead detail — company 360
GET /v1/leads/{id}: project, zoning & appeals, area comparables, suppliers, plus the registered company and verified contacts.
Market intelligence
GET /v1/intel/analytics: yield estimates, a repeat-sale price index, emerging zones and material-cost trends — all PII-free.
Webhooks
Push delivery of new leads matching your saved filters — HMAC-signed, no polling. lead.new, lead.on_site and lead.updated events.
OpenAPI spec
Every endpoint, parameter and response schema in a machine-readable openapi.json — generate clients, browse Swagger or ReDoc.
Quickstart
Authenticated in one header
Create a key once you're on the Max plan, then send it as a Bearer token on any read endpoint. Every response carries X-RateLimit-* headers so you can back off cleanly.
# Authenticate any read endpoint with your Bearer key.
curl -H "Authorization: Bearer pl_live_…" \
"https://planningleads.ie/api/v1/leads?readiness=commencing&vertical=solar&min_units=20"Bulk-export the dataset
import pandas as pd, requests
# Stream the whole filtered dataset as JSONL straight into a DataFrame.
url = "https://planningleads.ie/api/v1/export/applications.jsonl"
headers = {"Authorization": "Bearer pl_live_…"}
params = {"readiness": "commencing", "min_units": 20}
resp = requests.get(url, headers=headers, params=params, stream=True)
df = pd.read_json(resp.raw, lines=True)
print(df[["planning_authority", "est_value", "lead_readiness"]].head())Individual (homeowner) names are masked — organisation-level data only, GDPR-safe.
Webhooks
New matching leads, pushed to you — no polling
Register a webhook and we POST leads that match your saved filters the moment they appear. Each request is HMAC-SHA256 signed with an X-PL-Signature header — recompute it over the raw body and compare timing-safe. The docs carry copy-paste Python and Node verification snippets.
lead.newlead.on_sitelead.updatedBuilt for
Wire it into the tools you already run
QS & estimating tools
Pull commencing schemes by unit count and estimated value, with material-cost trends to feed pricing models and BoQs.
Proptech & CRMs
Sync filtered leads and company 360 records straight into your pipeline; get new matches pushed over webhooks as they file.
Investors & analysts
Query the repeat-sale index, yield estimates and emerging zones across 790k PPR sales to back development and acquisition calls.
Estate agents
Track planning and commencements in your patch, surface the developer behind each site, and reach out before it lists.
PII-safe by design
Organisation-level data only — individual (homeowner) names are masked. Built around Ireland's open-data licence and GDPR.
Rate-limited & paginated
Standard X-RateLimit-* headers and keyset pagination keep large pulls stable and predictable.
On the Max plan
Programmatic access, bulk export and webhooks are included with Max. Create a key from your account.
Start building.
Get an API key on the Max plan and pull the dataset into your stack.