DVF, DPE, BAN, BDNB — quatre sources publiques, quatre APIs différentes. Endpoints, formats, limites et cas d'usage pour développeurs.
Les données immobilières publiques françaises forment un écosystème riche mais morcelé. DVF recense les transactions, l'ADEME publie les diagnostics énergétiques, la BAN gère les adresses, le CSTB décrit les bâtiments — chacun avec son propre endpoint, son format, ses limitations de débit et ses règles de pagination. Pour un développeur qui veut construire une application immobilière sérieuse, l'intégration de ces quatre sources représente plusieurs semaines de travail.
Ce guide recense les sept principales sources publiques disponibles en 2025, détaille les quatre APIs REST réellement utilisables, et explique pourquoi le croisement natif entre ces sources est plus complexe qu'il n'y paraît.
| Source | Données | Endpoint principal | Format | Mise à jour | Limite |
|---|---|---|---|---|---|
| DVF Étalab | Transactions immobilières | files.data.gouv.fr/geo-dvf |
CSV.gz | 2×/an | Téléchargement complet uniquement |
| DVF (communautaire) | Transactions par localisation | api.cquest.org/dvf |
GeoJSON/JSON | Dépend de DVF | ~1 000 résultats/requête |
| ADEME DPE | Diagnostics énergétiques | data.ademe.fr/data-fair |
JSON | Mensuelle | 10 000/requête, cursor |
| BAN | Géocodage adresses | api-adresse.data.gouv.fr |
JSON | Hebdomadaire | 50 requêtes/s (IP) |
| BDNB | Bâtiments (DPE, surface, année) | files.data.gouv.fr/bdnb |
CSV.gz | Annuelle | Téléchargement complet |
| BPE | Équipements (écoles, médecins…) | data.gouv.fr |
CSV | Annuelle | Téléchargement |
| Cadastre (API Carto) | Parcelles, bâtiments | apicarto.ign.fr |
GeoJSON | Continue | 100 req/s (clé gratuite) |
Les sources BDNB, BPE et DVF Étalab n'exposent pas d'API REST à proprement parler — elles mettent à disposition des fichiers complets à télécharger. Pour des lookups ponctuels ou des intégrations temps réel, seules quatre APIs REST sont exploitables : DVF communautaire, ADEME DPE, BAN et API Carto IGN.
Maintenue par Christian Quest, cette API REST expose le registre DVF avec filtrage géographique par commune (code_commune), département ou rayon autour d'un point (paramètres lat, lon, dist en mètres). Elle retourne du GeoJSON — les résultats sont limités à environ 1 000 entrées par requête, sans mécanisme de cursor officiel. Pour des volumes importants, le téléchargement CSV Étalab reste nécessaire. Aucune authentification requise.
# Transactions dans un rayon de 500m autour d'un point
curl "https://api.cquest.org/dvf?lat=48.8566&lon=2.3522&dist=500"
L'API Data Fair de l'ADEME expose les diagnostics DPE via un endpoint REST paginé par cursor. Chaque requête retourne jusqu'à 10 000 entrées. Le paramètre select permet de restreindre les colonnes retournées. La pagination se fait via le champ next présent dans la réponse JSON, contenant la valeur cursor à passer au paramètre after de la requête suivante. Aucune clé API n'est requise pour un usage raisonnable.
import requests
url = "https://data.ademe.fr/data-fair/api/v1/datasets/dpe-v2-logements-existants/lines"
params = {
"size": 10000,
"select": "N°DPE,Code_postal_(BAN),Etiquette_DPE,Surface_habitable_logement",
"after": ""
}
r = requests.get(url, params=params)
data = r.json()
next_cursor = data.get("next", "")
L'API BAN propose deux modes : géocodage unitaire (GET /search/) et géocodage batch par upload CSV (POST /search/csv/). Le mode unitaire est limité à 50 requêtes par seconde par IP. Le mode batch accepte des fichiers jusqu'à 50 000 adresses en une seule requête. La réponse inclut le champ id (le ban_id) et un score de confiance entre 0 et 1. Le ban_id est l'identifiant pivot pour croiser DVF, DPE et BDNB.
# Géocodage d'une adresse
curl "https://api-adresse.data.gouv.fr/search/?q=8+bd+du+Port+Amiens&limit=1"
# Retourne: { "features": [{ "properties": { "id": "80021_6590_00008", "score": 0.97 } }] }
curl -X POST https://api-adresse.data.gouv.fr/search/csv/ \
-F data=@adresses.csv \
-F columns=adresse \
-F columns=code_postal
L'API Carto de l'IGN expose le plan cadastral vectoriel en GeoJSON. Le module /cadastre/parcelle permet de récupérer la géométrie d'une parcelle à partir de son code INSEE, de sa section et de son numéro. Le module /cadastre/batiment retourne les bâtiments d'une parcelle ou d'une emprise géographique. Une clé gratuite est disponible sur geoservices.ign.fr — sans clé, la limite est de 100 requêtes par seconde.
curl "https://apicarto.ign.fr/api/cadastre/parcelle?code_insee=75056§ion=AX&numero=0042"
Le principal obstacle au croisement de DVF, DPE et BDNB n'est pas technique — c'est l'absence d'identifiant commun natif entre ces sources. DVF enregistre des adresses en texte libre, sous forme de colonnes séparées. L'ADEME DPE utilise un champ d'adresse concaténé, avec des variantes d'orthographe fréquentes. La BDNB référence ses bâtiments par id_bdnb et id_parcelle_cadastrale.
Le ban_id est le pivot universel recommandé. Il s'obtient en géocodant chaque adresse via l'API BAN, qui retourne un identifiant pérenne de la forme code_commune_voie_numero. Une fois ce ban_id obtenu, il peut servir de clé de jointure entre les trois référentiels — à condition que chaque source ait été géocodée avec la même méthode, ce qui représente un travail préalable conséquent sur des dizaines de millions d'enregistrements.
Trois complications pratiques s'ajoutent. Premièrement, le décalage temporel : DVF a un lag de 6 mois. Deuxièmement, la qualité du géocodage varie selon les adresses rurales ou les voies non normalisées. Troisièmement, aucune de ces APIs publiques ne propose de SLA de disponibilité.
L'API Intent Analytics résout ce problème en pré-joignant les sept référentiels sur le ban_id. Un seul appel REST retourne : ban_id, dvf_prix_m2 (médiane 24 mois glissants), dpe_classe, bdnb_annee_construction et bpe_score_equipements — avec un indice de confiance par champ et un SLA garanti.
| Besoin | API recommandée | Raison |
|---|---|---|
| Prix transactions d'une commune | DVF Étalab CSV | Volume + fiabilité |
| DPE d'un logement précis | ADEME DPE REST | Lookup rapide par adresse |
| Géocoder une liste d'adresses | BAN batch CSV | Gratuit, 50 000 adresses/appel |
| Forme d'une parcelle | API Carto IGN | GeoJSON natif, temps réel |
| Tout croiser sans dev | Intent Analytics API | Données pré-jointes, SLA garanti |
| Analyse nationale bulk | Téléchargements CSV | Seule option pour gros volumes |
Oui, via l'API communautaire maintenue par Christian Quest sur api.cquest.org/dvf. Elle expose les transactions DVF filtrables par commune, département ou rayon géographique. L'API officielle DGFiP ne propose pas d'endpoint REST direct — le téléchargement CSV reste la méthode de référence.
Oui. L'API ADEME DPE (data.ademe.fr/data-fair) est gratuite et sans authentification pour un usage raisonnable. Elle utilise la pagination par cursor et retourne jusqu'à 10 000 entrées par requête. Pour des volumes importants, l'export CSV complet est recommandé.
La BAN (Base Adresse Nationale) dispose d'une API de géocodage gratuite (api-adresse.data.gouv.fr). Elle permet de convertir une adresse textuelle en coordonnées GPS et de récupérer le ban_id (identifiant universel d'adresse), qui sert de clé de jointure entre DVF, DPE et BDNB.
Pas nativement avec les APIs publiques — chaque source a son propre endpoint. Il faut géocoder d'abord via BAN pour obtenir le ban_id, puis appeler chaque API séparément et joindre les résultats. L'API Intent Analytics unifie ce croisement en un seul appel REST avec tous les indicateurs pré-calculés.
Pour éviter de gérer 4 APIs, licences et formats différents :