# France Building Permits (Sitadel): Projects, Builders & Alerts (`euroscrape/france-building-permits`) Actor

Official French building permits (permis de construire, planning permission, Sitadel): construction projects and construction leads — new housing programmes, commercial building projects. Real estate developers (name, SIREN), address of the works, dwellings, floor area, status. New-permit alerts.

- **URL**: https://apify.com/euroscrape/france-building-permits.md
- **Developed by:** [EuroScrape](https://apify.com/euroscrape) (community)
- **Categories:** Real estate, Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.10 / 1,000 building permits

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## France Building Permits (Sitadel): Projects, Builders & Alerts

**Every building permit granted in France, from the State's official register — with who is building, what, where, and whether the works have started.** Sitadel is the national database of planning permissions, published monthly by the Ministry's statistics office. This Actor turns it into a clean feed of construction projects: new housing programmes, shops, offices, factories, warehouses, land developments and demolitions.

![Construction projects and the companies behind them, from the official register](https://raw.githubusercontent.com/EuroScrape/apify-actors/main/assets/demo-france-building-permits.gif)

- 🏗️ **Projects before the first shovel**: permits appear when they are granted. Across eight large departments, company housing projects opened their site a median **8 months** after the permit — 14 months for programmes of 10+ dwellings (permits of 2022-2023, among sites that have opened). Status tells you where each one stands: authorized, works started, completed.
- 🏢 **The company behind each project**: name, SIREN, legal form and activity of the applicant — developers, social landlords, companies, public bodies.
- 📍 **Where and how big**: address and cadastral parcels of the works, dwellings created, floor area by use, land area.
- 📊 **Who is building here (free)**: in the Isère department, companies and public bodies obtained **407 housing permits creating 3,117 dwellings** and 678 permits for non-residential buildings over the last 12 months at the time of writing — and the summary ranks the applicants behind them.
- 🔔 **Alerts on new permits and on works starting**: schedule it monthly with a monitor name; you get only what is new or has changed.

### ✨ Why this Actor

| | |
|---|---|
| 🗃️ **Official & nationwide** | The State's open register (SDES, Licence Ouverte), every commune of France, permits since 2013, refreshed every month. |
| 🧭 **Any area** | A city, a postal code, an arrondissement ("Lyon 3e") or a whole department by its number ("38"). |
| 🎯 **Real filters** | Permit type, status, date, minimum dwellings, minimum floor area — applied at the source, so you only pay for what you need. |
| 👁️ **Follow a company** | Give SIREN numbers and get every permit those companies obtained, nationwide — a competitor's pipeline, or a customer's next sites. |
| 🛡️ **Private individuals stay private** | Only companies and public bodies are returned by default. Projects of private individuals can be added for statistics, but never with a street address, a parcel or a permit number. |
| 🆓 **Free summaries** | Permits, dwellings and floor area by type, status breakdown and the top 10 applicants, computed on all matching permits. |

### 🎯 Use cases

- **Building trades & suppliers**: the programmes authorized in your area, with the developer to call — before the tenders go out.
- **Developers & land buyers**: who obtained what around you; follow competitors by SIREN.
- **Commercial real estate & logistics**: new offices, retail, warehouses and factories by size and location.
- **Market analysts, local press, public bodies**: dwellings authorized per commune, social housing share, the pace of construction.

### 🚀 Examples

**Housing programmes of 10+ dwellings authorized in the Isère department:**

```json
{
  "locations": ["38"],
  "permitTypes": ["housing"],
  "minDwellings": 10
}
```

**New warehouses and industrial buildings over 1,000 m² around Lyon:**

```json
{
  "locations": ["69"],
  "permitTypes": ["nonResidential"],
  "minFloorArea": 1000,
  "monthsBack": 6
}
```

**Follow two developers nationwide, with alerts when a site opens:**

```json
{
  "applicantSirens": ["830853628", "418868584"],
  "statuses": ["authorized", "started", "completed"],
  "monitorName": "developers-watch",
  "slackWebhookUrl": "https://hooks.slack.com/services/…"
}
```

### 📦 Output

**A permit** (real data):

```json
{
  "type": "permit",
  "location": "Grenoble",
  "category": "housing",
  "permitNumber": "03818525U1068",
  "permitType": "building permit",
  "status": "authorized",
  "authorizedAt": "2026-01-12",
  "worksStartedAt": null,
  "applicantType": "company",
  "applicant": {
    "name": "57 BLUM",
    "siren": "988734208",
    "siret": "98873420800016",
    "legalForm": "SCCV (build-to-sell real-estate company)",
    "legalCategoryCode": 6541,
    "activityCode": "41.10D",
    "postalCode": "38170",
    "city": "SEYSSINET-PARISET"
  },
  "address": "57 AVENUE LEON BLUM",
  "parcels": ["EY 8"],
  "postalCode": "38100",
  "city": "Grenoble",
  "inseeCode": "38185",
  "landAreaM2": 1025,
  "projectNature": "new construction",
  "levels": 5,
  "dwellingsCreated": 18,
  "housingType": "apartment building",
  "apartments": 18,
  "socialRentalDwellings": 5,
  "intendedUse": "sale",
  "floorAreaCreatedM2": 1242
}
```

**The free location summary** (real data, Isère department, shortened):

```json
{
  "type": "locationSummary",
  "location": "38",
  "since": "2025-10-03",
  "permitsMatching": 1085,
  "byCategory": {
    "housing": { "permits": 407, "dwellings": 3117, "floorAreaM2": 205056 },
    "nonResidential": { "permits": 678, "floorAreaM2": 372699 }
  },
  "byStatus": { "authorized": 989, "started": 96 },
  "topApplicants": [
    { "name": "GILLES TRIGNAT RESIDENCES", "siren": "397947433", "permits": 9, "dwellings": 245, "floorAreaM2": 15500 },
    { "name": "ISERE HABITAT", "siren": "998318711", "permits": 8, "dwellings": 132, "floorAreaM2": 11272 },
    { "name": "VINCI IMMOBILIER RHONE ALPES AUVERGNE", "siren": "830853628", "permits": 3, "dwellings": 103, "floorAreaM2": 7582 }
  ]
}
```

### 💰 Pricing

| Event | Price |
|---|---|
| Run start | $0.003 |
| Building permit | $0.003 |
| Location summaries | free |

100 permits = $0.30. In monitoring mode you only pay for new permits and status changes. Apify subscribers pay less: −10% (Starter), −20% (Scale), −30% (Business). Set a **maximum cost per run** in the run options and the Actor stops cleanly when it's reached.

### ❓ FAQ

**What is in the register?** Building permits and prior declarations that create at least one dwelling; those that create or extend non-residential buildings; development permits (subdivisions, serviced plots); demolition permits. Not included: refused or pending applications, and works on an existing home that create no new dwelling.

**How fresh is it?** The State publishes once a month, covering permits recorded up to the end of the previous month. A monthly schedule is the right pace.

**Why are only some applicants named?** By the State's own rules, the register names an applicant only when it is a legal entity found in the official company register. Private individuals are never named. About one housing permit in five is filed by a company — but those permits carry three dwellings in four (19% of permits, 74% of dwellings over the last 12 months in eight large departments).

**What do I get for private individuals?** Nothing by default. With `includeIndividualProjects`, their permits are added at commune level — type of project, dwellings, floor area, dates — without street address, parcels or permit number, so they can feed statistics but not door-to-door prospecting.

**How do I get contacts for the companies?** Each applicant comes with its SIREN. Pass the SIRENs to [French Companies Scraper (SIRENE)](https://apify.com/euroscrape/france-companies) to get directors, verified websites, emails and phones.

**Paris, Lyon, Marseille?** Use the city name for the whole city, or an arrondissement ("Paris 11e", "69003") — the Actor filters on the postal code of the works.

**Why can a project appear twice?** A mixed project (housing plus shops, for example) is listed in both the housing and the non-residential files, with the figures of each part.

**Is this official data?** Yes — the Sitadel open register published by the SDES (Ministry in charge of housing), Licence Ouverte.

### 🔌 API, AI agents and integrations

- **API**: one call runs the Actor and returns the results, `POST https://api.apify.com/v2/acts/euroscrape~france-building-permits/run-sync-get-dataset-items` (see the API tab for Python, JavaScript and cURL).
- **AI agents (MCP)**: add `https://mcp.apify.com?tools=euroscrape/france-building-permits` to Claude, Cursor, VS Code or any MCP client, and the Actor becomes a tool your agent can call.
- **No-code automation**: start runs and pass the results on with Apify's integrations for n8n, Make and Zapier, or with a webhook when a run ends.
- **Exports**: every result set downloads as JSON, CSV, Excel or XML, and can be sent to Google Sheets.

### ⭐ Your feedback

If this Actor saves you time, a short review on Apify Store helps other users find it. Missing a field or a filter? Say it in your review: the most requested features are added first.

### 🔗 More from EuroScrape

- [France Real Estate Sold Prices (DVF): €/m², Sales & Trends](https://apify.com/euroscrape/france-property-prices): every property sale registered by the French State — real prices, €/m², addresses, GPS, market trends per city and alerts on new sales.
- [France Energy Ratings (DPE): Homes, Energy Sieves & Alerts](https://apify.com/euroscrape/france-energy-ratings): official energy certificates of French homes — class, address, consumption, yearly bill — with the F/G energy sieves of any city and alerts on new certificates.
- [French Companies Scraper (SIRENE)](https://apify.com/euroscrape/france-companies): every French company by activity, area and size, with verified websites and emails.
- [France Fuel Prices: Cheapest Stations Near You & Alerts](https://apify.com/euroscrape/france-fuel-prices): live official prices of all ~10,000 French stations — cheapest Diesel, E10, E85 or LPG around any point, with distances and price-drop alerts.
- [EU Electricity Prices (Day-Ahead): All Zones & Cheap Hours](https://apify.com/euroscrape/eu-electricity-prices): tomorrow's spot prices for 40+ European bidding zones, the cheapest 3-hour window of each day, negative-price alerts and years of history.
- [Google Flights Scraper: Cheapest Dates, Prices & Price History](https://apify.com/euroscrape/google-flights-prices): flight prices for any route and dates, cheapest day to fly, typical price range and price-drop alerts.
- [Ryanair Low Fare Finder: Cheapest Days, Anywhere & Alerts](https://apify.com/euroscrape/ryanair-low-fares): Ryanair fare calendars months ahead, every destination under your price cap from any airport, and alerts on drops and new deals.
- [Google Hotels Scraper: Prices from Every Booking Site](https://apify.com/euroscrape/google-hotels-prices): hotel prices for any destination and dates, with the price on every booking site, rate parity, price calendars and alerts.
- [Vinted Scraper: 26 Countries, Deals, Alerts & Seller Data](https://apify.com/euroscrape/vinted-scraper): search Vinted across 26 countries, prices with buyer fees, seller ratings and instant alerts on new listings.
- [EU Second-Hand Marketplaces Scraper: Vinted, OLX & More](https://apify.com/euroscrape/eu-marketplace-deals): one search on the top second-hand marketplaces of 18 European countries, prices in €, cheapest country and resale margin.
- [Kleinanzeigen Scraper: Deal Finder & Price-Drop Alerts](https://apify.com/euroscrape/kleinanzeigen-scraper): German classifieds with view counts, full seller details and instant alerts.
- [EU Public Tenders Scraper: TED, BOAMP & Awards](https://apify.com/euroscrape/eu-public-tenders): open tenders and contract awards from all of Europe (TED) and France (BOAMP, DECP), with winners per lot, values in € and daily alerts.
- [EU VAT Number Validator (VIES): Bulk Check, Proof & Alerts](https://apify.com/euroscrape/vat-validator): validate VAT numbers in bulk against the EU's official registry, with consultation proof for tax audits and alerts when a customer's number becomes invalid.
- [App Store Reviews Scraper + Google Play Reviews](https://apify.com/euroscrape/app-reviews): reviews from both stores in 58 countries, rating by version and country, alerts on new negative reviews.
- [Website Tech Stack Detector: 280+ Technologies, Leads & Signals](https://apify.com/euroscrape/website-intelligence): technologies, company identity, contacts and sales signals for any website.
- [UK Companies House Scraper](https://apify.com/euroscrape/uk-companies): UK companies by SIC code and location, with directors, websites and emails.
- [Impressum & Legal Notice Scraper (EU)](https://apify.com/euroscrape/company-identity): legal identity, registry numbers and VAT IDs from any website, registry-verified.

# Actor input Schema

## `locations` (type: `array`):

French cities ("Grenoble"), postal codes ("38000"), arrondissements ("Lyon 3e") or whole departments by number ("38", "69", "2A").

## `permitTypes` (type: `array`):

Housing = permits creating dwellings. Non-residential = shops, offices, industry, warehouses, farm and public buildings. Land development = subdivisions and serviced plots.

## `statuses` (type: `array`):

Authorized = permit granted, works not declared yet. Started = site opened. The default (authorized + started) is the pipeline of upcoming and ongoing works.

## `monthsBack` (type: `integer`):

Permits authorized in this many months before today. The register goes back to 2013.

## `authorizedSince` (type: `string`):

Exact start date (YYYY-MM-DD). Overrides the number of months.

## `minDwellings` (type: `integer`):

Housing permits only — e.g. 10 to keep developer programmes and skip single houses.

## `minFloorArea` (type: `integer`):

Applies to housing and non-residential permits.

## `applicantSirens` (type: `array`):

Follow specific companies: every permit they obtained, nationwide when no location is set. Useful to track a competitor or a customer.

## `includeIndividualProjects` (type: `boolean`):

By default only permits filed by companies and public bodies are returned. When enabled, permits of private individuals are added for statistics — never with a street address, parcel or permit number.

## `maxPermitsPerLocation` (type: `integer`):

Most recently authorized first.

## `includeSummary` (type: `boolean`):

Permits, dwellings and floor area by type, status breakdown, and the top applicants (who is building here). Computed on all matching permits.

## `monitorName` (type: `string`):

Set a name and schedule the Actor monthly: after the first baseline run, each run delivers only new permits and permits whose status changed (e.g. works started), and sends alerts.

## `telegramBotToken` (type: `string`):

Alerts on Telegram: create a bot with @BotFather and paste its token.

## `telegramChatId` (type: `string`):

Your chat ID (send a message to your bot, then open api.telegram.org/bot<token>/getUpdates).

## `discordWebhookUrl` (type: `string`):

Alerts in a Discord channel: Channel settings → Integrations → Webhooks.

## `slackWebhookUrl` (type: `string`):

Alerts in Slack: create an Incoming Webhook for your channel.

## `webhookUrl` (type: `string`):

Receives one POST per run with the new permits and status changes (Make, Zapier, n8n…).

## `maxNotifications` (type: `integer`):

Maximum number of alert messages per run.

## Actor input object example

```json
{
  "locations": [
    "Grenoble"
  ],
  "permitTypes": [
    "housing",
    "nonResidential"
  ],
  "statuses": [
    "authorized",
    "started"
  ],
  "monthsBack": 12,
  "includeIndividualProjects": false,
  "maxPermitsPerLocation": 50,
  "includeSummary": true,
  "maxNotifications": 30
}
```

# Actor output Schema

## `overview` (type: `string`):

One row per permit, most recently authorized first.

## `applicants` (type: `string`):

Who is building: company, SIREN, legal form and project size.

## `runSummary` (type: `string`):

Counters for this run (items found, output, errors).

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "locations": [
        "Grenoble"
    ],
    "maxPermitsPerLocation": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("euroscrape/france-building-permits").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "locations": ["Grenoble"],
    "maxPermitsPerLocation": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("euroscrape/france-building-permits").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "locations": [
    "Grenoble"
  ],
  "maxPermitsPerLocation": 50
}' |
apify call euroscrape/france-building-permits --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,euroscrape/france-building-permits"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/pSRdP9bpca5PV1Sb9/builds/VMsuxsSqxVB2WcdZi/openapi.json
