Croiser DVF, DPE et BDNB sur une adresse : relier une vente à son diagnostic énergétique et à son bâtiment
Les ventes DVF de la DGFiP, les diagnostics de performance énergétique de l'ADEME et la base nationale des bâtiments du CSTB ne partagent aucun identifiant. Normi les relie à la vente : chaque transaction DVF reçoit une identité durable, puis le diagnostic DPE le plus proche à moins de 200 mètres et le bâtiment BDNB le plus proche à moins de 200 mètres. Aujourd'hui, 13 578 762 ventes valorisées sur 18 102 579 (75 %) ont un DPE rattaché, et 17 813 826 lignes DVF ont un bâtiment BDNB, à 13,3 m en médiane. Le tout s'interroge par une API REST et par un serveur MCP.
Ce rattachement est un rattachement de proximité, pas une identité de logement : il est solide pour des statistiques par classe DPE ou par époque de construction, pas pour affirmer l'étiquette d'un appartement précis. Cette page explique pourquoi, avec un exemple réel.
Publié le 24 septembre 2026 · exemple capturé en production le même jour · chaque chiffre renvoie à sa source en bas de page · Read in English
Le problème : trois bases, aucune clé commune
Chacune des trois bases décrit un objet différent, et c'est précisément ce qui rend la jointure difficile.
DVF (DGFiP)
Décrit une mutation : une date, un prix, une adresse, une ou plusieurs parcelles et locaux. Une même vente produit souvent plusieurs lignes (un appartement, sa cave, son parking), et l'identifiant de ligne est régénéré à chaque rechargement du fichier.
DPE (ADEME)
Décrit un logement ou un bâtiment à la date d'un diagnostic. Un immeuble en porte des dizaines, un même logement en accumule plusieurs au fil des ventes et des locations, et la méthode a changé en juillet 2021.
BDNB (CSTB)
Décrit un bâtiment, ou un groupe de bâtiments, avec son année de construction, ses matériaux, son nombre de logements et d'étages. Il ne connaît ni la vente ni le logement.
Les adresses ne sont pas normalisées de la même façon dans les trois fichiers, la référence cadastrale n'est renseignée que dans une partie des DPE et n'est unique qu'au sein d'une commune, et une vente peut correspondre à plusieurs diagnostics. Il n'existe donc pas de jointure exacte : il n'y a que des appariements, plus ou moins sûrs, qu'il faut documenter.
Comment Normi fait la jointure
1. Une identité durable pour chaque vente
L'identifiant de ligne DVF change à chaque rechargement : l'utiliser comme clé de jointure, c'est perdre tous les appariements au rechargement suivant. Normi calcule donc un
transaction_group_idstable, dérivé de la date, de l'adresse normalisée et du prix. Les appariements DPE et BDNB sont stockés sur cette clé, et une table de correspondance (18 119 513 lignes) fait le lien avec l'identifiant courant exposé par l'API.2. Vente → DPE : le diagnostic le plus proche
Pour chaque vente géocodée, hors ventes en bloc et prix aberrants, Normi retient le diagnostic ADEME le plus proche, dans le même département, à moins de 200 mètres, établi entre 10 ans avant et 1 an après la vente. Un seul diagnostic par vente, ce qui évite qu'une vente dans un grand immeuble pèse autant de fois qu'il y a de logements. La surface et le type de bien ne sont pas comparés : c'est un choix de couverture, et sa conséquence est détaillée plus bas.
3. Vente → BDNB : le bâtiment le plus proche
Même principe, sans fenêtre de date : le bâtiment BDNB le plus proche à moins de 200 mètres, dans le même département. La distance est conservée et renvoyée par l'API dans
match_distance_m. Sur les 17 813 826 rattachements, la distance médiane est de 13,3 m et 95 % sont à moins de 49,8 m. La table n'est publiée que si la couverture par département et la part de rattachements qui se résolvent vers une vente passent leurs seuils de contrôle.
- La proximité n'est pas une identité. En habitat collectif, le diagnostic le plus proche est souvent celui d'un autre logement de l'immeuble, voire d'un immeuble voisin. L'exemple ci-dessous en montre un cas réel.
- Les DPE d'avant juillet 2021 suivent l'ancienne méthode, qui n'est pas comparable étiquette pour étiquette avec la méthode actuelle.
- L'Alsace-Moselle et Mayotte n'ont aucune donnée : le DVF ne les couvre pas (0 commune DVF en Moselle, Bas-Rhin, Haut-Rhin et à Mayotte).
- Le DPE d'une vente isolée par
GET /v1/transactions/{id}/dpefait l'objet d'un correctif : sa recherche par référence cadastrale ne filtre pas encore la commune. Tant qu'il n'est pas déployé, cette page ne s'appuie pas sur cet appel, et nous vous déconseillons de l'utiliser pour une vente précise.
Ce que le croisement permet
L'appariement sert d'abord à des statistiques de zone, où les erreurs individuelles se compensent. Quatre analyses en découlent directement, chacune disponible en REST et en outil MCP.
Valeur verte par classe DPE
Prix au m² médian et quartiles par étiquette A à G sur un code postal ou une commune, et l'écart à la médiane locale.
GET /v1/stats/dpe-premium
MCP : analyze_dpe_price_premium · 10 crédits
DocumentationExposition aux passoires thermiques
Part des ventes classées F et G, par type de bien et par année, là où l'interdiction progressive de location pèse sur les prix.
GET /v1/dpe/passoires-thermiques
MCP : analyze_dpe_price_and_thermal_risk · 10 crédits
DocumentationEffet de l'époque de construction
Prix au m² médian par tranche d'année de construction BDNB, comparé à la médiane de la zone.
GET /v1/bdnb/age-stats
MCP : analyze_building_age_price_impact · 10 crédits
DocumentationPotentiel de rénovation
Volume de ventes dans le bâti ancien, leur décote par rapport à la zone et les matériaux dominants, résumés en un score.
GET /v1/bdnb/renovation-score
MCP : score_renovation_potential · 10 crédits
DocumentationExemple réel : une vente à Rennes, en trois appels
Point de départ : la rue Gilles Languedoc à Rennes (35000). Les réponses ci-dessous ont été capturées en production le 24 septembre 2026, raccourcies mais non modifiées. L'exemple part d'une rue plutôt que d'un numéro, et le DVF ne contient aucun nom d'acheteur ni de vendeur.
# 1. Toutes les ventes de la rue → un identifiant de transaction (20 crédits) curl -H "X-API-Key: $NORMI_API_KEY" \ "https://mcp.normi.fr/v1/property-history?address=rue%20Gilles%20Languedoc&code_postal=35000" # 2. Le bâtiment BDNB rattaché à cette vente (2 crédits) curl -H "X-API-Key: $NORMI_API_KEY" \ "https://mcp.normi.fr/v1/transactions/18109193/bdnb" # 3. Le prix au m² par classe DPE dans le code postal (10 crédits) curl -H "X-API-Key: $NORMI_API_KEY" \ "https://mcp.normi.fr/v1/stats/dpe-premium?code_postal=35000&type_local=Appartement"
1. L'historique de la rue donne l'identifiant de la vente
Vingt-deux ventes depuis 2014. Celle qui nous intéresse : un appartement de 4 pièces, 86.59 m², vendu le 30 décembre 2025 à 6 045 €/m². Les ventes en VEFA de 2022 et 2024 dans la même rue signalent déjà un programme neuf.
{
"address_normalized": "… RUE GILLES LANGUEDOC, 35000 RENNES",
"transactions": [
{
"id": 18109193,
"date": "2025-12-30",
"price_per_m2": 6045,
"surface": 86.59,
"type": "Appartement",
"rooms": 4,
"nature": "Vente"
},
{
"id": 16417807,
"date": "2024-11-29",
"price_per_m2": 5908,
"surface": 76,
"type": "Appartement",
"rooms": 3,
"nature": "Vente en l'état futur d'achèvement"
},
{
"id": 16409675,
"date": "2024-11-28",
"price_per_m2": 6453,
"surface": 86,
"type": "Appartement",
"rooms": 4,
"nature": "Vente en l'état futur d'achèvement"
}
],
"note": "Found 22 transaction(s) at this address"
}2. Le bâtiment BDNB confirme un immeuble de 2023
{
"building": {
"batiment_groupe_id": "bdnb-bg-7LTJ-8KUT-9D4U",
"annee_construction": 2023,
"nb_logements": 21,
"nb_etages": 6,
"materiaux_murs": "INDETERMINE",
"materiaux_toit": "INDETERMINE",
"usage_principal": "Résidentiel collectif",
"usage_niveau_1": "Résidentiel collectif",
"dvf_nb_mutations": 5,
"dvf_prix_m2_median": 6453,
"match_distance_m": 8
},
"transaction_id": "18109193",
"_credits": {
"used": 2,
"remaining": "…"
}
}Rattaché à 8 mètres : un immeuble résidentiel collectif de 21 logements sur 6 niveaux, construit en 2023. C'est cohérent avec les ventes en VEFA de l'historique. Les matériaux sont indéterminés : la BDNB ne les renseigne pas encore pour ce bâtiment récent.
3. Le prix au m² par classe DPE situe la vente dans son marché
| Classe | Ventes | Médiane €/m² | Écart à la médiane |
|---|---|---|---|
| A | 372 | 3 295 | +3,2 % |
| B | 1 348 | 3 371 | +5,6 % |
| C | 3 004 | 3 261 | +2,1 % |
| D | 4 768 | 3 032 | -5 % |
| E | 3 325 | 3 167 | -0,8 % |
| F | 1 188 | 3 361 | +5,3 % |
| G | 404 | 3 593 | +12,5 % |
À 6 045 €/m², la vente se situe nettement au-dessus de toutes les médianes de classe du 35000, ce qu'on attend d'un appartement neuf. Le tableau montre aussi pourquoi une valeur verte ne se lit jamais brute : ici, les logements classés G se vendent plus cher au m² que la médiane. Une explication plausible, que ce tableau ne suffit pas à établir : dans ce code postal central, les passoires sont souvent de petites surfaces anciennes et bien placées, deux facteurs qui élèvent le prix au m². La classe DPE se confond alors avec la localisation et la surface ; il faut comparer à type, surface et quartier comparables avant de conclure.
La même question en MCP
Depuis Claude, ChatGPT ou tout client MCP connecté à Normi, une seule demande suffit. L'assistant enchaîne lookup_property_history, get_building_characteristics puis analyze_dpe_price_premium, pour les mêmes 32 crédits.
Retrouve les ventes rue Gilles Languedoc à Rennes (35000). Pour l'appartement de 4 pièces vendu le 30 décembre 2025, donne-moi les caractéristiques du bâtiment, puis compare son prix au m² à la médiane par classe DPE des appartements du 35000.
Pour brancher le serveur : installer le serveur MCP Normi.
Chiffres du corpus
Ces chiffres sont lus dans un instantané du corpus recalculé après chaque chargement de données, jamais calculés à la volée. Le chiffre DPE compte des transactions distinctes, pas des paires d'appariement.
Méthodologie. Mesures effectuées le 9 septembre 2026 sur le corpus Normi lui-même. « Valorisées et typées » signifie : prix renseigné et type de bien résolu — c'est la population sur laquelle portent les statistiques de l'API, pas le nombre de lignes du fichier brut. Le chiffre DPE compte des transactions distinctes rattachées à un diagnostic, et non des paires d'appariement : chaque vente reçoit le diagnostic le plus proche à moins de 200 mètres, établi entre dix ans avant et un an après la mutation. C'est un rattachement de proximité, pas la preuve que le diagnostic porte sur le logement vendu.
Sources : DVF (DGFiP), DPE (ADEME), BDNB (CSTB), SIRENE (INSEE), sous licence ouverte. Aucune de ces valeurs n'est reprise d'un tiers : elles sont recalculées sur les données ingérées par Normi.
- lignes DVF rattachées à un bâtiment BDNB
- 17 813 826
- départements couverts par l'appariement BDNB
- 93 / 93
- distance médiane entre la vente et le bâtiment retenu
- 13,3 m
- 95ᵉ centile de cette distance
- 49,8 m
FAQ
Questions fréquentes sur le croisement DVF, DPE et BDNB
Les questions qui reviennent avant de brancher les trois bases sur un outil ou un agent.
Existe-t-il un identifiant commun entre DVF, DPE et BDNB ?
Non. Le DVF décrit des mutations (une vente, une date, un prix, une ou plusieurs parcelles), le DPE décrit un logement ou un bâtiment à la date d'un diagnostic, et la BDNB décrit des bâtiments. Aucun des trois ne publie la clé des deux autres. Il faut donc apparier, soit par la référence cadastrale, soit par l'adresse, soit par la géographie, et chaque méthode a ses erreurs. Normi rattache chaque vente au diagnostic et au bâtiment les plus proches, et publie la distance de rattachement pour que l'utilisateur puisse juger.
Quelle part des ventes DVF a un DPE rattaché ?
Environ trois ventes valorisées sur quatre. Le chiffre exact est lu dans l'instantané du corpus affiché sur cette page : il compte des transactions distinctes (COUNT DISTINCT de l'identifiant de transaction), pas des paires d'appariement. Les autres ventes sont celles pour lesquelles aucun diagnostic ADEME n'a été déposé à moins de 200 mètres dans la fenêtre de dates, et celles que l'appariement écarte volontairement : ventes en bloc, prix aberrants, ventes non géocodées.
Le DPE rattaché à une vente est-il forcément celui du logement vendu ?
Non, et c'est la limite la plus importante. Le rattachement retient le diagnostic le plus proche à moins de 200 mètres, sans comparer la surface ni le type de bien. Dans un immeuble collectif, c'est souvent le diagnostic d'un autre logement de l'immeuble, ou d'un immeuble voisin. Ce rattachement est fiable pour des statistiques par classe sur un code postal ou une commune, où les erreurs individuelles se compensent ; il ne remplace pas le DPE du bien pour une vente précise.
Pourquoi n'y a-t-il aucune donnée en Alsace-Moselle ?
Parce que le DVF lui-même ne couvre pas la Moselle, le Bas-Rhin et le Haut-Rhin, qui relèvent du livre foncier et non du fichier des mutations de la DGFiP, ni Mayotte. Sans vente DVF, il n'y a rien à rattacher : aucune commune de ces départements ne figure dans le catalogue de localisation DVF de Normi.
Comment obtenir l'identifiant d'une transaction pour interroger la BDNB ?
Par l'historique d'une adresse : GET /v1/property-history, ou l'outil MCP lookup_property_history, renvoie toutes les ventes d'une adresse ou d'une rue, chacune avec son champ id. Cet identifiant se passe ensuite à GET /v1/transactions/{id}/bdnb ou à l'outil get_building_characteristics.
Combien coûte ce croisement en crédits ?
L'exemple complet de cette page coûte 32 crédits : 20 pour l'historique de la rue, 2 pour le bâtiment BDNB d'une vente, 10 pour le prix au m² par classe DPE du code postal. Le compte gratuit reçoit 500 crédits chaque mois, sans carte bancaire. Un appel qui ne trouve pas de bâtiment est remboursé.
Sources des chiffres
Les chiffres du bloc « Chiffres du corpus » proviennent de la table normi_corpus_stats, avec la date de mesure affichée. Les autres ont été mesurés en production par les requêtes ci-dessous. Sources des données : DVF (DGFiP), DPE (ADEME), BDNB (CSTB), sous licence ouverte.
- 18 119 513 lignes DVF dotées d'une identité durable · mesuré le 2026-08-28
SELECT count(*) FROM maintenance.dvf_transaction_identity;
- 17 813 826 lignes DVF rattachées à un bâtiment BDNB · mesuré le 2026-08-28
SELECT count(*) FROM public.bdnb_dvf_matches;
- 93 / 93 départements couverts par l'appariement BDNB · mesuré le 2026-08-28
SELECT count(DISTINCT code_departement) FROM public.bdnb_dvf_matches; -- publication gate: all DVF départements
- 13,3 m distance médiane entre la vente et le bâtiment retenu · mesuré le 2026-08-28
SELECT percentile_cont(0.5) WITHIN GROUP (ORDER BY match_distance_m) FROM public.bdnb_dvf_matches;
- 49,8 m 95ᵉ centile de cette distance · mesuré le 2026-08-28
SELECT percentile_cont(0.95) WITHIN GROUP (ORDER BY match_distance_m) FROM public.bdnb_dvf_matches;
- 0 commune DVF en Moselle, Bas-Rhin, Haut-Rhin et à Mayotte · mesuré le 2026-09-24
SELECT count(*) FROM public.dvf_locations WHERE code_departement IN ('57','67','68','976');
Aller plus loin
- Comparatif des API DVF : quelles solutions croisent le DPE et le bâti, et lesquelles non.
- Référence de l'API : historique d'adresse, BDNB, DPE.
- Fiches données : DPE, BDNB, méthodologie.
- Outil MCP : get_building_characteristics.