# France Property Risk Lookup by Address (Georisques) (`japan-open-data/france-property-risk-lookup`) Actor

Check official French property risk at any address or lat/long: flood, clay shrink-swell, seismic zone 1-5, radon, Seveso/ICPE, soil pollution and CatNat history, one flat JSON row per location. Official Georisques open data, no API key, no site names, via API or MCP. $6/1,000; not an ERP.

- **URL**: https://apify.com/japan-open-data/france-property-risk-lookup.md
- **Developed by:** [Japan Open Data](https://apify.com/japan-open-data) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.00 / 1,000 location risk checks

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 Property Risk Lookup by Address (Georisques)

**Look up the official French risk profile of any address or latitude/longitude in France.** Each location comes back as **one flat JSON row** with 58 fields, in English. The data is read live from **Géorisques** — the French Ministry for Ecological Transition and BRGM — under the **Licence Ouverte 2.0**. No API key, no login.

Flood, clay shrink-swell (RGA), seismic zone 1–5, radon class 1–3, ground movement, industrial (ICPE / Seveso) and soil-pollution risks, the commune's natural-disaster (CatNat) history, and how many classified industrial sites and potentially polluted sites sit within a radius you choose — for up to 250 locations per run.

> **This is not an official ERP document.** It returns the public Géorisques data that an *État des Risques et Pollutions* is built from, in machine-readable form. It is **not** the legally required ERP, which must be produced on the official French form (Cerfa) by the seller or the landlord. See "Data source and license".

- **The 18 risks an ERP is built from.** 12 natural risks and 6 technological risks, each as one English word — `absent`, `unknown`, `present`, `low`, `moderate` or `high` — plus two ready-made English sentences (`risksAtAddress`, `riskSummary`) you can drop straight into a report or an LLM answer.
- **The numbers professionals quote.** Official **seismic zone 1–5**, **radon potential class 1–3**, and the exposure level for **clay shrink-swell** (*retrait-gonflement des argiles*, RGA).
- **Natural disaster history.** How many *arrêtés de catastrophe naturelle* (CatNat) the commune has had, the latest year and type, split into floods, droughts, storms and ground movements.
- **Industrial neighbourhood — no company or site names.** Count of classified installations (**ICPE**), how many are **Seveso** (and upper tier), the distance to the nearest one, plus the count and distance of potentially polluted sites (**CASIAS**). Only counts, distances, tiers and zone codes are returned — never an operator's or a site's name (see "Privacy").
- **Bulk, in input order.** Up to 250 addresses or coordinates per run, each with your own `label`, one row per location in the order you sent them, so you can join the results straight back to your spreadsheet.
- **Wrong-town protection.** A street name with no commune and no postcode ("1 rue de la Paix") matches *some* commune in France with high confidence. This Actor refuses it with a **free** `not_found` row instead of selling you the risks of a town you never meant.
- **$0.006 per location, and free when the answer is "I don't know".** Unknown addresses, points at sea and invalid input cost nothing beyond the $0.001 run fee.
- **Honest about speed: about 25–30 seconds per location.** Géorisques is slow and rate-limited, and this Actor paces itself rather than hammering a public service. A single address is under a minute; a full 250-location run takes about two hours. See "How fast is it?".

### Why use this instead of the Géorisques website?

| | Géorisques website | An ERP produced by a *diagnostiqueur* | This Actor |
|---|---|---|---|
| Cost | Free | **€10–100 per property**, valid 6 months | **$0.006 per location**, $0.001 per run |
| Volume | One address at a time, in a browser, in French | One property, one order | Up to **250 locations per run**, JSON / CSV / Excel |
| Output | A PDF report and map layers | A signed legal form (Cerfa) | **One flat 58-field JSON row per location**, in English |
| Automation | — | — | Apify **API and MCP**, schedules, no API key |
| Legal value | Reference | **The legally required document** | Screening data only — not an ERP |

Use this Actor for the step *before* you pay: decide which properties need a real ERP, a soil study or a flood study.

### What can you do with this France property risk lookup?

1. **Diagnostiqueurs, notaires, estate agents and property managers.** France requires an ERP for every sale and every lease, and it is only valid for six months, so the same property is checked again and again. Screen a whole book of properties in one run before you produce the documents.
2. **Lenders, insurers and investors — portfolio screening.** Find which assets sit in a flood zone, in seismic zone 3–5, in radon class 3, in a high clay shrink-swell area, or next to a Seveso site, before ordering detailed studies.
3. **Solar, logistics and development site selection.** Compare candidate plots on flood, ground movement, industrial and soil-pollution exposure, including how many potentially polluted sites (CASIAS) are nearby and how far away the nearest one is.
4. **Property portals and PropTech.** Enrich French listings with an official risk block: seismic zone, radon class, clay shrink-swell level and the commune's CatNat count, with a link to the official Géorisques report for the same point.
5. **AI agents and chatbots.** Answer "What are the risks at this address in France?" with one call and a ready-made one-sentence `riskSummary`.

### How to use

1. Click **Start** to try the default input: Bordeaux city hall and a point in Feyzin, next to a Seveso refinery.
2. Paste your French addresses, or `"latitude,longitude"` strings, one per line (up to 250).
3. Optionally change the radius used for nearby industrial and polluted sites (100–3,000 m).
4. Download the rows as JSON, CSV or Excel, or call the Actor from the API or MCP (see below).

Only `locations` is required, and it has a default, so the Actor always returns rows.

**Always include the postcode or the commune in an address** — `"1 Place Pey Berland, 33000 Bordeaux"`, not `"1 Place Pey Berland"`. A commune name on its own (`"Bordeaux"`) is accepted and resolves to the centre of the commune. If you already hold coordinates, pass them: they are exact, faster and never ambiguous.

#### Re-check a portfolio on a schedule

An ERP is valid for six months, and the clay shrink-swell (RGA) zoning changed on 1 July 2026, so the answer for a property can change between two sales.

1. Run the Actor once with your list of addresses and store the rows, keyed by your own `label`.
2. Open the **Schedules** tab in Apify Console, add a schedule (for example every 3 months) and attach a task with the same input.
3. Compare `riskSummary`, `seismicZone`, `radonPotentialClass`, `catnatCount` and `clayShrinkSwellRisk` against the stored row, and alert on anything that moved.

A 50-property portfolio costs **$0.30** per pass.

### Input

| Input | Type | Default | What it does |
|---|---|---|---|
| `locations` | list | `["1 Place Pey Berland, 33000 Bordeaux", "45.6725,4.8560"]` | French addresses and/or `"latitude,longitude"` strings. Via the API also objects: `{"address": "...", "label": "Listing 42"}` or `{"latitude": 44.8378, "longitude": -0.5792, "label": "Site A"}`. Up to 250 per run; each returns one row. |
| `includeDisasterHistory` | boolean | `true` | Count the commune's CatNat declarations and return the latest one. Turn off for faster, cheaper runs. |
| `includeNearbySites` | boolean | `true` | Count nearby ICPE and CASIAS sites and measure the distance to the nearest one. Turn off for faster, cheaper runs. |
| `siteRadiusMeters` | integer | `1000` | Radius for ICPE and CASIAS, 100–3,000 m. |

**Coverage: France.** Metropolitan France, Corsica and the five overseas departments (Guadeloupe, Martinique, French Guiana, Réunion, Mayotte). Coordinates outside France return a free `error` row without calling Géorisques.

#### Input example

```json
{
  "locations": [
    { "address": "1 Place Pey Berland, 33000 Bordeaux", "label": "Listing 42" },
    "45.6725,4.8560",
    "55 rue du Faubourg Saint-Honoré, 75008 Paris"
  ],
  "siteRadiusMeters": 1000
}
```

### Output

One flat row per location, in input order. Real output (run on 2026-09-23) for the point in Feyzin, next to the refinery:

```json
{
  "status": "ok",
  "input": "45.6725,4.8560",
  "label": null,
  "matchedAddress": "12 Rue Léon Blum, 69320 Feyzin",
  "matchScore": null,
  "matchType": null,
  "latitude": 45.6725,
  "longitude": 4.856,
  "communeName": "Feyzin",
  "postalCode": "69320",
  "inseeCode": "69276",
  "departmentCode": "69",
  "riskDetailLevel": "address",
  "floodRisk": "present",
  "groundwaterFloodRisk": "unknown",
  "coastalFloodRisk": "absent",
  "coastalErosionRisk": "absent",
  "earthquakeRisk": "moderate",
  "groundMovementRisk": "absent",
  "clayShrinkSwellRisk": "moderate",
  "avalancheRisk": "absent",
  "wildfireRisk": "absent",
  "volcanoRisk": "absent",
  "cycloneRisk": "absent",
  "radonRisk": "low",
  "industrialIcpeRisk": "high",
  "nuclearRisk": "absent",
  "hazardousPipelineRisk": "present",
  "soilPollutionRisk": "present",
  "damFailureRisk": "unknown",
  "miningRisk": "absent",
  "risksAtAddress": "flood, earthquake, clay shrink-swell, classified industrial installations (ICPE), hazardous material pipelines, soil pollution",
  "risksInCommune": "flood, groundwater rise, earthquake, clay shrink-swell, radon, classified industrial installations (ICPE), hazardous material pipelines, soil pollution, dam failure",
  "seismicZone": 3,
  "seismicZoneLabel": "3 - moderate",
  "radonPotentialClass": 1,
  "radonPotentialLabel": "1 - low radon potential",
  "catnatCount": 13,
  "catnatLatestYear": 2008,
  "catnatLatestType": "flood and/or mudflow",
  "catnatFloodCount": 9,
  "catnatDroughtCount": 0,
  "catnatStormCount": 1,
  "catnatGroundMovementCount": 2,
  "siteRadiusMeters": 1000,
  "icpeCount": 7,
  "icpeActiveCount": 4,
  "nearestIcpeMeters": 347,
  "sevesoCount": 2,
  "sevesoUpperTierCount": 1,
  "nearestSevesoMeters": 688,
  "casiasCount": 22,
  "nearestCasiasMeters": 176,
  "riskSummary": "Risks identified at this address: flood, earthquake, clay shrink-swell, classified industrial installations (ICPE), hazardous material pipelines, soil pollution; seismic zone 3 - moderate; radon potential class 1; 13 natural disaster declaration(s) in the commune, latest 2008 (flood and/or mudflow); 7 classified installation(s) within 1000 m, nearest 347 m, 2 seveso; 22 potentially polluted site(s) within 1000 m, nearest 176 m.",
  "officialReportUrl": "https://www.georisques.gouv.fr/mes-risques/connaitre-les-risques-pres-de-chez-moi/rapport2?...",
  "source": "Georisques (Ministere de la Transition ecologique / BRGM): ...",
  "attribution": "Source: Georisques ... Licence Ouverte / Open Licence 2.0 (Etalab). Retrieved 2026-09-23. Not an official Etat des Risques (ERP) document.",
  "sourceUrl": "https://www.georisques.gouv.fr/api/v1/resultats_rapport_risque?latlon=4.856000,45.672500&rayon=1000"
}
```

Three real rows side by side (radius 1,000 m):

| Input | Commune | Flood | Clay shrink-swell | Seismic zone | Radon | CatNat | ICPE | Seveso | CASIAS |
|---|---|---|---|---|---|---|---|---|---|
| 1 Place Pey Berland, 33000 Bordeaux | Bordeaux | unknown | high | 2 | 2 | 51 (latest 2024) | 16 | 0 | 292 |
| 45.6725,4.8560 (Feyzin) | Feyzin | present | moderate | 3 | 1 | 13 (latest 2008) | 7 | 2 (1 upper tier) | 22 |
| 55 rue du Faubourg Saint-Honoré, 75008 Paris | Paris | present | unknown | 1 | 1 | 20 (latest 2018) | 88 | 0 | 344 |

#### Rows you are not charged for

Unknown addresses, points at sea and invalid input return one row that says exactly what to change — and they are **free** (only the per-run start fee applies). Real output:

```json
{"status": "not_found", "input": "1 rue de la Paix", "matchType": "housenumber", "error": "Address \"1 rue de la Paix\" does not say which commune it is in, so it could be anywhere in France (the best guess was \"1 Rue de la Paix 50100 Cherbourg-en-Cotentin\"); add the postcode and the town, or pass \"latitude,longitude\" instead."}
{"status": "not_found", "input": "12 Downing Street, London", "matchType": "street", "error": "Address \"12 Downing Street, London\" had no confident match in the French national address database (best match \"12 Allée Jack London 94320 Thiais\", score 0.305, below 0.5); add the postcode and the commune, or pass \"latitude,longitude\" instead."}
{"status": "not_found", "input": "45.5,-2.5", "error": "Georisques has no risk report for this point; it is most likely at sea, on a lake or outside the covered territory. Check the coordinates, or pass an address instead."}
{"status": "error", "input": "52.52,13.405", "error": "Location #2 (52.52,13.405) is outside France; this Actor covers metropolitan France (including Corsica) and the overseas departments, e.g. \"44.8378,-0.5792\" for Bordeaux."}
```

#### Output fields

| Field | Meaning |
|---|---|
| `status` | `ok`, `not_found` or `error` |
| `input`, `label` | What you passed, and your label |
| `matchedAddress`, `matchScore`, `matchType` | The address the point was resolved to, the BAN match score (0–1) and its granularity (`housenumber`, `street`, `locality`, `municipality`). `matchScore` / `matchType` are empty when you pass coordinates |
| `latitude`, `longitude`, `communeName`, `postalCode`, `inseeCode`, `departmentCode` | The point that was checked and its commune |
| `riskDetailLevel` | `address` (normal) or `commune` — see "Known limitations" |
| `floodRisk`, `groundwaterFloodRisk`, `coastalFloodRisk`, `coastalErosionRisk`, `earthquakeRisk`, `groundMovementRisk`, `clayShrinkSwellRisk`, `avalancheRisk`, `wildfireRisk`, `volcanoRisk`, `cycloneRisk`, `radonRisk` | The 12 natural risks |
| `nuclearRisk`, `hazardousPipelineRisk`, `soilPollutionRisk`, `damFailureRisk`, `miningRisk`, `industrialIcpeRisk` | The 6 technological risks |
| `risksAtAddress`, `risksInCommune` | Comma-separated English names of the risks identified at the point, and for the whole commune |
| `seismicZone`, `seismicZoneLabel` | Official seismic zoning of the commune: 1 (very low) to 5 (high) |
| `radonPotentialClass`, `radonPotentialLabel` | Official radon potential of the commune: 1, 2 or 3 |
| `catnatCount`, `catnatLatestYear`, `catnatLatestType` | Number of *arrêtés de catastrophe naturelle* for the commune, and the most recent one |
| `catnatFloodCount`, `catnatDroughtCount`, `catnatStormCount`, `catnatGroundMovementCount` | The same declarations split by kind (the drought ones are the clay shrink-swell declarations) |
| `siteRadiusMeters`, `icpeCount`, `icpeActiveCount`, `nearestIcpeMeters` | Radius used, classified installations (ICPE) inside it, how many are in operation, and the distance to the nearest |
| `sevesoCount`, `sevesoUpperTierCount`, `nearestSevesoMeters` | Seveso sites within the radius (upper tier = *seuil haut*) and the distance to the nearest |
| `casiasCount`, `nearestCasiasMeters` | Potentially polluted sites (CASIAS) within the radius and the distance to the nearest |
| `riskSummary` | One English sentence summarising the row — handy for reports and for AI agents |
| `officialReportUrl` | The official Géorisques report page for the same point, to show a user |
| `source`, `attribution`, `sourceUrl` | The datasets used, the required Licence Ouverte attribution with the date read, and the exact Géorisques request |
| `error` | On `not_found` / `error` rows: one sentence explaining what to change |

#### How to read the risk values

| Value | Meaning |
|---|---|
| `absent` | The risk is not identified for this commune, or the point is outside the mapped area |
| `unknown` | The risk exists in the commune but no map covers this point precisely (Géorisques: *risque non connu*) |
| `present` | The risk is identified at this point |
| `low` / `moderate` / `high` | The risk is identified at this point with an exposure level (Géorisques: *faible* / *modéré* / *important*) |

### How much does a French property risk check cost?

This Actor uses **Pay per event** pricing — you pay per location assessed, not for compute time. The Store shows it as **$6.00 / 1,000 location risk checks**.

| Event | Price | When it is charged |
|---|---|---|
| Location risk check (`result-row`) | **$0.006** | Each `ok` row — one location assessed. This includes the occasional row that falls back to `riskDetailLevel: "commune"` (see "Known limitations") |
| Actor start | **$0.001** | Once per run, charged by Apify — including runs where every input turns out to be invalid |

`not_found` and `error` rows are **free**, so an address the Actor refuses to guess at costs you only the $0.001 run fee.

| What you are doing | Locations | Cost of the run |
|---|---|---|
| **What are the risks at this address?** (one address) | 1 | **$0.007** |
| The address was too vague, or the point is at sea (free `not_found` row) | 0 | **$0.001** |
| Default run (Bordeaux city hall + Feyzin) | 2 | $0.013 |
| A 50-property portfolio pass | 50 | $0.301 |
| Largest run the Actor allows | 250 | $1.501 |
| 1,000 locations (4 runs) | 1,000 | $6.004 |

For comparison, having an ERP produced by a *diagnostiqueur* costs roughly **€10–100 per property** and is valid for six months. Screening the same 250 properties here costs **$1.50**.

Set a **maximum cost per run** when you start the Actor to cap spending. When the cap is reached the Actor stops before checking any further location — those locations are never looked up and never charged — and says so in the run status message.

### How fast is it?

**Budget about 25–30 seconds per location** with every option on. The Géorisques point-report endpoint is slow and rate-limited, and this Actor deliberately paces its requests and retries rather than hammering a public service.

| Locations | Typical run time |
|---|---|
| 1–2 (the default input) | 45–60 seconds |
| 12 | about 5–6 minutes (measured on the Apify platform on 2026-09-23) |
| 250 (the maximum) | **about 2 hours** |

- Turning off `includeDisasterHistory` and `includeNearbySites` roughly halves the time.
- Locations in the **same commune** share their commune-level lookups, so a book of properties in one city is much faster than the same number spread across France.
- For long lists, raise the run timeout in **Run options** before you start (3 hours or more). If a run times out, the rows already written are kept and already charged.

If you need a single address answered in a browser-friendly time, send one location per run — that is under a minute.

### Use via API / MCP (AI agents)

**Apify API (HTTP).** Run the Actor and get the rows in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/japan-open-data~france-property-risk-lookup/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"locations": ["1 Place Pey Berland, 33000 Bordeaux", "45.6725,4.8560"]}'
```

Runs of more than a few locations take minutes, so for long lists start the run asynchronously (`/runs`) and read the dataset when it finishes, instead of `run-sync`.

**Python (apify-client):**

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
listings = [
    {"address": "1 Place Pey Berland, 33000 Bordeaux", "label": "42"},
    {"address": "1 Place de la Bourse, 33000 Bordeaux", "label": "43"},
]
run = client.actor("japan-open-data/france-property-risk-lookup").call(run_input={"locations": listings})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row["label"], row["status"], row.get("floodRisk"), row.get("seismicZone"), row.get("error"))
```

