# French Energy Ratings (DPE) – Address Lookup, Leads & Stats (`yck69/french-energy-ratings`) Actor

Official French energy performance certificates (DPE, 17M+ homes, updated daily): energy rating of any address, F/G 'energy sieves' in an area for renovation leads, label statistics, annual energy costs and rental-ban dates.

- **URL**: https://apify.com/yck69/french-energy-ratings.md
- **Developed by:** [yck](https://apify.com/yck69) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 energy certificates

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

## French Energy Ratings (DPE) – Address Lookup, Leads & Stats

Official **French energy performance certificates** (*DPE, diagnostic de performance énergétique*) from **ADEME**: 15.8 million existing homes and 1.5 million new homes since July 2021, **updated daily**.

- **Look up addresses**: every certificate at an address (all apartments of a building), with label, annual energy cost, heating system and insulation.
- **Search an area**: certificates around an address or in communes, postal codes or departments, e.g. every **F/G house heated with oil** in a department, for **renovation and heat-pump prospecting**.
- **Statistics**: label distribution, share of **energy sieves** (*passoires thermiques*, F and G), average consumption and energy cost by commune, postal code, building type, construction period or heating energy.

Every certificate comes with its **rental-ban date** under the *loi Climat et Résilience* (G: 2025, F: 2028, E: 2034).

**$1 per 1,000 certificates.** Free count preview.

### What data can you get?

<table>
<tr><td>🏷️ Energy label A to G</td><td>🌫️ Greenhouse-gas label</td><td>💶 Annual and monthly energy cost</td></tr>
<tr><td>⚡ kWh per m² per year</td><td>🔥 Heating energy and system</td><td>🚿 Hot water</td></tr>
<tr><td>🧱 Insulation</td><td>📅 Construction year</td><td>📏 Living area</td></tr>
<tr><td>⛔ Rental-ban date</td><td>📍 Address and GPS</td><td>📊 Area statistics</td></tr>
</table>

### How to use it

1. Click **Try for free** at the top of this page.
2. Choose **lookup** (an address), **search** (an area) or **stats**.
3. Filter by labels, building type, heating energy or construction period.
4. Click **Start**.
5. Download as JSON, CSV or Excel.

### Use cases

- **Renovation companies, RGE installers, heat-pump and insulation sellers**: find F/G homes, oil-heated houses, or buildings built before 1975 in your area.
- **Estate agents and buyers**: the energy label and running costs of a property before a visit, and how close it is to a rental ban.
- **Landlords and property managers**: check a portfolio of addresses against the rental-ban calendar.
- **Local authorities, analysts, journalists**: the share of energy sieves by neighbourhood.

### Input examples

**F and G apartments within 300 m of an address**

```json
{ "mode": "search", "address": "Place Bellecour, Lyon", "radiusKm": 0.3, "labels": ["F", "G"] }
```

**Oil-heated houses rated E–G in Loire-Atlantique (heat-pump leads)**

```json
{
    "mode": "search",
    "departments": ["44"],
    "buildingTypes": ["maison"],
    "heatingEnergies": ["Fioul domestique"],
    "labels": ["E", "F", "G"],
    "maxResults": 5000
}
```

**Certificates of a list of addresses**

```json
{ "mode": "address", "addresses": ["8 cours Bayard, Lyon", "1 rue de Rivoli, Paris"] }
```

**Share of energy sieves by arrondissement**

```json
{ "mode": "stats", "communes": ["Lyon"], "groupBy": "commune" }
```

### Output

**Certificate**

```json
{
    "dpeNumber": "2669E1234567X",
    "label": "F",
    "ghgLabel": "C",
    "isEnergySieve": true,
    "rentalBanDate": "2028-01-01",
    "isRentalBanned": false,
    "energyKwhPerM2Year": 352,
    "annualEnergyCost": 2048,
    "monthlyEnergyCost": 171,
    "costBreakdown": { "heating": 1580, "hotWater": 310, "cooling": 0, "lighting": 38, "auxiliaries": 120 },
    "issuedAt": "2026-10-15",
    "validUntil": "2036-10-14",
    "buildingType": "appartement",
    "constructionPeriod": "avant 1948",
    "livingArea": 52.6,
    "floor": 2,
    "address": "13 Rue Emile Zola 69002 Lyon",
    "latitude": 45.7591,
    "longitude": 4.8336,
    "distanceM": 177,
    "heatingEnergy": "Gaz naturel",
    "insulation": { "envelope": "insuffisante", "walls": "insuffisante", "windows": "moyenne", "floor": "bonne", "roof": "moyenne" }
}
```

**Statistics row**: `label`, `certificates`, `labels` (count per label), `labelSharesPct`, `energySievesPct`, `rentalBannedPct`, `averageEnergyKwhPerM2Year`, `averageAnnualEnergyCost`.

### Pricing

| Event | Price |
|---|---|
| Certificate | $0.001 |
| Statistics row | $0.003 |

Free: count previews, and addresses without a certificate.

### Good to know

- **Source**: ADEME open data ([DPE Logements existants](https://data.ademe.fr/datasets/dpe03existant), [DPE Logements neufs](https://data.ademe.fr/datasets/dpe02neuf)), *Licence Ouverte / Etalab 2.0*. Certificates issued since July 2021 (the current method).
- **Addresses** are the geocoded addresses from the certificates. A building often has one certificate per apartment, plus sometimes one for the whole building.
- **Energy costs** are the certificate's standardised estimates, not actual bills.
- **Rental bans** apply to mainland France; overseas departments follow a later calendar.
- ADEME limits request bursts; the Actor paces itself, so very large extractions take a little longer.

### More Actors from this developer

### FAQ

##### Can I use it through the API, Make, Zapier or Google Sheets?

Yes. Every run can be started and read through the [Apify API](https://docs.apify.com/api/v2) (JavaScript and Python clients, CLI, MCP), and Apify integrations connect it to Make, Zapier, n8n, Google Sheets, Slack, webhooks and more.

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

The Actor only reads public or official open data and doesn't log in anywhere. Check the source's licence and your local rules (for example GDPR when data concerns people) for your use case; if in doubt, ask a lawyer.

##### Something isn't working, or you need another field?

Open an issue on the **Issues** tab: feedback is read and answered.

# Actor input Schema

## `mode` (type: `string`):

<b>Search an area</b>: certificates around an address or in communes, postal codes or departments, e.g. every F/G house for renovation prospecting.<br><b>Look up addresses</b>: the certificates of each address in a list.<br><b>Statistics</b>: label distribution, share of F/G 'energy sieves', average consumption and energy cost by commune, postal code, building type, construction period or heating energy.

## `addresses` (type: `array`):

One address per line, e.g. <code>8 cours Bayard, Lyon</code>. Returns every certificate at that address (all apartments of a building).

## `address` (type: `string`):

Centre of the search, e.g. <code>Place Bellecour, Lyon</code>.

## `radiusKm` (type: `number`):

Up to 20 km.

## `latitude` (type: `number`):

Instead of an address.

## `longitude` (type: `number`):

Instead of an address.

## `communes` (type: `array`):

Names or INSEE codes, e.g. <code>Nantes</code>, <code>Paris</code> (all arrondissements).

## `postalCodes` (type: `array`):

e.g. <code>44000</code>.

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

e.g. <code>44</code>, <code>2A</code>.

## `labels` (type: `array`):

Tip: <b>F</b> and <b>G</b> are the 'energy sieves' (passoires thermiques) that landlords must renovate.

## `ghgLabels` (type: `array`):

GES label, A to G.

## `buildingTypes` (type: `array`):

Certificates are for an apartment, a house or a whole building.

## `constructionPeriods` (type: `array`):

As declared in the certificate.

## `minConstructionYear` (type: `integer`):

Construction year, when known.

## `maxConstructionYear` (type: `integer`):

Construction year, when known.

## `heatingEnergies` (type: `array`):

e.g. oil-heated homes for heat-pump installers.

## `minLivingArea` (type: `number`):

Of the dwelling.

## `maxLivingArea` (type: `number`):

Of the dwelling.

## `dateFrom` (type: `string`):

A date or a duration like <code>6 months</code>. Useful for monitoring new certificates.

## `dateTo` (type: `string`):

A date or a duration.

## `validOnly` (type: `boolean`):

Excludes expired certificates.

## `datasets` (type: `array`):

Existing homes (default) and/or new homes.

## `groupBy` (type: `string`):

One row per group with label counts and shares, F/G share, average consumption and energy cost.

## `sortBy` (type: `string`):

For searches.

## `maxResults` (type: `integer`):

Certificates or statistics rows.

## `countOnly` (type: `boolean`):

Count matching certificates. Nothing is charged.

## `proxyConfiguration` (type: `object`):

Usually not needed. ADEME briefly blocks IPs that send too many requests; the Actor slows down automatically.

## Actor input object example

```json
{
  "mode": "search",
  "address": "Place Bellecour, Lyon",
  "radiusKm": 0.3,
  "labels": [
    "F",
    "G"
  ],
  "validOnly": true,
  "datasets": [
    "existing"
  ],
  "groupBy": "commune",
  "sortBy": "newest",
  "maxResults": 20,
  "countOnly": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `certificates` (type: `string`):

Energy certificates.

## `stats` (type: `string`):

Statistics rows.

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

Every field.

# 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 = {
    "mode": "search",
    "address": "Place Bellecour, Lyon",
    "radiusKm": 0.3,
    "labels": [
        "F",
        "G"
    ],
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("yck69/french-energy-ratings").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 = {
    "mode": "search",
    "address": "Place Bellecour, Lyon",
    "radiusKm": 0.3,
    "labels": [
        "F",
        "G",
    ],
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("yck69/french-energy-ratings").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 '{
  "mode": "search",
  "address": "Place Bellecour, Lyon",
  "radiusKm": 0.3,
  "labels": [
    "F",
    "G"
  ],
  "maxResults": 20
}' |
apify call yck69/french-energy-ratings --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,yck69/french-energy-ratings"
        }
    }
}
```

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/kHGlxLDHWQgGIevDk/builds/rALRc5FuLzYlCXq28/openapi.json
