# France Industrial Sites ICPE: Seveso, Permits, Inspections (`datacraft-studio/france-industrial-sites-icpe`) Actor

Official register of French classified industrial sites (ICPE) from Géorisques: operator, SIRET, permit regime, Seveso level, IED, inspections and reports, plus pollutant emissions, CO2 tonnes, waste and water (IREP). Filter by area, SIREN, sector or CO2. Pay per site.

- **URL**: https://apify.com/datacraft-studio/france-industrial-sites-icpe.md
- **Developed by:** [Yahya Nouali](https://apify.com/datacraft-studio) (community)
- **Categories:** Business, Lead generation
- **Security:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 industrial site delivereds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Industrial Sites ICPE: Seveso, Permits, Inspections

Get the **official register of French classified industrial sites (ICPE, "installations classées pour la protection de l'environnement")** as clean JSON, CSV or Excel. About **139,000 sites**: factories, chemical plants, warehouses, waste and recycling sites, quarries, wind farms, large farms, Seveso sites.

Data comes straight from the public **Géorisques API** of the French Ministry of Ecological Transition (operated by BRGM), under the **Licence Ouverte / Open Licence v2.0 (Etalab)**, which allows commercial reuse. Every row cites the source, the licence and the retrieval date.

### What you get for each site

- Operator name, **SIRET / SIREN**, NAF division
- Address, city, INSEE code, department, **GPS coordinates**
- **Permit regime** (Autorisation, Enregistrement, other regimes), **Seveso status** (high / low threshold), **IED** flag, national inspection priority, operating status
- Site type: industry, quarry, wind farm, cattle / pig / poultry farm
- Inspection authority (DREAL/DDPP), **inspection dates and public inspection report links (PDF)**
- **Prefectoral orders** and other official documents (links)
- **Classified activities** (ICPE nomenclature codes, regime, quantities and units)
- Date of the last change of the Géorisques record and a link to the official site page
- **New: pollutant emissions (IREP register)** for the about 13,800 sites that report them: **CO2 in tonnes per year** (total and fossil), all quantified **air, water and soil emissions** (kg per year), **hazardous and non-hazardous waste** produced or treated (tonnes), **water withdrawals and wastewater discharges** (m3), E-PRTR activity. Latest year available (2025 declarations, published by Géorisques in September 2026). No extra charge.

### Who uses it

- **Environmental, safety and compliance consultants** looking for Seveso or IED sites in a region
- **Industrial suppliers and service companies** (waste, maintenance, safety equipment, energy) building lead lists of industrial sites with SIRET
- **Insurers, banks and real-estate / site-selection teams** checking industrial risks near an address (radius search)
- **Journalists and researchers** following inspections and prefectoral orders

### How to search

Choose one area: **departments**, **cities (INSEE codes)**, or **a point + radius**. Leave all empty to scan the whole of France. You can also give **SIRET** numbers (fastest) or **SIREN** numbers.
Then refine with: operator name, NAF division, permit regime, Seveso status, site type, IED only, in operation only, updated since, last inspection since.
Emission filters: **only sites that report emissions** (IREP), **minimum CO2 in tonnes per year** (for example 10,000 for the about 840 largest emitters), and the IREP year.

**Alert mode**: turn on "only new or changed sites" and schedule the actor weekly. You only get new sites, new inspections, new documents or updated records.

### Example input

```json
{ "departments": ["13"], "seveso": "seveso", "activeOnly": true, "maxItems": 500 }
```

Largest CO2 emitters of a department, flat table:

```json
{ "departments": ["13"], "minCo2Tonnes": 100000, "includeDetails": false }
```

### Pricing

**$0.002 per delivered site** (pay per event). You are not charged for filtered-out sites, excluded private individuals, sites already seen in alert mode, or the summary row. Use "Maximum sites" to cap a run.

### Privacy

This actor only returns sites run by companies and public bodies. When an operator name looks like a private person (for example a sole-trader farmer), the actor checks the official SIRENE register; sole traders and unverifiable names are **excluded** and only counted in the run summary.

### Notes

- Source: Géorisques, base des installations classées (ICPE), https://www.georisques.gouv.fr/donnees/bases-de-donnees/installations-industrielles. Data is updated by the inspection services; each row has `sourceUpdatedAt` and `retrievedAt`.
- Emissions source: Géorisques, Registre français des émissions polluantes (IREP), yearly files, https://www.georisques.gouv.fr/donnees/bases-de-donnees/installations-industrielles-rejetant-des-polluants (Licence Ouverte). Joined to sites by the official site id (code AIOT). Pollutants below the reporting threshold are only counted (`belowThresholdCount`). Sites that do not report get `irepReported: false`.
- Declaration-regime sites are only partly present in the national base (this is how the source works).
- This actor is not affiliated with the French administration.

# Changelog

This Actor's version history is a separate document: https://apify.com/datacraft-studio/france-industrial-sites-icpe/changelog.md

# Actor input Schema

## `departments` (type: `array`):

Department codes, e.g. 13, 69, 2A, 974. Leave empty with the other area fields empty to scan all of France (about 139,000 sites).

## `communeInseeCodes` (type: `array`):

5-character INSEE codes, e.g. 69123 (Lyon), 13055 (Marseille). Used instead of departments when filled.

## `latitude` (type: `string`):

e.g. 45.7578. Used with longitude and radius instead of departments/cities.

## `longitude` (type: `string`):

e.g. 4.8320

## `radiusMeters` (type: `integer`):

Search radius around the point.

## `sirens` (type: `array`):

Companies to look up. SIRET (14 digits) is the fastest. A SIREN (9 digits) is matched inside the chosen area, or in all of France if no area is given (a few minutes).

## `nameQuery` (type: `string`):

e.g. total, veolia, lafarge.

## `nafCodes` (type: `array`):

2-digit NAF divisions, e.g. 20 (chemicals), 38 (waste), 10 (food industry), 01 (farming).

## `regimes` (type: `array`):

Leave empty for all.

## `seveso` (type: `string`):

Keep only sites with this Seveso status.

## `sectors` (type: `array`):

Keep sites of any of these types. Leave empty for all.

## `iedOnly` (type: `boolean`):

Sites covered by the EU Industrial Emissions Directive (large polluting installations).

## `activeOnly` (type: `boolean`):

Keep sites whose status is "En exploitation".

## `updatedSince` (type: `string`):

Only sites whose Géorisques record changed on or after this date.

## `inspectedSince` (type: `string`):

Only sites inspected on or after this date.

## `includeDetails` (type: `boolean`):

Turn off for a lighter, flat table.

## `includeEmissions` (type: `boolean`):

Joins the official French pollutant release register (IREP, latest year available) to each site: air, water and soil emissions above the reporting thresholds, CO2 in tonnes, hazardous and non-hazardous waste produced or treated, water withdrawals and discharges. Only about 10% of sites report to IREP (the largest emitters); other sites get irepReported = false. No extra charge.

## `onlyWithEmissions` (type: `boolean`):

Keep only sites present in the IREP register for the chosen year (about 13,800 large emitters, waste plants and farms).

## `minCo2Tonnes` (type: `integer`):

Keep only sites whose reported CO2 to air (total, or fossil if the total is missing) is at least this value. Example: 10000 for big emitters.

## `emissionsYear` (type: `integer`):

Year of the IREP declarations to join. Empty = latest file published by Géorisques (2025 data at the time of writing).

## `onlyNew` (type: `boolean`):

Remembers delivered sites (per state store). Schedule it weekly to get only new sites, new inspections or updated records.

## `stateStoreName` (type: `string`):

Use a different name for each saved search.

## `maxItems` (type: `integer`):

Stop after this many delivered sites (you only pay for delivered sites).

## Actor input object example

```json
{
  "departments": [
    "69"
  ],
  "radiusMeters": 5000,
  "seveso": "any",
  "iedOnly": false,
  "activeOnly": false,
  "includeDetails": true,
  "includeEmissions": true,
  "onlyWithEmissions": false,
  "onlyNew": false,
  "stateStoreName": "france-industrial-sites-icpe-state",
  "maxItems": 1000
}
```

# Actor output Schema

## `sites` (type: `string`):

One row per classified site.

## `summary` (type: `string`):

Counts, excluded individuals and source date.

# 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 = {
    "departments": [
        "69"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("datacraft-studio/france-industrial-sites-icpe").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 = { "departments": ["69"] }

# Run the Actor and wait for it to finish
run = client.actor("datacraft-studio/france-industrial-sites-icpe").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 '{
  "departments": [
    "69"
  ]
}' |
apify call datacraft-studio/france-industrial-sites-icpe --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datacraft-studio/france-industrial-sites-icpe"
        }
    }
}
```

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/Xf7DBtivMPstXRq8D/builds/zzxWfZJfi2XhaJeWk/openapi.json