**MCP (Claude, ChatGPT, Cursor and other AI agents).** Add this Actor as a tool through the Apify MCP server (https://mcp.apify.com), for example with `?tools=japan-open-data/france-property-risk-lookup`. Only `locations` is required, so an agent can call it with `{"locations": ["<address>"]}`.

Recommended agent settings:

- "What are the risks at this French address?" → `{"locations": ["<full address with postcode>"]}` and read `riskSummary`.
- Many properties at once → send them all in one run (up to 250), each with a `label`, and match rows back by `label`. Expect minutes, not seconds.
- Risks only, fastest and cheapest per location → `{"includeNearbySites": false, "includeDisasterHistory": false}`.
- Always read `status` first. On `not_found` / `error`, show the `error` sentence — it says exactly what to add to the address.
- Always tell the user this is **not** the legal ERP document, and offer `officialReportUrl` as the official source for the same point.

**Summary for AI agents:** Input: `locations` (up to 250 French addresses or `"lat,long"` strings, optionally objects with a `label`), plus `includeDisasterHistory`, `includeNearbySites` and `siteRadiusMeters` (100–3,000). Output: one flat 58-field JSON row per location with `status`, the resolved point and commune (`matchedAddress`, `communeName`, `inseeCode`), 18 risk fields with values `absent` / `unknown` / `present` / `low` / `moderate` / `high`, `seismicZone` 1–5, `radonPotentialClass` 1–3, CatNat counts, ICPE / Seveso / CASIAS counts and distances, and a one-sentence `riskSummary`. No company, operator or site names. `not_found` / `error` rows are free. Roughly 25–30 seconds per location.

### FAQ

#### Can I use this as the État des Risques et Pollutions (ERP)?

No. The ERP is a legal form that the seller or the landlord — or their *diagnostiqueur* — must produce and sign on the official Cerfa form. This Actor gives you the same public Géorisques data in machine-readable form, for screening, for filling your own systems, and for deciding which properties need paid work.

#### I entered an address and got no result — why?

Almost always because the address does not name its commune. The French national address base (BAN) answers `"1 rue de la Paix"` with a **confident** match in Cherbourg-en-Cotentin, and `"Mont Blanc"` with a road in the Ain department — so a query naming neither a postcode nor a town could be anywhere in France. Rather than sell you the risks of the wrong town, the Actor returns a **free** `not_found` row telling you to add the postcode and the town, or to pass coordinates. Add `33000 Bordeaux` and it works.

#### Which risks are covered?

The 12 natural risks and 6 technological risks Géorisques publishes for a point: flood, groundwater rise, coastal flooding, coastline retreat, earthquake, ground movement, clay shrink-swell, avalanche, forest fire, volcano, cyclone, radon; and ICPE (classified industrial installations), nuclear, hazardous pipelines, soil pollution, dam failure, mining.

#### Does it return the names of factories or polluted sites?

No, by design. The underlying ICPE and CASIAS records contain operator names, and for farms those are often the names of individuals, so this Actor never outputs them. You get counts, distances, Seveso tiers and operating status only. **No personal data.**

#### Can I check hundreds of addresses at once?

Yes — up to 250 per run, each with an optional `label`, one row per location in input order. Budget about 25–30 seconds per location and raise the run timeout for long lists.

#### Does it cover the overseas departments?

Yes: Guadeloupe, Martinique, French Guiana, Réunion and Mayotte, as well as Corsica. Saint-Pierre-et-Miquelon, Saint-Martin, Polynesia and New Caledonia are not covered by these Géorisques layers.

#### How fresh is the data?

Every run queries the live Géorisques API, so you get the version published on the day you run it. BRGM and the ministry update the layers continuously; the date each row was read is written into its `attribution` field.

#### Is it legal to use this data commercially?

Yes. Géorisques data is published under the **Licence Ouverte / Open Licence 2.0**, which explicitly allows commercial reuse, modification and redistribution, with attribution and the date of the last update — both of which every row carries. This Actor is not affiliated with Géorisques, BRGM, Etalab or the French government, and it must not be presented as an official document.

#### Can I get the PPRN / PPRT plan zoning, or the full ICPE list?

Not yet. Open an issue on the **Issues** tab with what you need and how you would use it.

### Troubleshooting

| What you see | What it means | What to do |
|---|---|---|
| `not_found` — "does not say which commune it is in" | The address names no postcode and no town | Add the postcode and the commune, or pass `"latitude,longitude"` |
| `not_found` — "no confident match" (score below 0.5) | The address is not in the French address base | Check the spelling and the postcode; the row shows the best guess found |
| `not_found` — "most likely at sea, on a lake or outside the covered territory" | Géorisques has no report for that point | Check the coordinate order — it is `latitude,longitude` |
| `error` — "is outside France" | The coordinates are not in France or the overseas departments | Check that latitude and longitude are not swapped |
| `riskDetailLevel: "commune"` | The point-report endpoint was busy; the row fell back to commune-wide risks | Re-run just those locations later; they are usually `address` on a second attempt |
| The run timed out | The list was longer than the run timeout allows | Raise the timeout in **Run options** (3 hours for 250 locations), or split the list. Rows already written are kept |
| Fewer rows than locations sent | The **maximum cost per run** cap was reached | Raise the cap, or split the run. The locations that were skipped were never charged |

### Known limitations

- **France only.** Metropolitan France, Corsica and the five overseas departments. Other territories are not covered by these layers.
- **Speed.** About 25–30 seconds per location; 250 locations take roughly two hours. See "How fast is it?".
- **`riskDetailLevel: "commune"`.** The Géorisques point-report endpoint is rate-limited and sometimes refuses connections. The Actor retries it six times over about two minutes; if it still fails, the row falls back to the **commune-wide** risk list (GASPAR) instead of losing the location. Those rows are marked `riskDetailLevel: "commune"`: every risk is then `present` / `absent` for the whole commune, without point-level exposure levels, and `risksAtAddress` is empty. Seismic zone, radon class, CatNat history and the ICPE / CASIAS counts are unaffected. **These rows are charged like any other** — re-run those locations if you need the point-level detail. In heavily loaded batches measured on 2026-09-23 this affected roughly one location in ten.
- **A postcode or a commune name is one point.** A vague address resolves to the commune centre (`matchType: "municipality"`). For a specific building, pass a full street address or its coordinates.
- **Counts are what the official registers hold.** ICPE and CASIAS are not exhaustive, and the absence of a record does not prove a site is clean. CASIAS lists sites that *may* have been polluted — an inventory of former industrial activity, not a pollution measurement.
- **CatNat history is per commune, not per address.** Commune boundaries change over time, and a declaration does not mean every address in the commune was affected.
- **Clay shrink-swell (RGA) zoning changed on 1 July 2026.** The Actor returns whatever Géorisques publishes today; compare against the date on any older ERP you hold.
- **Not a survey.** These are public map-level data. They are not a soil study, a flood study or a radon measurement, and they do not say what will happen to an individual building.

### Data source and license

- **Risks at a point, seismic zoning, radon, CatNat, ICPE, CASIAS:** [Géorisques](https://www.georisques.gouv.fr/), operated by the French Ministry for Ecological Transition and BRGM. Public API v1, no key required.
- **Addresses:** [Base Adresse Nationale](https://adresse.data.gouv.fr/) (`api-adresse.data.gouv.fr`), the official French national address base.
- **Attribution (required and included in every row):** *Source: Géorisques — Ministère de la Transition écologique et de la Cohésion des territoires / BRGM*, reused under the **[Licence Ouverte / Open Licence 2.0](https://github.com/etalab/licence-ouverte/blob/master/LO.md)** (Etalab), which allows commercial reuse and modification provided the source and the date of the last update are shown. Every output row carries the source, the licence and the date the data was read (`attribution`), plus the exact request URL (`sourceUrl`).
- **Not an ERP.** Results are public screening data. They are **not** the legally required *État des Risques et Pollutions*, which must be produced on the official Cerfa form by the seller or the landlord.
- **Not affiliated.** This Actor is an independent project and is **not affiliated with, endorsed by or sponsored by** Géorisques, BRGM, Etalab or the French government. It does not use their logos and must not be presented as an official service.
- **Polite access.** Only the published Géorisques and BAN REST APIs are used — no scraping, no login, no key. Requests are made sequentially with a pause between them, a few per location, and the Actor identifies itself in its User-Agent. Commune-level layers are fetched once per commune per run.

### Privacy

**No personal data is requested for output and none is written to the dataset.** The raw ICPE register contains operator names (`raisonSociale`), SIRET numbers and street addresses, and the raw CASIAS inventory contains site names — for farms, both can be the name of a private individual. This Actor outputs **only** counts, distances, Seveso tiers, operating counts, official zone codes and the Actor's own English labels. The Géorisques layers that carry free-text incident descriptions (`mvt`, `cavites`) are not used at all.

The only address in a row is **the one you asked about**: your input, and the address the point resolved to (`matchedAddress`).

### More from Japan Open Data

- [UK Visa Sponsor Register Tracker (Daily Changes)](https://apify.com/japan-open-data/uk-visa-sponsor-register) — new, removed and downgraded UK visa sponsor licences from the official Home Office register, or check whether a company can sponsor workers.
- [US Flood Zone Lookup by Address (FEMA NFHL)](https://apify.com/japan-open-data/us-flood-zone-lookup) — official FEMA flood zone (A, AE, VE, X…), base flood elevation and FIRM panel for any U.S. address or coordinates.
- [UK Flood Risk Lookup by Postcode (England)](https://apify.com/japan-open-data/uk-flood-zone-lookup) — the UK sister for location risk checks: official Environment Agency flood zone 1/2/3, recorded floods and the nearest flood defence, one row per postcode.
- [UK HGV Operator Licence Lookup (Official DVSA)](https://apify.com/japan-open-data/uk-hgv-operator-licence) — the official DVSA / Traffic Commissioner register of UK truck and bus operator licences, by company name, postcode area or fleet size.
- [US Hail History by Location (NOAA NEXRAD Radar)](https://apify.com/japan-open-data/us-hail-history) — every hail day near any U.S. latitude/longitude with max estimated hail size, from NOAA NEXRAD radar.
- [US Storm Reports API: Hail, Wind & Tornado (NWS)](https://apify.com/japan-open-data/us-storm-reports-live) — U.S. hail, wind, tornado and flood reports from official NWS Local Storm Reports within hours (last 7 days).
- [Argentina Fuel Prices API by Station (Official)](https://apify.com/japan-open-data/argentina-fuel-station-prices) — last reported nafta, diesel and CNG prices at every Argentine gas station, with coordinates and distance.
- [Mexico Gas Prices API by Station (Official CNE)](https://apify.com/japan-open-data/mexico-fuel-station-prices) — today's regular, premium and diesel prices at every Mexican gas station.
- [TSA Checkpoint Travel Numbers (Daily, Weekly & YoY)](https://apify.com/japan-open-data/tsa-checkpoint-throughput) — daily U.S. TSA airport checkpoint traveler counts as clean JSON.
- [Japan Postal Code & Address in English](https://apify.com/japan-open-data/japan-postal-code-english) — Japanese postal codes and addresses in English/romaji, kanji and kana, from Japan Post's official data.
- [UK Waste Carrier Licence Check (Environment Agency)](https://apify.com/japan-open-data/uk-waste-carrier-register) — check whether a company is a registered waste carrier, broker or dealer in England by registration number, company name or postcode radius, from the Environment Agency's public register (companies and organisations only).
- [England Listed Building & Conservation Area Check](https://apify.com/japan-open-data/england-heritage-constraint-lookup) — official listed buildings, scheduled monuments, conservation areas and Article 4 directions for any postcode or coordinates in England, one row per location.
- [UK NHS Organisation Lookup (Official ODS Codes)](https://apify.com/japan-open-data/uk-nhs-organisation-lookup) — GP practices, pharmacies, dentists, hospitals and NHS trusts from the official ODS register, by postcode, type or ODS code (organisations only).

### Feedback

Found a wrong value, or need another layer (PPRN / PPRT plan zoning, TRI flood maps, the full ICPE list, address-level RGA polygons)? Open an issue on the Actor's **Issues** tab with your input and what you expected. Issues are answered quickly.

# Actor input Schema

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

Places in France to check, one per line: a French address (e.g. "1 Place Pey Berland, 33000 Bordeaux") or "latitude,longitude" in decimal degrees (e.g. "44.8378,-0.5792"). Via the API you can also pass objects like {"address": "1 Place Pey Berland, 33000 Bordeaux", "label": "Listing 42"} or {"latitude": 44.8378, "longitude": -0.5792, "label": "Site A"}. Up to 250 locations per run; each gets one output row. Metropolitan France, Corsica and the overseas departments (Guadeloupe, Martinique, French Guiana, Reunion, Mayotte).

## `includeDisasterHistory` (type: `boolean`):

Also count the commune's official "catastrophe naturelle" declarations (GASPAR) and return the latest one. Turn off for faster runs.

## `includeNearbySites` (type: `boolean`):

Also count the classified industrial installations (ICPE, including Seveso tiers) and the potentially polluted sites (CASIAS) around each location, with the distance to the nearest one. No site or operator names are returned. Turn off for faster runs.

## `siteRadiusMeters` (type: `integer`):

How far from each location to look for classified installations (ICPE) and potentially polluted sites (CASIAS), from 100 to 3,000 metres.

## Actor input object example

```json
{
  "locations": [
    "1 Place Pey Berland, 33000 Bordeaux",
    "45.6725,4.8560"
  ],
  "includeDisasterHistory": true,
  "includeNearbySites": true,
  "siteRadiusMeters": 1000
}
```

# Actor output Schema

## `results` (type: `string`):

Flood, clay shrink-swell, seismic zone, radon, industrial and soil pollution risks, CatNat history and nearby ICPE / CASIAS sites for each address or coordinate. Table view: overview.

# 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": [
        "1 Place Pey Berland, 33000 Bordeaux",
        "45.6725,4.8560"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("japan-open-data/france-property-risk-lookup").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": [
        "1 Place Pey Berland, 33000 Bordeaux",
        "45.6725,4.8560",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("japan-open-data/france-property-risk-lookup").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": [
    "1 Place Pey Berland, 33000 Bordeaux",
    "45.6725,4.8560"
  ]
}' |
apify call japan-open-data/france-property-risk-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,japan-open-data/france-property-risk-lookup"
        }
    }
}
```

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/5aoyruJ6f7nodGbbj/builds/OVdkXx9IcYGfg07vb/openapi.json
