# ADEME DPE Scraper: 25M+ French Energy Diagnostics (`dltik/ademe-dpe-scraper`) Actor

Search 25M+ French Energy Performance Diagnostics from the official ADEME database. Filter by city, postal, dept, DPE class (A-G), GES class, surface, year built. Get class, GES, address, GPS, energy use. Mandatory data in French real-estate ads. For agents, hunters, marchands, renovators. $2/1K.

- **URL**: https://apify.com/dltik/ademe-dpe-scraper.md
- **Developed by:** [dltik](https://apify.com/dltik) (community)
- **Categories:** Real estate, Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 diagnostic fetcheds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## ADEME DPE Scraper — 25M+ French Energy Performance Diagnostics (DPE) API

> Search the **official ADEME DPE database** — every Energy Performance Diagnostic ever issued in France. **25M+ records** covering 14M apartments + houses post-2021, plus the pre-2021 archive. Filter by city, postal code, department, DPE class (A-G), GES class, surface, year built. Get class, GES, address, GPS, energy consumption. **HTTP-only, $0.002 per diagnostic**.

⭐ **Bookmark this ADEME DPE Scraper** — Apify ranks actors by bookmarks, so it directly helps the visibility of this scraper on the Apify Store.

### What is the ADEME DPE Scraper?

The **ADEME DPE Scraper** is an Apify actor that queries the [official ADEME DPE database](https://data.ademe.fr/datasets?topics=Habitat) — France's mandatory Energy Performance Diagnostic registry. Every house and apartment sold or rented in France since 2006 has a DPE on file with ADEME. This scraper makes those 25M+ records searchable and exportable: filter by location (city, postal, department, GPS bounding box), class (A through G), GES, surface area, year of construction, type (sale vs rental).

Backed by the free official ADEME open data API. No authentication, no rate limits to fight, no API key.

### Use cases

- **Real estate energy intelligence** — find every E/F/G-rated home in a department for retrofit prospecting.
- **Compliance / passoires thermiques tracking** — French law bans E/F/G rentals progressively; this scraper surfaces them.
- **Property valuation enrichment** — auto-fill DPE class on a CRM of properties from address.
- **Renewable energy lead-gen** — homes with old DPE are prime solar / heat-pump candidates.
- **Market research** — DPE distribution per city, per year, per surface band.

### Input

```json
{
  "city": "Paris",
  "dpeClass": ["E", "F", "G"],
  "yearBuiltMax": 1980,
  "limit": 1000
}
````

### Output

```json
{
  "address": "12 RUE EXEMPLE, 75011 PARIS",
  "dpe_class": "F",
  "ges_class": "E",
  "surface_m2": 65.2,
  "year_built": 1962,
  "energy_consumption_kwh_m2_year": 358,
  "ges_emission_kg_co2_m2_year": 76,
  "latitude": 48.8584,
  "longitude": 2.3522,
  "diagnostic_date": "2024-03-12",
  "ademe_id": "2475E1234567"
}
```

### Pricing

**PAY\_PER\_EVENT — $0.002 per diagnostic fetched** (= $2 per 1,000). Free actor starts. No charge on errors.

### FAQ — ADEME DPE API alternatives

**Does this work for the new DPE (post-July 2021) and the old one?** Yes — both datasets are queryable. The output flags which version each record came from.

**What about commercial buildings?** ADEME also publishes DPE for tertiary buildings; this scraper can target that dataset too via the `dataset` parameter.

**Can I subscribe to new DPE for my CRM?** Yes — schedule the actor daily with a date filter to catch only the latest diagnostics.

***

⭐ **Found this useful? Bookmark this ADEME DPE Scraper** — it's the strongest signal for Apify Store ranking.

#### Related actors

- [DVF France — Real Estate Transactions](https://apify.com/dltik/dvf-france-transactions) — French property transactions since 2014
- [Pige Immo FR — Multi-source listings](https://apify.com/dltik/pige-immo-fr-scraper) — Leboncoin + SeLoger + PAP + Bien'ici aggregated
- [Géocodeur INSEE](https://apify.com/dltik/geocodeur-france-insee) — address → INSEE code + GPS

License: MIT · Author: [dltik](https://apify.com/dltik)

# Actor input Schema

## `dataset` (type: `string`):

Which ADEME DPE dataset to query. 'logements-existants' covers most use-cases (post-July-2021, 14.6M records).

## `code_postal` (type: `string`):

5-digit postal code. Examples: '75001' (Paris 1), '69002' (Lyon 2), '13001' (Marseille 1).

## `code_insee` (type: `string`):

INSEE city code (different from postal). Example: '75101' for Paris 1st arrondissement.

## `nom_commune` (type: `string`):

Exact city name (case-sensitive in some cases). Example: 'Paris', 'Lyon', 'Marseille'.

## `code_departement` (type: `string`):

Two-digit department code (e.g. '75', '69', '13', '92').

## `code_region` (type: `string`):

Two-digit region code (11 = Île-de-France, 84 = Auvergne-Rhône-Alpes, 93 = PACA).

## `etiquette_dpe` (type: `array`):

Filter by energy class A (best) to G (worst, 'passoire thermique'). Multiple = OR. Example: \['F','G'] for 'passoires'.

## `etiquette_ges` (type: `array`):

Filter by GHG emission class A-G.

## `type_batiment` (type: `string`):

'appartement', 'maison', or 'immeuble'.

## `type_installation_chauffage` (type: `string`):

'individuel' or 'collectif'.

## `zone_climatique` (type: `string`):

FR climate zone: H1a, H1b, H1c, H2a, H2b, H2c, H2d, H3.

## `surface_min` (type: `integer`):

Minimum living area (surface habitable) in m².

## `surface_max` (type: `integer`):

Maximum living area in m².

## `annee_construction_min` (type: `integer`):

Earliest year of construction.

## `annee_construction_max` (type: `integer`):

Latest year of construction.

## `date_etablissement_apres` (type: `string`):

ISO date — only DPE established after this date.

## `date_etablissement_avant` (type: `string`):

ISO date — only DPE established before this date.

## `validite_apres` (type: `string`):

ISO date — only DPE valid until on/after this date.

## `freeText` (type: `string`):

Full-text search across all fields. Combine with filters above.

## `raw_qs` (type: `string`):

Append a raw Lucene-style query to the auto-built one. Example: 'consommation\_energie\_finale:\[100 TO 200]'.

## `addLatLon` (type: `boolean`):

Auto-convert ADEME's Lambert-93 coords to standard lat/lon (WGS84).

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

Max diagnostics to return.

## `proxyConfig` (type: `object`):

Optional. ADEME open API rarely needs proxy.

## Actor input object example

```json
{
  "dataset": "logements-existants",
  "etiquette_dpe": [],
  "etiquette_ges": [],
  "addLatLon": true,
  "maxResults": 100,
  "proxyConfig": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

DPE records.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("dltik/ademe-dpe-scraper").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("dltik/ademe-dpe-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{}' |
apify call dltik/ademe-dpe-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=dltik/ademe-dpe-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "ADEME DPE Scraper: 25M+ French Energy Diagnostics",
        "description": "Search 25M+ French Energy Performance Diagnostics from the official ADEME database. Filter by city, postal, dept, DPE class (A-G), GES class, surface, year built. Get class, GES, address, GPS, energy use. Mandatory data in French real-estate ads. For agents, hunters, marchands, renovators. $2/1K.",
        "version": "1.0",
        "x-build-id": "OdRe09YeVQqHnZ0JQ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/dltik~ademe-dpe-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-dltik-ademe-dpe-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/dltik~ademe-dpe-scraper/runs": {
            "post": {
                "operationId": "runs-sync-dltik-ademe-dpe-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/dltik~ademe-dpe-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-dltik-ademe-dpe-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "dataset": {
                        "title": "Dataset",
                        "enum": [
                            "logements-existants",
                            "logements-anciens",
                            "logements-neufs",
                            "tertiaire-recent",
                            "tertiaire-ancien"
                        ],
                        "type": "string",
                        "description": "Which ADEME DPE dataset to query. 'logements-existants' covers most use-cases (post-July-2021, 14.6M records).",
                        "default": "logements-existants"
                    },
                    "code_postal": {
                        "title": "Postal code",
                        "type": "string",
                        "description": "5-digit postal code. Examples: '75001' (Paris 1), '69002' (Lyon 2), '13001' (Marseille 1)."
                    },
                    "code_insee": {
                        "title": "INSEE code",
                        "type": "string",
                        "description": "INSEE city code (different from postal). Example: '75101' for Paris 1st arrondissement."
                    },
                    "nom_commune": {
                        "title": "City name",
                        "type": "string",
                        "description": "Exact city name (case-sensitive in some cases). Example: 'Paris', 'Lyon', 'Marseille'."
                    },
                    "code_departement": {
                        "title": "Department code",
                        "type": "string",
                        "description": "Two-digit department code (e.g. '75', '69', '13', '92')."
                    },
                    "code_region": {
                        "title": "Region code",
                        "type": "string",
                        "description": "Two-digit region code (11 = Île-de-France, 84 = Auvergne-Rhône-Alpes, 93 = PACA)."
                    },
                    "etiquette_dpe": {
                        "title": "DPE class",
                        "type": "array",
                        "description": "Filter by energy class A (best) to G (worst, 'passoire thermique'). Multiple = OR. Example: ['F','G'] for 'passoires'.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "etiquette_ges": {
                        "title": "GES class",
                        "type": "array",
                        "description": "Filter by GHG emission class A-G.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "type_batiment": {
                        "title": "Building type",
                        "enum": [
                            "appartement",
                            "maison",
                            "immeuble"
                        ],
                        "type": "string",
                        "description": "'appartement', 'maison', or 'immeuble'."
                    },
                    "type_installation_chauffage": {
                        "title": "Heating type",
                        "enum": [
                            "individuel",
                            "collectif",
                            "mixte"
                        ],
                        "type": "string",
                        "description": "'individuel' or 'collectif'."
                    },
                    "zone_climatique": {
                        "title": "Climate zone",
                        "type": "string",
                        "description": "FR climate zone: H1a, H1b, H1c, H2a, H2b, H2c, H2d, H3."
                    },
                    "surface_min": {
                        "title": "Min surface (m²)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum living area (surface habitable) in m²."
                    },
                    "surface_max": {
                        "title": "Max surface (m²)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum living area in m²."
                    },
                    "annee_construction_min": {
                        "title": "Min construction year",
                        "minimum": 1700,
                        "maximum": 2030,
                        "type": "integer",
                        "description": "Earliest year of construction."
                    },
                    "annee_construction_max": {
                        "title": "Max construction year",
                        "minimum": 1700,
                        "maximum": 2030,
                        "type": "integer",
                        "description": "Latest year of construction."
                    },
                    "date_etablissement_apres": {
                        "title": "DPE established after",
                        "type": "string",
                        "description": "ISO date — only DPE established after this date."
                    },
                    "date_etablissement_avant": {
                        "title": "DPE established before",
                        "type": "string",
                        "description": "ISO date — only DPE established before this date."
                    },
                    "validite_apres": {
                        "title": "Valid until after",
                        "type": "string",
                        "description": "ISO date — only DPE valid until on/after this date."
                    },
                    "freeText": {
                        "title": "Free text search",
                        "type": "string",
                        "description": "Full-text search across all fields. Combine with filters above."
                    },
                    "raw_qs": {
                        "title": "Raw qs query (advanced)",
                        "type": "string",
                        "description": "Append a raw Lucene-style query to the auto-built one. Example: 'consommation_energie_finale:[100 TO 200]'."
                    },
                    "addLatLon": {
                        "title": "Convert Lambert-93 → lat/lon",
                        "type": "boolean",
                        "description": "Auto-convert ADEME's Lambert-93 coords to standard lat/lon (WGS84).",
                        "default": true
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Max diagnostics to return.",
                        "default": 100
                    },
                    "proxyConfig": {
                        "title": "Proxy (rarely needed)",
                        "type": "object",
                        "description": "Optional. ADEME open API rarely needs proxy.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
