France Building Permits Scraper
Pricing
Pay per event
France Building Permits Scraper
🏗️ Export official French SITADEL permits with addresses, applicants, cadastral parcels, project details, housing counts, and floor areas.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Export official French building permits and planning authorizations from the SDES SITADEL public data service.
Turn national permit files into structured JSON, CSV, Excel, XML, or API-ready records without downloading and processing million-row source files yourself.
Use it to discover construction projects, refresh a property intelligence database, monitor local development, or build a repeatable lead pipeline.
What does France Building Permits Scraper do?
The Actor reads the official anonymous SDES DiDo API and normalizes four SITADEL datasets:
- 🏠 Residential construction authorizations
- 🏢 Non-residential construction authorizations
- 🗺️ Development authorizations
- 🧱 Demolition authorizations
It streams pages rather than loading the full national corpus into memory.
You choose the datasets, filters, and maximum number of records.
Every output row retains the complete official record in raw for advanced analysis.
Who is it for?
Contractors and construction suppliers
Find newly authorized projects by department and municipality.
Use addresses, project types, housing counts, and applicant names to prioritize outreach.
Developers and architects
Track local pipelines, authorization activity, planned floor area, and project destinations.
Proptech and data teams
Schedule monthly ingestion from a stable official source.
Keep a warehouse synchronized without maintaining a custom SITADEL downloader.
Researchers and public-sector analysts
Export bounded samples or targeted geographic slices for market, housing, and planning studies.
Why use this Actor?
- ✅ Official France-wide SDES source
- ✅ No account, login, API key, or browser automation
- ✅ Four planning authorization datasets in one interface
- ✅ Stable English field names plus raw French source codes
- ✅ SIREN and SIRET included when publicly available
- ✅ Bounded pagination for predictable runs
- ✅ Ready for schedules, webhooks, APIs, and cloud storage integrations
What France building permit data can I extract?
| Field | Description |
|---|---|
permitType | Housing, non-residential, development, or demolition dataset |
permitReference | Official authorization reference |
permitTypeCode | Raw SITADEL authorization type code |
statusCode | Raw official status code |
filingDate | Filing date when available |
authorizationDate | Real authorization date |
completionDate | Completion/declaration date when available |
departmentCode | INSEE department code |
municipalityCode | INSEE municipality code |
address | Normalized project-site address |
cadastralParcels | Cadastral section and parcel identifiers |
applicantName | Public applicant or organization name |
applicantSiren | Public SIREN identifier |
applicantSiret | Public SIRET establishment identifier |
projectNature | Declared or completed project nature |
housingCreated | Number of housing units created |
landAreaSqm | Land area in square metres |
residentialFloorAreaCreatedSqm | Residential floor area created |
nonResidentialFloorAreaCreatedSqm | Non-residential floor area created |
raw | Complete source record for fields not normalized yet |
How to scrape French building permits
- Open the Actor input page.
- Select one or more permit datasets.
- Optionally enter department or municipality codes.
- Add date, status, or applicant filters if needed.
- Set
maxItemsto control the export size. - Click Start.
- Download the dataset or consume it through the Apify API.
Start with a small limit to validate your geography and filters.
Increase maxPages only when a selective filter requires a deeper source scan.
Input
{"permitTypes": ["housing", "nonResidential"],"departments": ["75"],"dateFrom": "2025-01-01","maxItems": 500,"maxPages": 200}
Input fields
| Input | Type | Default | Purpose |
|---|---|---|---|
permitTypes | array | housing | Official files to scan |
departments | array | empty | INSEE department code filter |
municipalities | array | empty | INSEE municipality code filter |
dateFrom | date | empty | Earliest authorization date |
dateTo | date | empty | Latest authorization date |
statuses | array | empty | Raw SITADEL status codes |
applicantQuery | string | empty | Applicant-name substring |
maxItems | integer | 20 | Maximum saved permits |
maxPages | integer | 20 | Maximum scanned pages per source |
Output example
{"permitType": "housing","permitReference": "00115819B0023","statusCode": "3","authorizationDate": "2019-08-02","departmentCode": "01","municipalityCode": "01158","municipalityName": "FARGES","address": "ROUTE DE COLLONGES","cadastralParcels": ["AD42"],"projectNature": "Construction d'une maison individuelle","housingCreated": 1,"residentialFloorAreaCreatedSqm": 120,"sourceUrl": "https://data.statistiques.developpement-durable.gouv.fr/dido/api/v1/datafiles/.../rows?page=1&pageSize=100","scrapedAt": "2026-07-13T00:00:00.000Z"}
Actual availability varies by authorization type and source reporting.
Missing official values are represented as null, not invented.
Geographic filtering
Departments use official codes such as 75, 13, 33, or 2A.
Municipalities use INSEE commune codes rather than postal codes.
Use both when you need a narrow local workflow.
The source files are ordered by the provider, so highly selective client-side filters may require multiple pages.
maxPages gives you an explicit safety boundary.
Permit datasets explained
housing covers residential construction and contains the richest housing-unit breakdown.
nonResidential focuses on premises such as commercial, agricultural, industrial, and public buildings.
development covers planning and land-development authorizations.
demolition covers demolition authorizations and associated site details.
Schemas differ between official files.
The Actor maps a shared core and preserves all dataset-specific fields in raw.
How much does it cost to scrape France building permits?
This Actor uses pay-per-event pricing:
- A small start charge covers run initialization.
- An item charge applies only to records saved in your dataset.
- Higher subscription tiers receive lower per-item prices.
The final cost appears before and after each run in Apify Console.
Use maxItems to set a hard output ceiling.
No proxy is required, keeping infrastructure overhead low.
Scheduling a construction lead monitor
Open Schedules in Apify Console and create a monthly schedule.
Use a recent dateFrom value and the departments relevant to your territory.
Connect the resulting dataset to a webhook, Make, Zapier, Google Sheets, or your own ingestion endpoint.
Store permitReference in your system as the deduplication key.
Update the date range each cycle or deduplicate downstream.
Integrations
Google Sheets and Excel
Export the dataset directly as CSV or XLSX for sales and research teams.
Webhooks
Send a run-finished webhook to your CRM or data pipeline.
Make and Zapier
Trigger workflows when a scheduled permit export completes.
Cloud storage
Use Apify integrations to copy results to supported databases and storage services.
Your data warehouse
Fetch JSON through the dataset API and upsert on permitReference plus permitType.
API usage with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/france-building-permits-scraper').call({permitTypes: ['housing'],departments: ['75'],maxItems: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
API usage with Python
from apify_client import ApifyClientimport osclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/france-building-permits-scraper').call(run_input={'permitTypes': ['development'],'departments': ['13'],'maxItems': 100,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
API usage with cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~france-building-permits-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"permitTypes":["housing"],"maxItems":100}'
Poll the returned run ID, then download items from its default dataset.
Use with Apify MCP
Connect the Actor to Claude and AI coding tools through Apify MCP. The scoped endpoint exposes this Actor as an MCP tool and uses Apify's browser-based OAuth flow when your client connects.
Claude Code
Run this command in your terminal:
$claude mcp add --transport http france-building-permits "https://mcp.apify.com?tools=automation-lab/france-building-permits-scraper"
Start Claude Code, open /mcp, select france-building-permits, and complete the Apify sign-in flow.
Claude Desktop, Cursor, and VS Code
Use the same Streamable HTTP server in your client's MCP configuration. In Cursor, save it as .cursor/mcp.json. In VS Code with GitHub Copilot, run MCP: Open User Configuration and add it to mcp.json. In Claude Desktop, add it as a custom connector; clients or Desktop versions that expose JSON configuration can use:
{"mcpServers": {"france-building-permits": {"url": "https://mcp.apify.com?tools=automation-lab/france-building-permits-scraper"}}}
On first use, authorize access in the browser. If your MCP client does not support OAuth, add a headers object containing "Authorization": "Bearer <APIFY_TOKEN>"; never commit a real token to source control.
Example prompts:
- “Export 100 recent housing permits for department 75.”
- “Find non-residential authorizations in Bouches-du-Rhône.”
- “Summarize the project types and floor area in this permit dataset.”
- “Create a CSV-ready list of applicant companies and project addresses.”
Tips for reliable results
- Begin with
maxItems: 20while testing. - Use official INSEE codes, not free-text place names.
- Combine geography and dates for practical recurring exports.
- Raise
maxPageswhen a narrow filter returns fewer items than expected. - Retain
rawif you may need source-specific fields later. - Treat public applicant identifiers according to your applicable data-protection obligations.
Data quality and refresh frequency
SITADEL is administrative statistical data supplied through SDES.
Fields can be corrected, delayed, incomplete, or unavailable for a particular record.
The national files are refreshed by the source, typically on a recurring release cycle.
The Actor reports what the official API returns at run time.
It does not infer missing applicant names, addresses, dates, or metrics.
Legality: is it legal to scrape French building permit data?
The Actor accesses an anonymous official public-data API.
Public access does not remove your responsibility to use the data lawfully.
Consider GDPR, purpose limitation, direct-marketing rules, contractual obligations, and local regulations for your use case.
Avoid using personal data for harassment, discrimination, or unlawful profiling.
Consult qualified counsel when your workflow involves regulated decisions or outreach.
FAQ
Does this Actor require a French government API key?
No. The supported SDES DiDo rows endpoints are publicly accessible without authentication.
Can I export all national records?
The source contains millions of records. Use bounded runs, geographic/date filters, schedules, and incremental ingestion rather than a single unrestricted export.
Why did a selective filter return few or zero items?
Filters are applied to scanned source pages. Confirm your codes and dates, then increase maxPages within a reasonable bound.
Why are some fields null?
The official dataset does not provide every field for every authorization type. The Actor preserves missing values as null.
Can I identify companies?
Applicant names, SIREN, and SIRET are included when the official public record provides them.
How do I avoid duplicate permits?
Use permitType and permitReference together as a stable downstream key.
Does the Actor use residential proxies?
No. It calls the official public JSON service directly.
Can I request another normalized source field?
The complete source object is already available in raw. Feature requests can promote frequently used raw fields into stable top-level properties.
Related scrapers
Combine this Actor with other automation-lab data products:
- France Property Risk Scraper for environmental and property-risk context.
- France SIRENE Company Scraper for applicant-company enrichment.
- France Travail Jobs Scraper for regional labor-market signals.
Only actors under the automation-lab account are linked here.
Source attribution
Source: SDES, Base des permis de construire et autres autorisations d'urbanisme (SITADEL), distributed through DiDo.
Each item includes the exact page URL used for extraction.
Use attribution required by the source license and your downstream publication context.
Support
For reproducible support, include:
- The Apify run URL
- The exact input
- The affected permit reference, if available
- Expected versus actual output
Do not include private credentials or unrelated personal data.